求大致讲解一下以下程序 关于基于51单片机的自行车测速系统的程序 50
$INCLUDE(REG52.INC) DISPBUF EQU 59H ;显示缓冲区从5AH开始 SecCoun...
$INCLUDE (REG52.INC)
DISPBUF EQU 59H ;显示缓冲区从5AH开始
SecCoun EQU 58H
SpCoun EQU 56H ;速度计时器单元57H和58H,高位在前(57H单
元中)
Count EQU 55H; 显示时的计数器
SpCalc bit 00h ;要求计算速度的标志,该位为1则主程序进行
速度计算,然后清该位
Hidden EQU 16 ;消隐码
ORG 0000H
AJMP START
ORG 1BH
JMP TIMER1 ;定时中断1入口
ORG 30H
START: MOV SP,#5FH ;设置堆栈
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所有显示器、LED灭
MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器0工作方式1,
计数器
MOV TH1,#HIGH(65536-3686)
MOV TL1,#LOW(65536-3686)
SETB TR1
SETB ET1 ;开定时器1中断
SETB EA
LOOP: JNB SpCalc,LOOP ;如果未要求计算,转本身循环
;标号:MULD 功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MOV R2,SpCoun
MOV R3,SpCoun+1
MOV R6,#0
MOV R7,#5 ;测得的数值是每秒计数值,转为分(每一转测
12次,故乘5而非60)
CALL MULD
SEND: MOV SBUF,R2
SLP1: JBC TI,SN1 ;是否送完?
AJMP SLP1
SN1: MOV SBUF,R3
SLP2: JBC TI,SN2
AJMP SLP2
SN2: MOV SBUF,R4
SLP3: JBC TI,SN3
AJMP SLP3
SN3: MOV SBUF,R5
SLP4: JBC TI,SN4
AJMP SLP4
SN4:
;标号:HB2 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A ;将乘得的结果送R6R7准备转换,这里结果不可能超过2
字节
CALL HB2
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 展开
DISPBUF EQU 59H ;显示缓冲区从5AH开始
SecCoun EQU 58H
SpCoun EQU 56H ;速度计时器单元57H和58H,高位在前(57H单
元中)
Count EQU 55H; 显示时的计数器
SpCalc bit 00h ;要求计算速度的标志,该位为1则主程序进行
速度计算,然后清该位
Hidden EQU 16 ;消隐码
ORG 0000H
AJMP START
ORG 1BH
JMP TIMER1 ;定时中断1入口
ORG 30H
START: MOV SP,#5FH ;设置堆栈
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所有显示器、LED灭
MOV TMOD,#00010101B ;定时器T1工作于方式1,定时器0工作方式1,
计数器
MOV TH1,#HIGH(65536-3686)
MOV TL1,#LOW(65536-3686)
SETB TR1
SETB ET1 ;开定时器1中断
SETB EA
LOOP: JNB SpCalc,LOOP ;如果未要求计算,转本身循环
;标号:MULD 功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MOV R2,SpCoun
MOV R3,SpCoun+1
MOV R6,#0
MOV R7,#5 ;测得的数值是每秒计数值,转为分(每一转测
12次,故乘5而非60)
CALL MULD
SEND: MOV SBUF,R2
SLP1: JBC TI,SN1 ;是否送完?
AJMP SLP1
SN1: MOV SBUF,R3
SLP2: JBC TI,SN2
AJMP SLP2
SN2: MOV SBUF,R4
SLP3: JBC TI,SN3
AJMP SLP3
SN3: MOV SBUF,R5
SLP4: JBC TI,SN4
AJMP SLP4
SN4:
;标号:HB2 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R6、R7中。
;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
MOV A,R4
MOV R6,A
MOV A,R5
MOV R7,A ;将乘得的结果送R6R7准备转换,这里结果不可能超过2
字节
CALL HB2
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 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询