2479|1

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

测速模块老不好 [复制链接]

我弄好的测速模块,通过光电开关MOC70T3检测速度,然后把输出端接到定时\计数器T1端口,我用的是自动重装初值方式,可是一切弄好后却不测速,5秒输出一次,并显示
我的程序如下:
;下面程序为计算电机转速测量
;要计算一分钟的转数即60秒的转速,由于应用12齿轮的,因此计算5秒钟的就是1分钟的转数


   DCOUNT   EQU   03AH                ;测出数来的 千位X10+百位
   COUNT    EQU   03BH                ;测出数来的 十位X10+个位
   JISHU    EQU   042H                ;计数器每发生一次溢出JISHU就会增1


        ORG   0000H       
        LJMP  MAIN
        ORG   000BH
        LJMP  T0DINGSHI
        ORG   001BH
        LJMP  T1JISHU
        ORG   0030H

MAIN:       
        MOV   TMOD,#61H                ;定时\计数模式设计
                                ;T1设置为计数模式的方式2,自动重装初值,初值在改为放的
                                ;T0设置为定时模式的方式1,16位定时\计数模式
                                ;其TMOD的二进制值是 0110 0001
        MOV   TH0,#03CH                ;为定时器装入初值
        MOV   TL0,#0B8H
        MOV   TH1,#156                ;为计数器装入初值
        MOV   TL1,#156
        MOV   IE,#08AH                ;开启IE中断控制寄存器,开启了,定时\计数T0,T1

               
        MOV   R1,#100           ;定时器延时5秒的循环次数
        MOV   P1,#0FFH
        MOV   P2,#0F0H                ;P2口的0—3管脚接数码管的选通端
        MOV   DCOUNT,#00H
        MOV   COUNT,#00H

        SETB  TR0                ;开启中断
        SETB  TR1
       

XUNHUAN3:
        MOV   A,DCOUNT
        MOV   B,#10
        DIV   AB
        MOV   030H,A                ;030H里放入了测量的千位的值
        MOV   031H,B                ;031H里放入了测量的百位的值

        MOV   A,COUNT
        MOV   B,#10
        DIV   AB
        MOV   032H,A                ;032H里放入了测量的十位的值
        MOV   033H,B                ;033H里放入了测量的各位的值

        MOV   A,030H                       
        MOV   DPTR,#TAB
        MOVC  A,@A+DPTR                ;查表取出要显示数的数码管码值
        MOV   P2,#0F1H                ;选通数码管1
        MOV   P0,A                ;通过数码管显示数值
        MOV   034H,A                ;034H里保存数码管的码值

        MOV   A,031H               
        MOV   DPTR,#TAB
        MOVC  A,@A+DPTR                ;查表取出要显示数的数码管码值
        MOV   P2,#0F2H                ;选通数码管2
        MOV   P0,A                ;通过数码管显示数值
        MOV   035H,A                ;035H里保存数码管的码值

        MOV   A,032H               
        MOV   DPTR,#TAB
        MOVC  A,@A+DPTR                ;查表取出要显示数的数码管码值
        MOV   P2,#0F4H                ;选通数码管3
        MOV   P0,A                ;通过数码管显示数值
        MOV   036H,A                ;036H里保存数码管的码值

        MOV   A,033H               
        MOV   DPTR,#TAB
        MOVC  A,@A+DPTR                ;查表取出要显示数的数码管码值
        MOV   P2,#0F8H                ;选通数码管4
        MOV   P0,A                ;通过数码管显示数值
        MOV   037H,A                ;037H里保存数码管的码值


        LCALL DUANDELY1                ;DUANDELY1延时10ms
        MOV   P2,#0F1H                ;选通数码管1
        MOV   P1,034H
        LCALL DUANDELY1
        MOV   P2,#0F2H                ;选通数码管2
        MOV   P1,035H
        LCALL DUANDELY1
        MOV   P2,#0F4H
        MOV   P1,036H
        LCALL DUANDELY1
        MOV   P2,#0F8H
        MOV   P1,037H
       
        LJMP  XUNHUAN3


       
;下面是延时子程序

DUANDELY1:       
        MOV   R6,#10       
DUANDELY2:       
        MOV   R7,#123
        NOP
DUANDELY3:       
        DJNZ  R7,DUANDELY3
        DJNZ  R6,DUANDELY2
        RET


;下面是中断子程序

T0DINGSHI:                        ;TO定时\计数器,作为定时器使用
        PUSH  ACC
        PUSH  DPH
        PUSH  DPL
        PUSH  PSW       
        CLR   TR0                ;关中断
        MOV   TH0,#03CH                ;定时50ms的初值
        MOV   TL0,#0B0H
        SETB  TR0                ;开中断
        DJNZ  R1,EXIT0
        MOV   R1,#100                ;循环100次,定时5秒
        MOV   A,TL1                ;5秒后读取计数器里面的值
        SUBB  A,#156               
        MOV   COUNT,A                ;减去初值就是十位X10+个位的值
        MOV   DCOUNT,JISHU
        MOV   JISHU,#00H        ;5秒后读取计数器记了几个100的值,即千位X10+百位
EXIT0:
        POP   PSW
        POP   DPL
        POP   DPH
        POP   ACC
        RETI


T1JISHU:                        ;T1定时\计数器,作为计数器使用
        PUSH  ACC
        PUSH  DPH
        PUSH  DPL
        PUSH  PSW       
        INC   JISHU                ;不用清空TL1,它每次都会自动重装,且够100则加1
        POP   PSW
        POP   DPL
        POP   DPH
        POP   ACC
        RETI


TAB:        DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
     
        END

我的光电开关MOC70T3的接法如下
D:未命名
他们的在齿轮转时电压是输出4.7到4.0V之间
单片机我用的是AT89S52

最新回复

汇编不熟。 要是C的话,还能帮看看。 帮顶。  详情 回复 发表于 2010-4-26 09:16
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
汇编不熟。
要是C的话,还能帮看看。
帮顶。
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表