求助单片机大神!!求此汇编程序每一句意思作用详解,把意思写在程序后面,每一句程序都要,有重谢

2025-01-02 23:24:05
推荐回答(2个)
回答1:

加入分行以后就能很容易看懂,不懂之处再交流

T5HZ EQU 30H :定义T5HZ变量,地址为30H
T7HZ EQU 31H ;定义T7HZ变量,地址为31H
T05SA EQU 32H ;定义T05SA变量,地址为32H
T05SB EQU 33H ;定义T05SB变量,地址为33H

FLAG BIT 00H ;定义FLAG为位变量,地址00H
STOP BIT 01H ;定义STOP为位变量,地址01H
SP1 BIT P1.2 ;定义SP1为位变量,地址P1.2

ORG 00H ;定义主函数运行地址00
LJMP START

ORG 0BH ;;定义中断函数T0运行地址0BH
LJMP INT_T0

START: MOV TMOD,#02H ;T0定时器工作于方式2,8位自动重装计数器。仅TL0作为计数器,TH0的值不变。TL0溢出, TH0中的值自动装入TL0中.
MOV TH0,#06H ;定时器说明:时钟频率fosc= 12MHz,分频频率 Fo =12/12 = 1MHz,T = 1/F0 = 1us
MOV TL0,#06H ;255 - 6 +1 = 250 us
SETB ET0 ;使能T0中断
SETB EA ;使能总中断

;按键检测以及防抖
NSP:
JB SP1,NSP ;如果SP1(P1.2)为1,那么一直在这里等待 ,否则执行向下执行。即按键按下后,执行后面程序。
LCALL DELY10MS ;调用延迟10ms函数
JB SP1,NSP ;如果SP1(P1.2)为1,跳转到NSP行

SETB TR0 ;启动定时器0
MOV T5HZ,#00H
MOV T7HZ,#00H
MOV T05SA,#00H
MOV T05SB,#00H
CLR FLAG
CLR STOP
JNB STOP,$ ;当stop为0时候,一直在这里等待;如果为1的话,执行下一行
LJMP NSP ;跳转到NSP行

;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
;延迟10ms函数
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET

;////////////////////////////////////////////////////////////////////////////////////////////////////////////
;中断T0函数
INT_T0:
INC T05SA
MOV A,T05SA
CJNE A,#110,NEXT ;如果A不等于110,等待,否则跳到NEXT行

MOV T05SA,#00H

INC T05SB
MOV A,T05SB
CJNE A,#06,NEXT ;如果A不等于6,等待,否则跳到NEXT行

MOV T05SB,#00H

JB FLAG,STP ;如果FLAG = 1,那么跳到STP行
CPL FLAG ;CPL = ~CPL
LJMP NEXT

STP:
SETB STOP ;STOP = 1
CLR TR0 ;关闭T0定时器
LJMP DONE ;跳到DONE行

NEXT:
JB FLAG,S5HZ ;如果FLAG= 1,跳到S5HZ行

INC T7HZ ;T7HZ++
MOV A,T7HZ ;A = T7HZ
CJNE A,#03H,DONE ;如果A != #03H,跳到DONE

MOV T7HZ,#00H
CPL P0.0 ;P0.0求反
LJMP DONE ;跳到DONE

S5HZ:
INC T5HZ ;T5HZ = T5HZ + 1
MOV A,T5HZ ;A = T5HZ
CJNE A,#04H,DONE ;如果A != #04H,跳到DONE

MOV T5HZ,#00H
CPL P0.0 ;P0.0求反
LJMP DONE

DONE: RETI ;中断返回
END

回答2:

有什么重谢