打印

测速问题

[复制链接]
2383|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhoulingrong|  楼主 | 2010-4-26 09:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家帮我看看,毛病可能出在什么地方
谢谢大家了
我弄好的测速模块,通过光电开关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,他们不显示测量的速度

相关帖子

沙发
ayb_ice| | 2010-4-26 09:40 | 只看该作者
应该输入接外部中断控制启停内部定时器计时,再换算成转速

使用特权

评论回复
板凳
zhoulingrong|  楼主 | 2010-4-26 09:50 | 只看该作者
我不太明白,
不是通过齿轮的转动让光电开关产生脉冲,让后把脉冲输入到计数引脚,开启中断就可以计数了吗?
电机外部提供转速。

使用特权

评论回复
地板
ayb_ice| | 2010-4-26 10:24 | 只看该作者
3L
你的方法是定时(1S)测量外部脉冲个数,需要两个定时器配合(一个定时,一个计数),一般电机转速3000,这种情况理论误差是1转,1/3000,但是转速60时,误差不是1转,1/60,显然不可接受,你这叫频率法,适合高速,当然也有其它方法解决这个问题。但是周期法就不会这样,你用转速信号控制内部定时器计数,1US的计时精度可以适合大部分情况,在很大转速范围精度都很高,硬件可以利用51定时器的外部控制功能(一次定时器最大周期可能不够用65536US(可以软件解决),软件一般还要做到高速时多采几个周期,低速时少采周期,这样高低速时输出速率(转速刷新)基本一致。。。

使用特权

评论回复
5
zhoulingrong|  楼主 | 2010-4-26 11:00 | 只看该作者
恩,谢谢:)

使用特权

评论回复
6
peigang| | 2010-4-26 15:53 | 只看该作者
用外部中断0或1控制计数中断
有触发打来计数器计数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

43

帖子

1

粉丝