微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用单片机制作的测速表

使用单片机制作的测速表

时间:12-03 来源:互联网 点击:

双字节BCD码整数

;入口条件:待转换的双字节十六进制整数在R6、R7中。

;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。

;影响资源:PSW、A、R2~R7堆栈需求:2字节

MOV A,R4

MOV R6,A

MOV A,R5

MOV R7,A ;将乘得的结果送R6R准备转换,这里结果不可能超过2字节

CALL HB2

CBCD:

MOV DISPBUF,R3 ;最高位

MOV A,R4 ;

ANL A,#0F0H ;去掉低4位

SWAP A ;将高4位切换到低4位

MOV DISPBUF+1,A

MOV A,R4

ANL A,#0FH

MOV DISPBUF+2,A

MOV A,R5

ANL A,#0F0H

SWAP A

MOV DISPBUF+3,A

MOV A,R5

ANL A,#0FH

MOV DISPBUF+4,A

CLR SpCalc ;清计算标志

JMP LOOP

;主程序到此结束

TIMER1: PUSH ACC;ACC入栈

PUSH PSW ;PSW入栈

SETB RS0 ;工作区1

JNB TR0,SETTR0 ;如果T0未运行,则开启T0

JMP GO1

SETTR0:

SETB TR0

GO1:

INC SecCoun ;秒计数器加1

MOV A,SecCoun

CJNE A,#251,Go2 ;如果未到1s则转

CLR TR0 ;1s到了,则停止T0的运行

MOV SpCoun,TH0

MOV SpCoun+1,TL0 ;读取计数值

CLR A

MOV TH0,A

MOV TL0,A ;清计数器

SETB SpCalc ;要求主程序计算速度

MOV SecCoun,#0 ;清秒计数器

Go2:

INC COUNT;用于显示的计数器

MOV A,COUNT

CLR C

SUBB A,#6

JZ N1

JMP N2

N1: MOV COUNT,#0

N2: MOV A,#DISPBUF

ADD A,COUNT

MOV R0,A ;指向当前要显示的显示缓冲区

MOV A,@R0 ;取第一个待显示数

MOV DPTR,#DISPTAB ;字形表首地址

MOVC A,@A+DPTR ;取字形码

MOV P0,A ;将字形码送P0位(段口)

MOV A,COUNT

MOV DPTR,#BitTab ;字位表首地址

MOVC A,@A+DPTR

ORL P2,#11111100B

ANL P2,A

MOV TH1,#HIGH(65536-4000)

MOV TL1,#LOW(65536-4000)

POP PSW

POP ACC

RETI

BitTab: DB7Fh,0BFH,0DFH,0EFH,0F7H,0FBH

DISPTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

……其他数学运算程序(略)

四、程序分析

主程序在对定时器、计数器、堆栈等进行初始化后即判断标志SpCalc是否为1,如果为1,说明要求对数据进行计算处理,首先将SpCalc标志清零,以保证下次能正常判断,然后进入数据处理程序,由于这里的闸门时间为1s,而显示要求为转/分,因此,要将测到的数据进行转换,转换的方法是将测得的数据乘以60,但由于转轴上安装有12只磁钢,每旋转一周可以得到12个脉冲,因此,要将测得的数据除以12,所以综合起来,将测得的数据乘以5即可得到每分钟的转速。计算得到的结果是二进制的整数,要将数据送往显示缓冲区需要将该数转化为BCD码。运算得到的是压缩BCD码,需要将其转换为非压缩BCD码,从标号CBCD开始的一段程序即作了这样的处理。需要说明的是,这里多位二进制乘法和多位二进制到BCD码的转换都是用了现成的成熟子程序,因此,首先将二进制数转换为压结合实际BCD码,然后再转换成非压缩BCD码,看似多写了些程序,实际上这对于保证程序的质量很有好处。

定时器T1用作4ms定时发生器,在定时中断程序中进行数码管的动态扫描,同时产生1s的闸门信号。1s闸门信号的产生是通过一个计数器Count,每次中断时间为4ms,每计250次即为1s,到了1s后,即清除计数器Count,然后关闭作为计数器用的T0,读出TH0、TL0中的数值,分别送入SpCoun和SpCoun+1单元,将T0中的值清空,置SpCalc标志为1,要求主程序进行速度值的计算。这里还有一个细节,用作1s闸门信号产生的Count每次中断都会加1,而T0却有一个周期是被关闭的,因此,计数值是251而不是250。

看完这一部份内容以后,请读者自行完成以下工作:

1.试用测脉宽法测试速度(提示:80C51单片机内部有高精度信号源,而其计数器又具有门控特性),注意硬件设计要略作更改。

2.查找等精度测量原理,试设计等精度测量的硬件设计并编写相应软件。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top