测速模块老不好
我弄好的测速模块,通过光电开关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的话,还能帮看看。
帮顶。