?? 2.lst
字號:
頁 1
01-29-03
01:08:17
偉福匯編器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 機器碼 源程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AT89C2051時鐘程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; 定時器T0、T1溢出周期為50MS,T0為秒計數用, T1為調整時閃爍用,
; P3.7為調整按鈕,P1口 為字符輸出口,采用共陽顯示管。
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中斷入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H ;程序執行開始地址
0000 020024 LJMP START ;跳到標號START執行
ORG 0003H ;外中斷0中斷程序入口
0003 32 RETI ;外中斷0中斷返回
ORG 000BH ;定時器T0中斷程序入口
000B 020055 LJMP INTT0 ;跳至INTTO執行
ORG 0013H ;外中斷1中斷程序入口
0013 32 RETI ;外中斷1中斷返回
ORG 001BH ;定時器T1中斷程序入口
001B 0200A9 LJMP INTT1 ;跳至INTT1執行
ORG 0023H ;串行中斷程序入口地址
0023 32 RETI ;串行中斷程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
0024 7870 START: MOV R0,#70H ;清70H-7AH共11個內存單元
0026 7F0B MOV R7,#0BH ;
0028 7600 CLEARDISP: MOV @R0,#00H ;
002A 08 INC R0 ;
002B DFFB DJNZ R7,CLEARDISP ;
002D 752000 MOV 20H,#00H ;清20H(標志用)
0030 757A0A MOV 7AH,#0AH ;放入"熄滅符"數據
0033 758911 MOV TMOD,#11H ;設T0、T1為16位定時器
0036 758AB0 MOV TL0,#0B0H ;50MS定時初值(T0計時用)
0039 758C3C MOV TH0,#3CH ;50MS定時初值
003C 758BB0 MOV TL1,#0B0H ;50MS定時初值(T1閃爍定時用)
003F 758D3C MOV TH1,#3CH ;50MS定時初值
0042 D2AF SETB EA ;總中斷開放
0044 D2A9 SETB ET0 ;允許T0中斷
0046 D28C SETB TR0 ;開啟T0定時器
0048 7C14 MOV R4,#14H ;1秒定時用初值(50MS×20)
004A 12019A START1: LCALL DISPLAY ;調用顯示子程序
004D 30B702 JNB P3.7,SETMM1 ;P3.7口為0時轉時間調整程序
0050 80F8 SJMP START1 ;P3.7口為1時跳回START1
C:\MY DOCUMENTS\2003.02.12書稿\配套光盤源程序\實例2\2.ASM
頁 2
01-29-03
01:08:17
偉福匯編器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 機器碼 源程序
0052 020103 SETMM1: LJMP SETMM ;轉到時間調整程序SETMM
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 1秒計時程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務程序
0055 C0E0 INTT0: PUSH ACC ;累加器入棧保護
0057 C0D0 PUSH PSW ;狀態字入棧保護
0059 C2A9 CLR ET0 ;關T0中斷允許
005B C28C CLR TR0 ;關閉定時器T0
005D 74B7 MOV A,#0B7H ;中斷響應時間同步修正
005F 258A ADD A,TL0 ;低8位初值修正
0061 F58A MOV TL0,A ;重裝初值(低8位修正值)
0063 743C MOV A,#3CH ;高8位初值修正
0065 358C ADDC A,TH0 ;
0067 F58C MOV TH0,A ;重裝初值(高8位修正值)
0069 D28C SETB TR0 ;開啟定時器T0
006B DC29 DJNZ R4, OUTT0 ;20次中斷未到中斷退出
006D 7C14 ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值
006F 7871 MOV R0,#71H ;指向秒計時單元(71H-72H)
0071 11EC ACALL ADD1 ;調用加1程序(加1秒操作)
0073 EB MOV A,R3 ;秒數據放入A(R3為2位十進制數組合)
0074 C3 CLR C ;清進位標志
0075 B46000 CJNE A,#60H,ADDMM ;
0078 401C ADDMM: JC OUTT0 ;小于60秒時中斷退出
007A 11FE ACALL CLR0 ;大于或等于60秒時對秒計時單元清0
007C 7877 MOV R0,#77H ;指向分計時單元(76H-77H)
007E 11EC ACALL ADD1 ;分計時單元加1分鐘
0080 EB MOV A,R3 ;分數據放入A
0081 C3 CLR C ;清進位標志
0082 B46000 CJNE A,#60H,ADDHH ;
0085 400F ADDHH: JC OUTT0 ;小于60分時中斷退出
0087 11FE ACALL CLR0 ;大于或等于60分時分計時單元清0
0089 7879 MOV R0,#79H ;指向小時計時單元(78H-79H)
008B 11EC ACALL ADD1 ;小時計時單元加1小時
008D EB MOV A,R3 ;時數據放入A
008E C3 CLR C ;清進位標志
008F B42400 CJNE A,#24H,HOUR ;
0092 4002 HOUR: JC OUTT0 ;小于24小時中斷退出
0094 11FE ACALL CLR0 ;大于或等于24小時小時計時單元清0
0096 857672 OUTT0: MOV 72H,76H ;中斷退出時將分、時計時單元數據移
0099 857773 MOV 73H,77H ;入對應顯示單元
009C 857874 MOV 74H,78H ;
009F 857975 MOV 75H,79H ;
00A2 D0D0 POP PSW ;恢復狀態字(出棧)
00A4 D0E0 POP ACC ;恢復累加器
00A6 D2A9 SETB ET0 ;開放T0中斷
00A8 32 RETI ;中斷返回
C:\MY DOCUMENTS\2003.02.12書稿\配套光盤源程序\實例2\2.ASM
頁 3
01-29-03
01:08:17
偉福匯編器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 機器碼 源程序
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 閃動調時 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中斷服務程序,用作時間調整時調整單元閃爍指示
00A9 C0E0 INTT1: PUSH ACC ;中斷現場保護
00AB C0D0 PUSH PSW ;
00AD 758BB0 MOV TL1, #0B0H ;裝定時器T1定時初值
00B0 758D3C MOV TH1, #3CH ;
00B3 DA13 DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)
00B5 7A06 MOV R2,#06H ;重裝0.3秒定時用初值
00B7 B202 CPL 02H ;0.3秒定時到對閃爍標志取反
00B9 200211 JB 02H,FLASH1 ;02H位為1時顯示單元"熄滅"
00BC 857672 MOV 72H,76H ;02H位為0時正常顯示
00BF 857773 MOV 73H,77H ;
00C2 857874 MOV 74H,78H ;
00C5 857975 MOV 75H,79H ;
00C8 D0D0 INTT1OUT: POP PSW ;恢復現場
00CA D0E0 POP ACC ;
00CC 32 RETI ;中斷退出
00CD 20010E FLASH1: JB 01H,FLASH2 ;01H位為1時,轉小時熄滅控制
00D0 857A72 MOV 72H,7AH ;01H位為0時,"熄滅符"數據放入分
00D3 857A73 MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分數據
00D6 857874 MOV 74H,78H ;
00D9 857975 MOV 75H,79H ;
00DC 01C8 AJMP INTT1OUT ;轉中斷退出
00DE 857672 FLASH2: MOV 72H,76H ;01H位為1時,"熄滅符"數據放入小時
00E1 857773 MOV 73H,77H ;顯示單元(74H-75H),小時數據將不顯示
00E4 857A74 MOV 74H,7AH ;
00E7 857A75 MOV 75H,7AH ;
00EA 01C8 AJMP INTT1OUT ;轉中斷退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
00EC E6 ADD1: MOV A,@R0 ;取當前計時單元數據到A
00ED 18 DEC R0 ;指向前一地址
00EE C4 SWAP A ;A中數據高四位與低四位交換
00EF 46 ORL A,@R0 ;前一地址中數據放入A中低四位
00F0 2401 ADD A,#01H ;A加1操作
00F2 D4 DA A ;十進制調整
00F3 FB MOV R3,A ;移入R3寄存器
00F4 540F ANL A,#0FH ;高四位變0
00F6 F6 MOV @R0,A ;放回前一地址單元
00F7 EB MOV A,R3 ;取回R3中暫存數據
00F8 08 INC R0 ;指向當前地址單元
00F9 C4 SWAP A ;A中數據高四位與低四位交換
C:\MY DOCUMENTS\2003.02.12書稿\配套光盤源程序\實例2\2.ASM
頁 4
01-29-03
01:08:17
偉福匯編器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 機器碼 源程序
00FA 540F ANL A,#0FH ;高四位變0
00FC F6 MOV @R0,A ;數據放入當削地址單元中
00FD 22 RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 清零程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;對計時單元復零用
00FE E4 CLR0: CLR A ;清累加器
00FF F6 MOV @R0,A ;清當前地址單元
0100 18 DEC R0 ;指向前一地址
0101 F6 MOV @R0,A ;前一地址單元清0
0102 22 RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 時鐘調整程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;當調時按鍵按下時進入此程序
0103 C2A9 SETMM: cLR ET0 ;關定時器T0中斷
0105 C28C CLR TR0 ;關閉定時器T0
0107 1201D5 LCALL DL1S ;調用1秒延時程序
010A 20B726 JB P3.7,CLOSEDIS ;鍵按下時間小于1秒,關閉顯示(省電)
010D 7A06 MOV R2,#06H ;進入調時狀態,賦閃爍定時初值
010F D2AB SETB ET1 ;允許T1中斷
0111 D28E SETB TR1 ;開啟定時器T1
0113 30B76B SET2: JNB P3.7,SET1 ;P3.7口為0(鍵未釋放),等待
0116 D200 SETB 00H ;鍵釋放,分調整閃爍標志置1
0118 20B76B SET4: JB P3.7,SET3 ;等待鍵按下
011B 1201DC LCALL DL05S ;有鍵按下,延時0.5秒
011E 30B725 JNB P3.7,SETHH ;按下時間大于0.5秒轉調小時狀態
0121 7877 MOV R0,#77H ;按下時間小于0.5秒加1分鐘操作
0123 1200EC LCALL ADD1 ;調用加1子程序
0126 EB MOV A,R3 ;取調整單元數據
0127 C3 CLR C ;清進位標志
0128 B46000 CJNE A,#60H,HHH ;調整單元數據與60比較
012B 40EB HHH: JC SET4 ;調整單元數據小于60轉SET4循環
012D 1200FE LCALL CLR0 ;調整單元數據大于或等于60時清0
0130 C3 CLR C ;清進位標志
0131 2118 AJMP SET4 ;跳轉到SET4循環
0133 D2A9 CLOSEDIS: SETB ET0 ;省電(LED不顯示)狀態。開T0中斷
0135 D28C SETB TR0 ;開啟T0定時器(開時鐘)
0137 20B7FD CLOSE: JB P3.7,CLOSE ;無按鍵按下,等待。
013A 12019A LCALL DISPLAY ;有鍵按下,調顯示子程序延時削抖
013D 20B7F7 JB P3.7,CLOSE ;是干擾返回CLOSE等待
0140 30B7FD WAITH: JNB P3.7,WAITH ;等待鍵釋放
0143 02004A LJMP START1 ;返回主程序(LED數據顯示亮)
0146 C200 SETHH: CLR 00H ;分閃爍標志清除(進入調小時狀態)
0148 30B740 SETHH1: JNB P3.7,SET5 ;等待鍵釋放
C:\MY DOCUMENTS\2003.02.12書稿\配套光盤源程序\實例2\2.ASM
頁 5
01-29-03
01:08:17
偉福匯編器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 機器碼 源程序
014B D201 SETB 01H ;小時調整標志置1
014D 20B740 SET6: JB P3.7,SET7 ;等待按鍵按下
0150 1201DC LCALL DL05S ;有鍵按下延時0.5秒
0153 30B711 JNB P3.7,SETOUT ;按下時間大于0.5秒退出時間調整
0156 7879 MOV R0,#79H ;按下時間小于0.5秒加1小時操作
0158 1200EC LCALL ADD1 ;調加1子程序
015B EB MOV A,R3 ;
015C C3 CLR C ;
015D B42400 CJNE A,#24H,HOUU ;計時單元數據與24比較
0160 40EB HOUU: JC SET6 ;小于24轉SET6循環
0162 1200FE LCALL CLR0 ;大于或等于24時清0操作
0165 214D AJMP SET6 ;跳轉到SET6循環
0167 30B72B SETOUT: JNB P3.7,SETOUT1 ;調時退出程序。等待鍵釋放
016A 12019A LCALL DISPLAY ;延時削抖
016D 30B7F7 JNB P3.7,SETOUT ;是抖動,返回SETOUT再等待
0170 C201 CLR 01H ;清調小時標志
0172 C200 CLR 00H ;清調分標志
0174 C202 CLR 02H ;清閃爍標志
0176 C28E CLR TR1 ;關閉定時器T1
0178 C2AB CLR ET1 ;關定時器T1中斷
017A D28C SETB TR0 ;開啟定時器T0
017C D2A9 SETB ET0 ;開定時器T0中斷(計時開始)
017E 02004A LJMP START1 ;跳回主程序
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -