资源描述
实验二 清零程序
一、 实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。
二、 实验内容 把2000H~20FFH的内容清零。
三、 实验程序框图
四、 实验步骤 用连续或单步的方式运行程序,检查2000~20FF中执行程序前后的内容变化。
五、 思考 假使把2000H~20FFH中的内容改成FF,如何修改程序。
六、 程序清单 文件名: SW01.ASM
ORG 0000H
LJMP SE01
ORG 0640H
SE01: MOV R0,#00H
MOV DPTR,#2000H ;(0000H)送DPTR
LOO1: CLR A
MOVX @DPTR,A ;0送(DPTR)
INC DPTR ;DPTR+1
INC R0 ;字节数加1
CJNE R0,#00H,LOO1 ;不到FF个字节再清
LOOP: SJMP LOOP
END
实验三 拆字程序
一、实验目的 掌握汇编语言设计和调试方法
二、实验内容 把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
三、实验程序框图
开 始
2000H内容送A
高地位交换
屏蔽高位后送2001H
2000H内容送A
屏蔽高位后送2002H
结束
四、实验步骤 用连续或单步方式运行程序,检查2000H~2002H中内容变化情况。
五、思考 如何用断点方式调试本程序
六、程序清单 文件名:SW02.ASM
ORG 0000H
LJMP SE02
ORG 0660H
SE02: MOV DPTR,#2000H
MOVX A,@DPTR
MOV B,A ;(2000)→A→B
SWAP A ;交换
ANL A,#0FH ;屏蔽高位
INC DPTR
MOVX @DPTR,A ;送2001H
INC DPTR
MOV A,B
ANL A,#0FH ;(2000)内容屏蔽高位
MOVX @DPTR,A ;送2002H
LOOP: JMP LOOP
END
实验四 数据区传送子程序
一、 实验目的 掌握RAM中的数据操作
二、 实验内容 把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、 实验程序框图
开 始
源地址内容送A
(A)送目的地址
源地址加1
目的地址加1
字节数到么?
结 束
N
四、 实验步骤 在R2、R3中输入源首址(例如0000H),R4、R5中输入的目的地址(例如2000H),R6、R7中输入字节数(例如1FFFH),运行程序,检查0000H~1FFFH中内容是否和2000H~3FFFH中内容完全一致。
五、 程序清单 文件名 SW04.ASM
ORG 0000H
LJMP SE22
ORG 07B0H
SE22: MOV DPL,R3
MOV DPH,R2 ;建立源程序首址
MOVX A,@DPTR ;取数
MOV DPL,R5
MOV DPH,R4 ;目的地首址
MOVX @DPTR,A ;传送
CNE R3,#0FFH,LO42
INC R2
LO42: INC R3 ;源地址加1
CJNE R5,#0FFH,LO43
INC R4
LO43: INC R5 ;目的地址加1
CJNE R7,#00H,LO44
CJNE R6,#00H,LO45 ;字节数减1
LOOP: SJMP LOOP
NOP
LO44: DEC R7
SJMP SE22
LO45: DEC R7
DEC R6
SJMP SE22 ;未完继续
END
实验五 简单I/O口应用
一、 实验目的 掌握P1口作为I/O口的使用方法,理解读引脚和读锁存器的区别。
二、 实验要求 运行不同的程序,观察发光二极管的亮灭状态,比较程序的特点,了解汇编语言设计的基本思路和指令应用。
三、 思想描述
流程图:
结束
开始
读P3.4的脚
P3.4接地
点亮8个LED
8个LED交叉亮灭
程序流程图
开始
立即数00H送P1口,点亮8个发光二极管
延时
立即数0FFH送P1口,熄灭8个发光二极管
延时
结束
;------------------------------------------------------
;程序:所有发光二极管不停地闪动
;-------------------- ----------------------------------
LED_PORT EQU P1
ORG 0000H ;程序从地址0000H开始存放
LJMP START
ORG 0100H
START:
CLR EA ;关闭所有中断
MOV LED_PORT,#00H ;点亮所有发光二极管
LCALL DELAY ;延时
MOV LED_PORT,#0FFH ;灭掉所有发光二极管
LCALL DELAY
SJMP START ;重复闪动
DELAY:
MOV R3,#7FH ;延时子程序
DEL2:
MOV R4,#0FFH
DEL1:
NOP
DJNZ R4,DEL1
DJNZ R3,DEL2
RET
END
;------------------------------------------------------
;程序:用于关控制发二极管的显示方式
;------------------------------------------------------
LED_PORT EQU P1
ORG 0000H
LJMP START
ORG 0100H
START:
CLR EA ;关闭所有中断
MOV P3,#11111111B ;使P3口锁存器置位
MOV A,P3 ;读P3口引脚线信号
ANL A,#00010000B ;逻辑与操作,屏蔽掉无关位
JZ DDPING ;判断P3.4是否接地,若是,跳转到DDPING执行
MOV LED_PORT,#00H ;否则,P3.4高电平,点亮所有发光二极管
SJMP START
DDPING:
MOV LED_PORT,#55H ;P3.4接地,发光二极管交叉亮灭
SJMP START
END
实验六 P3口输入P1口输出实验
一、 实验目的 P3口输入P1口输出,实现I/O控制。
二、 实验要求 撰写实验报告,给出输入输出实现方式,画出实验原理图,给出程序流程及实现的全部代码。
三、 思想描述:
系统板上硬件连线
(1. 把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态静态数码显示模块”区域中的a-h端口上;要求:P0.0对应着a,P0.1对应着b,……,P0.7对应着h。
(2. 把“单片机系统”区域中的P2.0端口用8芯排线连接到“动态数码显示模块”区域中的任一个公共端上。
实验原理
AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。
因此,我们设定TMOD=00000001B,即TMOD=01H
下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出
TH0=(216-50000) / 256
TL0=(216-50000) MOD 256
当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。
实验结果
汇编源程序(查询法)
SECOND EQU 30H
TCOUNT EQU 31H
ORG 00H
START: SETB P2.0
MOV SECOND,#00H
MOV TCOUNT,#00H
MOV TMOD,#01H
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
SETB TR0
DISP: MOV A,SECOND
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
WAIT: JNB TF0,WAIT
CLR TF0
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
INC TCOUNT
MOV A,TCOUNT
CJNE A,#20,NEXT
MOV TCOUNT,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,NEX
MOV SECOND,#00H
NEX: LJMP DISP
NEXT: LJMP WAIT
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
汇编源程序(中断法)
SECOND EQU 30H
TCOUNT EQU 31H
ORG 00H
LJMP START
ORG 0BH
LJMP INT0X
START: SETB P2.0
MOV SECOND,#00H
MOV A,SECOND
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV TCOUNT,#00H
MOV TMOD,#01H
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
SETB TR0
SETB ET0
SETB EA
SJMP $
INT0X:
MOV TH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
INC TCOUNT
MOV A,TCOUNT
CJNE A,#20,NEXT
MOV TCOUNT,#00H
INC SECOND
MOV A,SECOND
ANL A,#0FH
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
实验7外部中断实验
一、 实验目的 中断实验输出控制,学习中断程序设计方法,理解中断机制理解下降沿中断和低电平中断的区别。
二、 实验要求 编写主程序 实现系统的初始化,若有不同的初始化方式,应有状态指示;编写中断服务程序,服务程序操作以能明确判断发生一次中断为准,且有声光指示作为人机界面。实验前必须认真复习中断相关内容,并在实验报告上写出预习报告,给出实验方案,经过实验指导教师检查合格后,方可进行实验。实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。
实验原理
用8051单片机设计一交通信号灯模拟控制系统,能够完成正常情况下的轮流放行以及特殊情况和紧急情况下的红绿灯控制
1.掌握单片机中断系统、定时/计数器的编程应用。
2.通过对交通灯控制程序的编写与调试,掌握中断程序的结构。
3.正常情况下A、B道(A、B道交叉组成十字路口,A是主道,B是支道)轮流放行,A道放行1分钟(其中5秒用于警告),B道放行30秒(其中5秒用于警告)。
4.一道有车而另一道无车时,使有车车道放行,K5键按下表示A道有车,K1键按下表示B道有车。
5.K9键按下表示有紧急车辆通过时,A、B道均为红灯。
控制码表
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
控制码
(P1口数据)
状态说明
(空)
(空)
B线
绿灯
B线
黄灯
B线
红灯
A线
绿灯
A线
黄灯
A线
红灯
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
0
0
0
1
1
0
1
1
1
1
0
1
1
1
1
0
0
F3H
F5H
DEH
EEH
A线放行,B线禁止
A线警告,B线禁止
A线禁止,B线放行
A线禁止,B线警告
(二) 实验连线表
单片机
发光二极管
按键
连接1
P1.0-P1.5
L0-L5
连接2
INT0
KR1
连接3
T0
KR2
连接4
T1
KR3
连接5
INT1
(三)实验结果
交通信号灯模拟控制系统程序流程图
程序: BANK0_REG EQU 00H ;选择第0组寄存器
BANK1_REG EQU 08H ;选择第1组寄存器
BANK2_REG EQU 10H ;选择第2组寄存器
BANK3_REG EQU 18H ;选择第3组寄存器
ORG 0000H
LJMP MAIN ;指向主程序
ORG 0003H
LJMP EMERG ;指向紧急车辆出现中断程序 外部中断0
ORG 0013H
LJMP ONEBUSY ;指向一道有车另一道无车中断程序 外部中断1
ORG 0100H
MAIN:
MOV PSW,#BANK0_REG
MOV SP,#0DFH
SETB PX0 ;置外部中断0为高优先级中断
MOV TCON,#00H ;置外部中断0,1为电平触发
MOV TMOD,#10H ;置定时器1为方式1
MOV IE,#85H ;开CPU中断,开外中断0,1中断
DISP:
MOV P1,#0F3H ;A绿灯放行,B红灯禁止
MOV R2,#6EH ;置0.5秒循环次数
DISP1:
LCALL DELAY ;调用0.5秒延时子程序
DJNZ R2,DISP1 ;55秒不到继续循环
MOV R2,#06 ;置A绿灯闪烁循环次数
WARN1:
CPL P1.2 ;A绿灯闪烁
LCALL DELAY
DJNZ R2,WARN1 ;闪烁次数未到继续循环
MOV P1,#0F5H ;A黄灯警告,B红灯禁止
MOV R2,#04H
YEL1:
LCALL DELAY
DJNZ R2,YEL1 ;2秒未到继续循环
MOV P1,#0DEH ;A红灯,B绿灯
MOV R2,#32H
DISP2:
LCALL DELAY
DJNZ R2,DISP2 ;25秒未到继续循环
MOV R2,#06H
WARN2:
CPL P1.5 ;B绿灯闪烁
LCALL DELAY
DJNZ R2,WARN2
MOV P1,#0EEH ;A红灯,B黄灯
MOV R2,#04H
YEL2:
LCALL DELAY
DJNZ R2,YEL2
LJMP DISP ;循环执行主程序
;----------------------------------------------
;紧急情况中断子程序
;----------------------------------------------
EMERG:
PUSH P1 ;P1口数据压栈
PUSH 03H ;R3寄存器压栈
PUSH TH1 ;TH1压栈
PUSH TL1 ;TL1压栈
MOV P1,#0F6H ;A,B道均为红灯
MOV R5,#28H ;置0.5秒循环初值
DELAY0:
LCALL DELAY
DJNZ R5,DELAY0 ;20秒未到继续循环
POP TL1 ;弹栈恢复现场
POP TH1
POP 03H
POP P1
RETI ;返回主程序
;----------------------------------------------
;路有车一路无车中断子程序ONEBUSY
;----------------------------------------------
ONEBUSY:
CLR EA ;关中断
PUSH P1 ;压栈
PUSH 03H
PUSH TH1
PUSH TL1
SETB EA ;开中断
JNB P3.4,BP ;A道无车转向
MOV P1,#0F3H ;A绿灯,B红灯
SJMP DELAY1 ;转向5秒延时
BP:
JNB P3.5,EXIT ;B道无车退出中断
MOV P1,#0DEH ;A红灯,B绿灯
DELAY1:
MOV R6,#0AH ;置0.5秒循环初值
NEXT:
LCALL DELAY
DJNZ R6,NEXT ;5秒未到继续循环
EXIT:
CLR EA
POP TL1 ;弹栈恢复现场
POP TH1
POP 03H
POP P1
SETB EA
RETI
;----------------------------------------------
;0.5S延时子程序
;----------------------------------------------
DELAY:
MOV R3,#0AH
MOV TH1,#3CH
MOV TL1,#0B0H
SETB TR1
LP1:
JBC TF1,LP2
SJMP LP1
LP2:
MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ R3,LP1
RET
END
实验八 定时器/计数器应用试验
一、 实验目的 掌握定时器/计数器编程方法,掌握相关寄存器的初始化及其意义;理解定时器/计数器的本质,掌握定时器/计数器应用的两种方法:查询和中断。
二、 实验要求 利用定时器实现一秒定时,或计数外部脉冲,分别采用查询和中断两种方式实现,加深对中断的理解加强对相关寄存器各个位的灵活应用能力。人机界面方案自行设计。实验前必须认真复习定时计数器相关内容,并在实验报告上写出定时计数器的初始化步骤,给出人机界面实现方案,经过实验指导教师检查合格后,方可进行试验。实验结束后撰写实验报告画出实验原理图,给出程序流程及实现的全部代码。
实验连线表
单片机
MC8
按键
+5V/GND
+5V/GND
+5V/GND
P1.0
SCL
P1.1
SDA
GND
KC1
P1.2
KR1
P1.3
KR2
P1.4
KR3
P1.5
(三)程序流程图
闹钟修改功能子程序FTION1流程框图
主程序MAIN流程框图
时钟修改功能子程序FTION0流程框图
时钟修正中断服务子程序CLOCK流程框图
加1键修改子程序CUM流程框图
程序清单:
;--------------------------------------------------------------
;-------------------数字时钟制作----------------------------
;--------------------------------------------------------------
BANK0_REG EQU 00H ;选择第0组寄存器
BANK1_REG EQU 08H ;选择第1组寄存器
BANK2_REG EQU 10H ;选择第2组寄存器
BANK3_REG EQU 18H ;选择第3组寄存器
LED_MAX_BITS EQU 06H ;LED最大位数
LED_SCL EQU P1.0
LED_SDA EQU P1.1
HD_K0 EQU P1.2
HD_K1 EQU P1.3
HD_K2 EQU P1.4
HD_CBP EQU P1.5
K0_FLAG EQU 00H
K1_FLAG EQU 01H
K2_FLAG EQU 02H
SEC_FLAG EQU 03H ;定义各标识位符号地址
MIN_FLAG EQU 04H
HOUR_FLAG EQU 05H
RMIN_FLAG EQU 06H
RHOUR_FLAG EQU 07H
RTIM_FLAG EQU 08H
ARM_FLAG EQU 09H ;是否设定闹钟标识
TIMDATA EQU 30H ;时钟修改记忆单元
RTIMDATA EQU 31H ;闹钟修改记忆单元清零
MSEC1 EQU 32H
MSEC2 EQU 33H
HOUR EQU 34H
MIN EQU 35H
SEC EQU 36H
RHOUR EQU 37H
RMIN EQU 38H
RSEC EQU 39H
COUNT EQU 3AH
LED_DIS_PTR EQU 3BH
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIMER_INT ;定时器中断服务程序
ORG 0100H
MAIN:
CLR EA
MOV PSW,#BANK0_REG
MOV SP,#0DFH
MOV R0,#20H
MOV R7,#80H-20H
LCALL PUB_CLEAR_RAM1 ;清0RAM单元
LCALL LED_CLR
MOV LED_DIS_PTR,#HOUR
LCALL LED_DISP_DATA
MOV TMOD,#02H ;定时器T0方式2,
MOV TL0,#06H ;定时250us初始值
MOV TH0,#06H
SETB EA ;中断允许
SETB ET0
SETB TR0 ;启动定时器
BEGIN:
LCALL KEY_TEST ;调用判别键入测试程序
JC RETEST ;有键输入则转去抖程序
JNB ARM_FLAG,BEGIN ;判别闹钟设定标识位,未设定则返回
LCALL ALARM ;调闹钟程序
LJMP BEGIN ;返回
RETEST:
LCALL KEY_SCAN
JB K0_FLAG,PRO_K0 ; 判别是否时钟修改功能键
JB K1_FLAG,PRO_K1 ; 判别是否闹钟修改功能键
JB K2_FLAG,PRO_K2 ; 判别是否加1功能键
SJMP BEGIN
PRO_K0:
LCALL FTION0 ; 是时钟参数修改功能键则调用时钟修改程序
SJMP BEGIN
PRO_K1:
LCALL FTION1 ; 是闹钟参数修改功能键则调用闹钟设定程序
SJMP BEGIN
PRO_K2:
LCALL CUM ; 是加1功能键则调用加1修改程序
SJMP BEGIN
;--------------------------------------------------
;时钟参数修改子程序FTION0
;功能:根据时钟修改功能键按下的次数
;分别将时钟修改标识位SECBIT, MIN_FLAG,HOURBIT置1
;入口:TIMDAT
;出口:TIMDAT
;--------------------------------------------------
FTION0:
JB RMIN_FLAG,BACK_B
JB RHOUR_FLAG,BACK_B ;当正在设置闹钟不能设置时间,需先结束闹钟设置状态
CLR TR0 ;关定时器
CLR SEC_FLAG ;时钟秒标识位清零
CLR MIN_FLAG ;时钟分标识位清零
CLR HOUR_FLAG ;时钟小时标识位清零
MOV LED_DIS_PTR,#HOUR ;将时钟小时单元设为显示首地址
MOV RTIMDATA,#00H ;清闹钟修改位置标识记录
INC TIMDATA ;将时钟修改记录值加1
MOV A,TIMDATA
CJNE A,#01H,TW0 ;若记录值为1则将时钟秒修改标识置1
SETB SEC_FLAG ;时钟秒标识位置1
SJMP BACK_C
TW0:
CJNE A,#02H,THREE0 ;若记录值为2则将时钟分修改标识置1
SETB MIN_FLAG ;时钟分标识位置1
SJMP BACK_C
THREE0:
CJNE A,#03H,BACK_A ;若记录值为3则将时钟小时修改标识置1
SETB HOUR_FLAG ;时钟小时标识位置1
SJMP BACK_C
BACK_A:
MOV TIMDATA,#00H ;若按4次则清时钟单元修改位置记录
SETB TR0 ;定时器重新启动
BACK_B:
RET
BACK_C:
LCALL LED_DISP_DATA
RET
;--------------------------------------------------
;闹钟参数修改功能键设定子程序FTION1
;功能:根据闹钟修改功能键按下的次数
;分别将闹钟修改标识位RMINBIT ,RHOURBIT置1
;入口:RTIMDAT
;出口:RTIMDAT,ARM_FLAG,B
;--------------------------------------------------
FTION1:
JB SEC_FLAG,FTION1_A
JB MIN_FLAG,FTION1_A
JB HOUR_FLAG,FTION1_A ;当处于设置时间状态时不能设置闹钟,需先结束时间设置状态
CLR RMIN_FLAG ;将闹钟分单元修改标识位
CLR RHOUR_FLAG ;将闹钟小时单元修改标识位清零
MOV LED_DIS_PTR,#RHOUR ;将闹钟单元地址设为显示首地址
MOV TIMDATA,#00H
INC RTIMDATA ;将闹钟修改记录值加1
MOV A,RTIMDATA
CJNE A,#01H,TOW1
SETB RMIN_FLAG ;若记录值为1则将闹钟分单元修改标识位
LJMP FTION1_B ;置1
TOW1:
CJNE A,#02H,THREE1
SETB RHOUR_FLAG ; 若记录值为2,将闹钟小时单元修改标识位置1
LJMP FTION1_B
THREE1:
SETB ARM_FLAG ;F0标识位为1表示闹钟已设定
MOV LED_DIS_PTR,#HOUR ;恢复时钟显示单元首地址
MOV RTIMDATA,#00H ;将闹钟修改记录值清零
FTION1_A:
RET
FTION1_B:
LCALL LED_DISP_DATA
RET
;---------------------------------------------------------------
;加1键修改子程序CUM
;功能:根据时钟和闹钟修改标识位的状态,将时钟或闹钟对应RAM内容+1
;入口:SEC_FLAG, MIN_FLAG ,HOUR_FLAG,RSECBIT, RMIN_FLAG ,RHOUR_FLAG
;---------------------------------------------------------------
CUM:
JNB SEC_FLAG,CUM0 ;若时钟秒修改标识位为1则秒单元内
MOV A,SEC ;容加1
ADD A,#01H
DA A
MOV SEC,A
CJNE A,#60H,CUMEND
MOV SEC,#00H
LJMP CUMEND
CUM0:
JNB MIN_FLAG,CUM1 ;若时钟分修改标识位为1,则分单元
MOV A,MIN ;内容加1
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,CUMEND
MOV MIN,#00H
LJMP CUMEND
CUM1:
JNB HOUR_FLAG,CUM2 ;若时钟小时修改标识位为1,则小时
MOV A,HOUR ;单元内容加1
ADD A,#01H
DA A
MOV HOUR,A
CJNE A,#24H,CUMEND
MOV HOUR,#00H
LJMP CUMEND
CUM2:
JNB RMIN_FLAG,CUM3 ;若闹钟分修改标识位为1,则分单元
MOV A,RMIN ;内容加1
ADD A,#01H
DA A
MOV RMIN,A
CJNE A,#60H,CUMEND
MOV RMIN,#00H
LJMP CUMEND
CUM3:
JNB RHOUR_FLAG,CUMEND ;若闹钟小时修改标识位为1,则小
MOV A,RHOUR ;时单元内容加1
ADD A,#01H
DA A
MOV RHOUR,A
CJNE A,#24H,CUMEND
MOV RHOUR,#00H
CUMEND:
LCALL LED_DISP_DATA
RET
;--------------------------------------------------
;闹钟判断与启动子程序ALARM
;功能:判断闹钟是否设定,控制闹钟的启,停
;入口:MIN ,RMIN ,HOUR ,RHOUR
;出口:HD_BP,ARM_FLAG
;--------------------------------------------------
ALARM:
MOV A,RMIN
CJNE A,MIN,DONT0 ;比较分单元内容,若相同则继续比较小时单
MOV A,RHOUR ;元内容,否则返回
CJNE A,HOUR,DONT0
CLR HD_CBP ;启动闹钟
SETB RTIM_FLAG ;设置闹钟计时标时,时钟开始10秒计时
DONT0:
MOV A,COUNT ;取闹钟保持计时时间
CJNE A,#10,DONT ;判断闹钟保持10秒时间到否
MOV COUNT,#00H ;清除闹钟保持10秒计时
SETB HD_CBP ;清除闹钟
CLR ARM_FLAG ;清闹钟标识,取消闹钟设置
CLR RTIM_FLAG ;清闹钟计时标识,
DONT:
RET
;--------------------------------------------------
;时钟修正中断服务子程序
;功能:通过定时器中断,自动修改时钟参数
;入口:MSEC1 ,MSEC2,,SEC,MIN,HOUR
;出口:MSEC1 ,MSEC2,,SEC,MIN,HOUR
;--------------------------------------------------
TIMER_INT:
CLR EA ; 关中断
展开阅读全文