A. 求單片機課程設計實驗 用匯編語言,基於51單片機的定時鬧鍾
MODE_RG EQU40H ;模式選擇
MODE2 EQU 60H ;MODE值
MODE3 EQU61H
MODE4 EQU62H
MODE5 EQU63H
MODE6 EQU64H
MODE1 EQU65H
HOUR EQU41H ;小時緩沖區
MIN EQU42H ;分鍾緩沖區
SEC EQU 43H ;秒緩沖區
TEMP EQU4AH
;*********鬧鍾緩沖區********************
H_ALARM EQU 6AH ;鬧鍾緩沖區
M_ALARM EQU6BH
S_ALARM EQU6CH
F_ALARM EQU6DH
;***********秒錶緩沖區******************
M_SEC EQU76H
S_SEC EQU77H
;*********LED送顯示臨時變數*************
LED0 EQU51H
LED1 EQU52H
LED2EQU53H
LED3 EQU54H
MODE_KEYEQUP3.4
UP_KEY EQUP3.3
DOWN_KEY EQUP3.5
BUF EQU49H
ORG0000H
LJMPMAIN
ORG000BH
LJMPINT_0
ORG001BH
LJMPINT_1
ORG0080H
MAIN: MOVSP,#2FH ;堆棧初始化
MOVMODE_RG,#0 ;MODE_RG寄存器值初始化
MOVLED0,#0FEH ;初始化LED
MOVLED1,#0FDH
MOVLED2,#0FBH
MOVLED3,#0F7H
MOVMODE1,#1
MOVMODE2,#2
MOVMODE3,#3
MOVMODE4,#4
MOVMODE5,#5
MOVMODE6,#6
MOVF_ALARM,#0 ;錯誤2:一開始用CLRF_ALARM,這導致在後面的時候JZF_ALARM運行錯誤,
MOVBUF,#0 ;在於JZ指令是對累加器A全為0或者全為1進行判斷,CLR只能對一位操作
MOVTMOD,#11H ;定時器初始化:定時器0,方式1,定時器1,方式1
MOVIP,#00001000B ;定時器1優先順序高
MOVTH0,#3CH ;定時50MS
MOVTL0,#0B1H
MOVTH1,#0D8H ;定時10MS
MOVTL1,#0F0H
SETBEA
SETBET0
SETBET1
SETBTR0;啟動定時器
MOVHOUR,#0 ;fortest
MOVMIN,#0
MOVSEC,#0 ;定時器計數器,50MS中斷一次,200次則剛好1S
MOVM_SEC,#0
MOVS_SEC,#0
MOVH_ALARM,#0
MOVM_ALARM,#0
MAIN1: LCALLDISPLAY12
LCALLDISPLAY34
;CLRP1.4 TEST
JNBMODE_KEY,KEY_SCAN
MOVA,MODE_RG
CJNEA,MODE6,Y1 ;MODE6秒錶
JNBDOWN_KEY,DEALDOWN ;判斷秒錶開關
JNBUP_KEY,DEALUP
Y1: MOVA,F_ALARM ;判斷鬧鍾
JNZALARM
LJMPMAIN1
;-----------------------------------秒錶開關程序---------------------------
DEALDOWN: LCALLDELY10MS
JBDOWN_KEY,MAIN1
H1: JNBDOWN_KEY,H1
CPLTR1
LJMPMAIN1
DEALUP: LCALLDELY10MS
JBUP_KEY,MAIN1
H2: JNBUP_KEY,H2
MOVM_SEC,#0
MOVS_SEC,#0
CLRTR1
LJMPMAIN1
;-----------------------------------鬧鍾掃描程序---------------------------
ALARM: MOVA,H_ALARM
CPLP1.2
CJNEA,HOUR,EXIT3
MOVA,M_ALARM
CJNEA,MIN,EXIT3
LJMPSTARTALARM
EXIT3: SETBP3.6
LJMPMAIN1
STARTALARM:CPLP3.6
JNBDOWN_KEY,OFFALARM
LJMPS1
OFFALARM: LCALLDELY10MS
JBDOWN_KEY,MAIN1
S2: JNBDOWN_KEY,S2
MOVF_ALARM,#0
SETBP3.6
LJMPMAIN1
S1: LCALLDELAY
LJMPMAIN1
;-----------------------------------鍵盤掃描程序---------------------------
KEY_SCAN: LCALLDELY10MS
JBMODE_KEY,MAIN1
INCMODE_RG
;SETBP1.4 測試
K1: JNBMODE_KEY,K1 ;按鍵直到用戶松開按鍵
K2: MOVA,MODE_RG
CJNEA,#0,DEALMODE;不是在正常顯示模式下則跳轉到模式處理程序
LJMPMAIN1 ;返回主程序
;*******************模式處理程序部分
DEALMODE: MOVTEMP,#0 ;凡轉入MODE處理,則首先清除TEMP
MOVA,MODE_RG ;有MODE_RG值不為5、0
CJNEA,MODE2,M0 ;判斷MODE_RG值,不為1跳轉
LJMPH_GLINT ;模式1,小時位閃爍
M0: CJNEA,MODE3,M1 ;不是模式2,跳轉
LJMPM_GLINT ;模式2,分鍾位閃爍
M1: CJNEA,MODE4,M2 ;不是模式3,跳轉
LJMPH_GLINT
M2: CJNEA,MODE5,M3
LJMPM_GLINT
M3: CJNEA,MODE6,M4
MOVM_SEC,#0
MOVS_SEC,#0
LJMPMAIN1
M4: CJNEA,MODE1,M5
;CLRTR1
LJMPMAIN1
M5: MOVMODE_RG,#0
LJMPMAIN1
;*****************************MODE為1,3,小時位閃爍
//MOVTEMP,HOUR ;將TEMP賦值,防止在加的時候是在隨機值的基礎上增加
H_GLINT: ;CPLP1.0
MOVR0,#28
MOVR1,#28
K4: LCALLDISPLAY12 ;分開顯示
LCALLDISPLAY34
E1: JNBMODE_KEY,K21 ;檢測是否有按鍵按下,有按下則跳轉到分鍾位閃爍
JBUP_KEY,E9 ;判斷加位有無按鍵按下
LJMPUP
E9: DJNZR0,K4
K6: LCALLDISPLAY34
JNBMODE_KEY,K21 ;檢測是否有按鍵按下,有按下則跳轉延時後進行模式判斷
LJMPG1
K21: LCALLDELY10MS ;延時後確定有MODE按鍵按下,將
JBMODE_KEY,H_GLINT
W: JNBMODE_KEY,W
INCMODE_RG
CPLP1.4
LJMPDEALMODE ;確定有按下,MODE+1後返回MODE處理程序
JNBUP_KEY,UP ;判斷加位有無按鍵按下
G1: DJNZR1,K6
LJMPH_GLINT ;調用完畢返回,實現閃爍
K3: LJMPMAIN1 ;可省略
;******************************MODE為2,4,分鍾位閃爍
M_GLINT: MOVR0,#28
MOVR1,#28
K23: CPLP1.7
LCALLDISPLAY12
LCALLDISPLAY34
JNBMODE_KEY,KK ;跳轉,確定是否有按鍵按下
JNBUP_KEY,UP ;判斷加位有無按鍵按下
MOVA,MODE_RG
CJNEA,MODE3,E2 ;在MODE5的情況下要判斷鬧鍾確認鍵有沒按下
LJMPE5
E2: JNBDOWN_KEY,F2
LJMPE5
F2: LJMPONALARM2
E5: DJNZR0,K23
K24: LCALLDISPLAY12
JNBMODE_KEY,KK ;檢測是否有按鍵按下,有按下則跳轉
JNBUP_KEY,UP ;判斷加位有無按鍵按下
MOVA,MODE_RG ;掃描鬧鍾確認鍵
CJNEA,MODE3,E7 ;在MODE5的情況下要判斷鬧鍾確認鍵有沒按下
LJMPG2
E7: JBDOWN_KEY,E8
CPLP1.3
LJMPONALARM2
E8: LJMPG2
KK: LCALLDELY10MS ;去抖
JBMODE_KEY,M_GLINT
W1: JNBMODE_KEY,W1
INCMODE_RG
CPLP1.4
LJMPDEALMODE ;確定有按下,MODE+1後返回MODE處理程序
G2: DJNZR1,K24
LJMPM_GLINT
;*************************位加,處理程序
;***************小時調整
UP: MOVR1,#20
UP11: INCTEMP
UP12: MOVA,MODE_RG ;判斷此時的MODE,根據MODE將臨時變數給對應的賦值
CJNEA,MODE2,AA0 ;不是在MODE2的情況下跳轉
MOVA,TEMP
CJNEA,#24,A_UP1
MOVTEMP,#0
A_UP1: MOVHOUR,TEMP ;為MODE2,將臨時變數賦給小時位
LJMPUP15
AA0: CJNEA,MODE4,UP13//UP13為分鍾調整入口
MOVA,TEMP
CJNEA,#24,A_UP
MOVTEMP,#0
A_UP: MOVH_ALARM,TEMP ;模式3,將臨時變數賦給鬧鍾的小時位
LJMPUP15 ;UP15為顯示入口
;****************分鍾調整入口
UP13: MOVA,MODE_RG
CJNEA,MODE3,UP14 ;不是模式2,跳轉
MOVA,TEMP
CJNEA,#60,DISOVER2
MOVTEMP,#0
DISOVER2: MOVMIN,TEMP
LJMPUP15
UP14: MOVA,TEMP ;上面判斷不是模式2,則必然是模式4
CJNEA,#60,DISOVER3
MOVTEMP,#0
DISOVER3: MOVM_ALARM,TEMP
LJMPUP15
UP15: LCALLDISPLAY12
LCALLDISPLAY34
DJNZR1,UP01
MOVR1,#1 ;
JNBUP_KEY,UP11
UP01: JNBUP_KEY,UP12
UP16: MOVA,MODE_RG ;松開鍵以後按照模式判斷該返回哪種狀態,不能返回DEALMODE函數
CJNEA,MODE2,UP17
LJMPH_GLINT
UP17: CJNEA,MODE3,UP18
MOVSEC,#0 ;每次設置完時間後將秒鍾位置零保證時間准確
LJMPM_GLINT
UP18: CJNEA,MODE4,UP19
LJMPH_GLINT
UP19: CJNEA,MODE5,UP20
LJMPM_GLINT
UP20: LJMPMAIN1
ONALARM2: LCALLDELY10MS ;延時10MS,去抖
JBDOWN_KEY,B2 ;抖動所致,返回分鍾位閃爍
LJMPK42
B2: LJMPM_GLINT
K42: JNBDOWN_KEY,K42
MOVF_ALARM,#0FFH
MOVMODE_RG,#0
LJMPMAIN1
;---------------------------------------中斷程序入口---------------------
;*******************時間中斷0*********************
;錯誤1:中斷程序EXIT處用了MAIN1,導致一直處於中斷狀態
INT_0: PUSHACC
PUSHPSW
MOVTH0,#3CH
MOVTL0,#0B1H
INCBUF
MOVA,BUF
CJNEA,#20,EXIT
TIME: MOVBUF,#0
INCSEC
MOVA,SEC
CJNEA,#60,EXIT
MOVSEC,#00H
INCMIN
MOVA,MIN
CJNEA,#60,EXIT
MOVMIN,#00H
INCHOUR
MOVA,HOUR
CJNEA,#24,EXIT
MOVHOUR,#0
RETI
EXIT: POPPSW
POPACC
RETI
;******************時間中斷1***********************
INT_1: MOVTH1,#0D8H ;定時10MS
MOVTL1,#0F0H
INCS_SEC
MOVA,S_SEC
CJNEA,#100,EXIT4
MOVS_SEC,#0
INCM_SEC
MOVA,M_SEC
CJNEA,#100,EXIT4
MOVM_SEC,#0
EXIT4: RETI
;---------------------------------------顯示-----------------------------
DISPLAY12: MOVA,MODE_RG ;判斷模式,決定是顯示鬧鍾時間還是顯示當前時間
CJNEA,MODE4,DIS0 ;模式四,顯示鬧鍾
LJMPDIS01 ;MODE4
DIS0: CJNEA,MODE5,DIS20
DIS01: MOVR7,H_ALARM ;鬧鍾模式
LJMPDIS2
DIS20: CJNEA,MODE6,DIS21
MOVR7,M_SEC ;秒錶模式,顯示秒錶高位
LJMPDIS2
DIS21: CJNEA,MODE1,DIS1
LJMPDIS22
DIS22: MOVR7,MIN
LJMPDIS2
DIS1: MOVR7,HOUR ;DISPLAY12顯示高位
DIS2: LCALLBCTD ;判斷完畢,調用顯示
;將秒、分分別轉碼,放到R4,R3
MOVA,R4
MOVR3,A
LCALLDIVIDE
MOVDPTR,#NUMTAB
MOVP2,#0FH
MOVP2,LED0
MOVA,45H ;從拆字的出口獲取值
MOVCA,@A+DPTR
MOVP0,A
LCALLDELY10MS
MOVP2,LED1
MOVA,46H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELY10MS
RET
DISPLAY34: MOVA,MODE_RG ;判斷模式,決定是顯示鬧鍾時間還是顯示當前時間
CJNEA,MODE4,DIS31
LJMPDIS32
DIS31: CJNEA,MODE5,DIS35
DIS32: MOVR7,M_ALARM
LJMPDIS34
DIS35: CJNEA,MODE6,DIS41
MOVR7,S_SEC ;秒錶模式,顯示秒錶低位
LJMPDIS34
DIS41: CJNEA,MODE1,DIS33
MOVR7,SEC
LJMPDIS34
DIS33: MOVR7,MIN ;DISPLAY34顯示低位
DIS34: LCALLBCTD
MOVA,R4
MOVR3,A
LCALLDIVIDE
MOVP2,LED2
MOVA,47H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELY10MS
MOVP2,LED3
MOVA,48H
MOVCA,@A+DPTR
MOVP0,A
LCALLDELY10MS
SETBP2.3
RET
;--------------------二翻十:入口:R6R7出口:R2R3R4----------------------
BCTD: MOVR5,#16
CLRA
MOVR2,A
MOVR3,A
MOVR4,A
LOOP: CLRC
MOVA,R7
RLCA
MOVR7,A
MOVA,R6
RLCA
MOVR6,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
MOVA,R3
ADDCA,R3
DAA
MOVR3,A
MOVA,R2
ADDCA,R2
DAA
MOVR2,A
DJNZR5,LOOP
RET
;-----------------------拆字:入口:R3R4出口:45H46H47H48H------------------
DIVIDE: MOVA,R3
ANLA,#0FH
MOV46H,A
MOVA,R3
ANLA,#0F0H
SWAPA
MOV45H,A;時拆字45H放時高位,46H放十低位
MOVA,R4
ANLA,#0FH
MOV48H,A
MOVA,R4
ANLA,#0F0H
SWAPA
MOV47H,A;分拆字47H放分高位,48H放分低位
RET
;------------------------------------延時----------------------------------
DELY10MS:MOVR6,#10
D1:MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
DELAY: MOV74H,#2;延時子程序,12M晶振延時1.002秒
L3: MOV72H,#10
L1: MOV73H,#249
L2: DJNZ73H,L2
LCALLDISPLAY12
LCALLDISPLAY34
JNBDOWN_KEY,OFFALARM1
LJMPS3
OFFALARM1: LCALLDELY10MS
JBDOWN_KEY,S3
S4: JNBDOWN_KEY,S4
MOVF_ALARM,#0
SETBP3.6
LJMPMAIN1
S3: DJNZ72H,L1
DJNZ74H,L3
RET
NUMTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;碼表
END
B. 菜鳥要提問關於單片機定時鬧鍾的課程設計
程序參考
;---------------------------------------------------------------------
;文件名稱:nz.ASM
;程序功能:定時鬧鍾
;--------------------------------------------------------------------
;----------------------------程序初始化-----------------------
;定義存放計時單元地址
;....................
ALBEQU20H.0;鬧鈴設置標志
;....................
BUFEQU30H;30~33H連續4位元組存放顯示器數據
HOUREQU34H;存放小時變數
MINEQU35H;存放分鍾變數
SECEQU36H;存放秒鍾變數
DEDAEQU37H;存放5ms計數值
;....................
HHEQU38H;鬧鈴設置小時變數
MMEQU39H;鬧鈴設置分鍾變數
;....................
;按鍵輸入引腳定義
K1EQUP2.4;按鍵K1引腳定義
K2EQUP2.5;按鍵K2引腳定義
K3EQUP2.6;按鍵K3引腳定義
K4EQUP2.7;按鍵K4引腳定義
;蜂鳴器和指示燈引腳定義
SPKEQUP3.4;蜂鳴器控制信號引腳
WLEDEQUP1.0;工作指示燈引腳定義
;程序開始執行地址
ORG0H;程序代碼由地址0開始
AJMPMAIN
ORG0BH;定時器T0中斷地址設置
AJMPTO_SRV
;-------------------------------主程序-------------------------------
MAIN:;主程序標號
;...................
CLRALB;清除鬧鈴標志
;...................
ACALLBZ;蜂鳴器連續兩次鳴響一聲
ACALLBZ
ACALLLED_SD;LED閃動,表示程序開始執行
ACALLINIT;初始變化量
ACALLINIT_TIMER;設置定時器
;載入顯示器初值數據
MOVA,#0C0H
MOVP0,A
;無窮循環
LOOP:;無窮循環
ACALLCONV;轉換時時分分數據
;....................
ACALLTIME_PRO;檢查鬧鈴時間
;....................
ACALLDISP;掃描顯示
JBK1,M1;未按下K1鍵則繼續掃描
ACALLLED_SD;LED閃動
ACALLSET_TIME;設置目前時間
AJMPLOOP;跳轉到LOOP處執行
;設置鬧鈴時間
M1:JBK2,M2;未按下K2鍵則繼續掃描
;.....................
ACALLLED_SD
ACALLSET_ATIME;設置鬧鈴時間
;.....................
AJMPLOOP;跳轉到LOOP處執行
M2:JBK3,M3;未按下K3鍵則繼續掃描
AJMPLOOP;跳轉到LOOP處執行
M3:JBK4,M4;未按下K4鍵則繼續掃描
;...................
CPLALB
JNBALB,M31
;鬧鈴啟動連續3次發出響聲
ACALLBZ
ACALLBZ
ACALLBZ
;...................
AJMPLOOP;跳轉到LOOP處執行
;....................
M31:
ACALLBZ;鬧鈴停止,發出一聲響
AJMPLOOP;跳轉到LOOP處執行
;...................
M4:
AJMPLOOP;跳轉到LOOP處執行
;-------------------------定時中斷模塊-------------------
;定時器T0模式0計時
INIT_TIMER:;初始化定時器
MOVTMOD,#00000000B;設置定時器T0工作模式0
MOVIE,#10000010B;啟用定時器T0中斷產生
MOVTL0,#(8192-4900)MOD32;載入初始值
MOVTH0,#(8192-4900)/32
SETBTR0;啟動定時器T0開始計時
RET
;--------------------------
;中斷服務程序
TO_SRV:;定時器T0計時中斷程序每隔5ms中斷一次
PUSHACC;將A值壓入堆棧
MOVTL0,#(8192-4900)MOD32;重載入初始值
MOVTH0,#(8192-4900)/32
INCDEDA;加1
;秒輸出
MOVA,DEDA
CJNEA,#200,TT1;是否1s到了
MOVDEDA,#0;計數值清除為0
CPLWLED;LED燈亮滅變換
INCSEC;秒計數加1
MOVA,SEC
CJNEA,#60,TT1;是否1min到了
;分輸出
INCMIN;分計數加1
MOVSEC,#0;秒計數清除為0
MOVA,MIN
CJNEA,#60,TT1;是否1h到了
;時輸出
INCHOUR;小時計數加1
MOVMIN,#0;分計數清除為0
MOVA,HOUR
CJNEA,#24,TT1;是否24h到了
MOVSEC,#0;秒鍾變數清除為0
MOVMIN,#0;分鍾變數清除為0
MOVHOUR,#0;小時變數清除為0
TT1:
POPACC;將A值由堆棧取出
RETI
;----------------------------------------轉換十進制模塊---------------------------------
CONV:;轉換十進制子程序
;轉換小時數據
MOVDPTR,#TABLE;存表
MOVA,HOUR
MOVB,#10
DIVAB
MOVCA,@A+DPTR;查表轉換
MOVBUF,A
MOVA,B
MOVCA,@A+DPTR
MOVBUF+1,A
;轉換分鍾數據
MOVA,MIN
MOVB,#10
DIVAB
MOVCA,@A+DPTR;查表轉換
MOVBUF+2,A
MOVA,B
MOVCA,@A+DPTR;查表轉換
MOVBUF+3,A
RET
;字型數據編碼表
TABLE:
DB0C0H,0F9H,0A4H,0B0H
DB99H,92H,82H,0F8H
DB80H,90H,88H,83H
DB0C6H,0A1H,86H,8EH
;--------------------------------------掃描顯示模塊------------------------------------
DISP:;掃描顯示子程序
MOVR0,#BUF;指向顯示器顯示緩沖區起始地址
MOVR2,#4;執行4次循環
MOVACC,#11110111b;載入掃描信號初值11110111B
S1:
PUSHACC
MOVA,@R0;讀取出顯示器數據
MOVP0,A;由P0送出一位顯示器數據
POPACC
MOVP2,ACC;由P2送出掃描輸出信號
MOVR5,#2;延遲一段時間
ACALLDELAY1MS_R5
;改變掃描碼EX:XXXX1011
RRA;累加器A向右移動一位
INCR0;顯示器顯示緩沖區地址加1
DJNZR2,S1;判斷是否繼續執行循環
RET
;--------------------------------------調整時間模塊------------------------------------
SET_TIME:;設置目前時間子程序
CLRTR0;定時器工作暫停
MOVSEC,#0;秒鍾變數清除為0
L0:
ACALLDISP;掃描顯示
JBK2,L1;未按下K2鍵則繼續掃描
JNBK2,$;有按下則等待放開
;K2小時調整
INCHOUR;小時計數加1
MOVA,HOUR
CJNEA,#24,L11;是否24H到了
MOVHOUR,#0;小時變數清除為0
L11:
ACALLCONV;轉換顯示數據
ACALLDISP;掃描顯示
AJMPL0;繼續程序執行
L1:JBK3,L2;未按下K3鍵則繼續掃描
JNBK3,$;有按下則等待放開
;K3分鍾調整.
INCMIN;分鍾計數加1
MOVA,MIN
CJNEA,#60,L21;是否60min到了
MOVMIN,#0;分鍾變數清除為0
L21:
ACALLCONV;轉換顯示數據
ACALLDISP;掃描顯示
AJMPL0;跳轉到L0處執行
L2:JBK4,L0;未按下K4鍵則繼續掃描
JNBK4,$;有按下則等待放開
ACALLBZ;蜂鳴器鳴響一聲
;K4設置完成
ACALLLED_SD;LED閃動
SETBTR0;啟動定時器
RET
;-------------------------------------計時單元清零模塊-------------------------------
INIT:;計時單元清零子程序
MOVDEDA,#0;5ms計數值清除為0
MOVSEC,#0;秒鍾變數清除為0
MOVMIN,#0;分鍾變數清除為0
MOVHOUR,#0;小時變數清除為0
RET
;--------------------------------------蜂鳴器鳴響模塊--------------------------------------
BZ:;蜂鳴器鳴響一聲子程序
MOVR6,#250
B1:ACALLDEX
CPLSPK
DJNZR6,B1
MOVR5,#50
ACALLDELAY1MS_R5
RET
;-------------------------------------LED閃動模塊-------------------------------------
LED_SD:;工作指示燈閃爍子程序
MOVR4,#6
LE1:CPLWLED;位反向
MOVR5,#25
ACALLDELAY1MS_R5
DJNZR4,LE1;延遲50ms
RET
;------------------------------------------延時模塊--------------------------------------
DELAY1MS_R5:;總延遲時間2ms×R5
MOVR6,#10
D1:MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY1MS_R5
RET
;------------------------------------------短暫延時模塊---------------------------------
DEX:;短暫延時子程序
MOVR7,#180
DE1:NOP
DJNZR7,DE1
RET
;*********************增加定時鬧鈴程序部分********************
;-----------------------------------------設置鬧鈴時間模塊--------------------------------
SET_ATIME:;設置鬧鈴時間子程序
MOVHH,#0
MOVMM,#0
ACALLCONVA;載入鬧鈴時間數據
N0:
ACALLDISP
;-----------
JBK2,N1;未按下K2鍵則繼續掃描
JNBK2,$;有按下則等待放開
;K2調整小時
INCHH;小時數加1
MOVA,HH
CJNEA,#24,N11;是否24h到了
MOVHH,#0;小時清為0
N11:
ACALLCONVA;載入鬧鈴時間數據
ACALLDISP;掃描顯示
AJMPN0;跳轉到N0處執行
;------------
N1:JBK3,N2;未按下K3鍵則繼續掃描
JNBK3,$;有按下則等待放開
;K3調整分鍾
INCMM;調整分鍾數
MOVA,MM;分鍾數加1
CJNEA,#60,N21;是否60min到了
MOVMM,#0;分鍾數清為0
N21:
ACALLCONVA;載入鬧鈴時間數據
ACALLDISP