首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

测速模块老不好,该如何解决

2012-02-28 
测速模块老不好我弄好的测速模块,通过光电开关MOC70T3检测速度,然后把输出端接到定时\计数器T1端口,我用的

测速模块老不好
我弄好的测速模块,通过光电开关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的接法如下

他们的在齿轮转时电压是输出4.7到4.0V之间
单片机我用的是AT89S52


[解决办法]
汇编不熟。
要是C的话,还能帮看看。
帮顶。

热点排行