大家帮我看看,毛病可能出在什么地方
谢谢大家了
我弄好的测速模块,通过光电开关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的接法是:
二极管的正极接500欧姆的电阻再接到5V电压上,负极接地
三极管的C 极接500欧姆的电阻再接到5V电压上,E极接地
他们的在齿轮转时电压是输出4.7到4.0V之间
单片机我用的是AT89S52,他们不显示测量的速度 |