00基于51单片机的电机转速测量与显示系统

发布时间:   来源:文档文库   
字号:
ORG0000H;单片机主程序入口地址LJMPMAIN
ORG0003H;外部中断0入口地址LJMPINTER0
ORG000BH;定时器0入口地址LJMPTIMER0
INIT_T0:;子程序,初始化定时器0
MOVTMOD,#01H;定时器0工作方式116位计数器MOVR2,#20;1s=1000ms=20*50ms
MOVTL0,#00H;对于f=11.0592MHz的晶体振荡器MOVTH0,#4CH;(2^16-x*(f/12=50ms,x=4C00HSETBET0SETBEASETBTR0
RET;返回,returnMAIN:;主程序MOVSP,#60H;设置堆栈位置
MOVR0,#44H;显示数据开始存放地址MOVR1,#0;数码管位数MOV43H,#1;千位MOV42H,#2;百位MOV41H,#3;十位MOV40H,#4;个位
SETBEX0;初始化外部中断0,允许中断源SETBEA;初始化外部中断0,允许总中断SETBIT0;初始化外部中断0,下降沿触发方式

CALLINIT_T0;调用子程序初始化定时器0
LOOP1:MOVA,@R0MOVDPTR,#TAB01MOVCA,@A+DPTR
MOVP0,A;向数码管发送数据MOVA,R1MOVDPTR,#TAB02MOVCA,@A+DPTR
MOVP2,A;选中某个数码管CALLDELAY;延时INCR0INCR1
CJNER1,#4,LOOP1;4个数码管显示完毕?MOVR0,#44H;显示数据开始存放地址MOVR1,#0JMPLOOP1;反复执行DELAY:;延时子程序MOVR6,#2;(R6=2
DEL01:MOVR7,#250;(R7=250
DEL02:DJNZR7,DEL02;R71不等于0跳转DJNZR6,DEL01;R61不等于0跳转RET;返回
TIMER0:;定时器0中断服务程序MOVTL0,#00H;对于f=11.0592MHz的晶体振荡器MOVTH0,#4CH;(2^16-x*(f/12=50ms,x=4C00H

DJNZR2,END_T0;如果不到20次中断则不足1sMOVR2,#20;1s=1000ms=20*50ms
MOVA,40H;准备显示个位MOV44H,A
MOVA,41H;准备显示十位MOV45H,A
MOVA,42H;准备显示百位MOV46H,A
MOVA,43H;准备显示千位MOV47H,A
MOV40H,#0;准备下一次测量转速MOV41H,#0;准备下一次测量转速MOV42H,#0;准备下一次测量转速
MOV43H,#0;准备下一次测量转速END_T0:
RETI;中断返回,returninterrupt
INTER0:;外部中断0中断服务程序MOVA,40H

INCAMOV40H,ACJNEA,#10,END_EX0
MOV40H,#0;个位大于10则修改为0,十位加1MOVA,41HINCAMOV41H,A
CJNEA,#10,END_EX0
MOV41H,#0;十位大于10则修改为0,百位加1MOVA,42HINCAMOV42H,ACJNEA,#10,END_EX0
MOV42H,#0;百位大于10则修改为0,千位加1MOVA,43HINCAMOV43H,ACJNEA,#10,END_EX0
MOV43H,#0;千位大于10则修改为0END_EX0:
RETI;中断返回,returninterrupt

TAB01:DB0C0H,0F9H,0A4H,0B0H,099H;01234段码DB092H,082H,0F8H,080H,090H;56789段码
DB088H,083H,0C6H,0A1H,086H,08EH;ABCDEF段码TAB02:DB0EH,0DH,0BH,07H;数码管位选END;程序结束

本文来源:https://www.2haoxitong.net/k/doc/661fe9f3960590c69ec37685.html

《00基于51单片机的电机转速测量与显示系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式