?? 5電子鐘p1p2.lst
字號:
A51 MACRO ASSEMBLER 5電子鐘P1P2 04/14/2005 16:27:46 PAGE 1
MACRO ASSEMBLER A51 V1.10
OBJECT MODULE PLACED IN 5電子鐘P1P2.OBJ
ASSEMBLER INVOKED BY: H:\239\A51.EXE 5電子鐘P1P2.ASM DB
LOC OBJ LINE SOURCE
1 ;實驗五:電子時鐘
2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3 ;; AT89C51時鐘程序 ;;
4 ;; YanQing 2004/05/24 ;;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
7 ;
8 ; 定時器T0、T1溢出周期為50MS,T0為秒計數用, T1為調整時閃爍用,
9 ; P3.7為調整按鈕,P1.1-7口 為數碼管段選,采用共陽顯示管。
10 ; P2.1-6為數碼管位選。
11 ; 70-71H 秒計時和顯示單元
12 ; 72-73H 分顯示單元 注意:72H放個位數 73H放十位數
13 ; 74-75H 小時顯示單元
14 ; 76-77H 分計時單元
15 ; 78-79H 小時計時單元
16 ; 7AH 放“熄滅符”數據 0aH
17 ; 位 00h 放 分調整標志
18 ; 位 01h 放小時調整標志
19 ; 位 02h 放閃爍標志
20 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
21 ;; 中斷入口程序 ;;
22 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23 ;
0000 24 ORG 0000H ;程序執行開始地址
0000 020024 25 LJMP START ;跳到標號START執行
0003 26 ORG 0003H ;外中斷0中斷程序入口
0003 32 27 RETI ;外中斷0中斷返回
000B 28 ORG 000BH ;定時器T0中斷程序入口
000B 02005B 29 LJMP INTT0 ;跳至INTTO執行
0013 30 ORG 0013H ;外中斷1中斷程序入口
0013 32 31 RETI ;外中斷1中斷返回
001B 32 ORG 001BH ;定時器T1中斷程序入口
001B 020123 33 LJMP INTT1 ;跳至INTT1執行
0023 34 ORG 0023H ;串行中斷程序入口地址
0023 32 35 RETI ;串行中斷程序返回
36 ;
37 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
38 ;; 主 程 序 ;;
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40 ;
0024 7870 41 START: MOV R0,#70H ;清70H-7AH共11個內存單元
0026 7F0B 42 MOV R7,#0BH ;
0028 7600 43 CLEARDISP: MOV @R0,#00H ;
002A 08 44 INC R0 ;
002B DFFB 45 DJNZ R7,CLEARDISP ;
002D 752000 46 MOV 20H,#00H ;清20H(標志用)
0030 757A0A 47 MOV 7AH,#0AH ;放入"熄滅符"數據
0033 758911 48 MOV TMOD,#11H ;設T0、T1為16位定時器
49 ;用11.0592M初值是4C00H;用12M初值是3CB0H
0036 758A00 50 MOV TL0,#00H ;50MS定時初值(T0計時用)
0039 758C4C 51 MOV TH0,#4cH ;50MS定時初值
003C 758B00 52 MOV TL1,#00H ;50MS定時初值(T1閃爍定時用)
003F 758D4C 53 MOV TH1,#4cH ;50MS定時初值
0042 D2AF 54 SETB EA ;總中斷開放
0044 D2A9 55 SETB ET0 ;允許T0中斷
0046 D28C 56 SETB TR0 ;開啟T0定時器
0048 7C14 57 MOV R4,#14H ;1秒定時用初值(50MS×20)
004A 1200C6 58 START1: LCALL DISPLAY ;調用顯示子程序
A51 MACRO ASSEMBLER 5電子鐘P1P2 04/14/2005 16:27:46 PAGE 2
004D 30B505 59 jnb p3.5,set_h ;此按鍵是小時加1
0050 30B605 60 jnb p3.6,set_M ;此按鍵是分鐘加1
0053 80F5 61 SJMP START1 ;P3.7口為1時跳回START1
0055 020166 62 set_h: ljmp set_hh
0058 0201BA 63 set_m: ljmp set_mm
64 ;
65 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
66 ;; 1秒計時程序 ;;
67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68 ;T0中斷服務程序
005B C0E0 69 INTT0: PUSH ACC ;累加器入棧保護
005D C0D0 70 PUSH PSW ;狀態字入棧保護
005F C2A9 71 CLR ET0 ;關T0中斷允許
0061 C28C 72 CLR TR0 ;關閉定時器T0
73 ;用11.0592M初值是4C00H;用12M初值是3CB0H
0063 7400 74 MOV A,#00H ;中斷響應時間同步修正,要精確調整在這里!??!
0065 258A 75 ADD A,TL0 ;低8位初值修正
0067 F58A 76 MOV TL0,A ;重裝初值(低8位修正值)
0069 744C 77 MOV A,#4CH ;高8位初值修正
006B 358C 78 ADDC A,TH0 ;
006D F58C 79 MOV TH0,A ;重裝初值(高8位修正值)
006F D28C 80 SETB TR0 ;開啟定時器T0
0071 DC29 81 DJNZ R4, OUTT0 ;20次中斷未到中斷退出
0073 7C14 82 ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值
0075 7871 83 MOV R0,#71H ;指向秒計時單元(70H-71H)
0077 11AF 84 ACALL ADD1 ;調用加1程序(加1秒操作)
0079 EB 85 MOV A,R3 ;秒數據放入A(R3為2位十進制數組合)
007A C3 86 CLR C ;清進位標志
007B B46000 87 CJNE A,#60H,ADDMM ;
007E 401C 88 ADDMM: JC OUTT0 ;小于60秒時中斷退出
0080 11C1 89 ACALL CLR0 ;大于或等于60秒時對秒計時單元清0
0082 7877 90 MOV R0,#77H ;指向分計時單元(76H-77H)
0084 11AF 91 ACALL ADD1 ;分計時單元加1分鐘
0086 EB 92 MOV A,R3 ;分數據放入A
0087 C3 93 CLR C ;清進位標志
0088 B46000 94 CJNE A,#60H,ADDHH ;
008B 400F 95 ADDHH: JC OUTT0 ;小于60分時中斷退出
008D 11C1 96 ACALL CLR0 ;大于或等于60分時分計時單元清0
008F 7879 97 MOV R0,#79H ;指向小時計時單元(78H-79H)
0091 11AF 98 ACALL ADD1 ;小時計時單元加1小時
0093 EB 99 MOV A,R3 ;時數據放入A
0094 C3 100 CLR C ;清進位標志
0095 B42400 101 CJNE A,#24H,HOUR ;
0098 4002 102 HOUR: JC OUTT0 ;小于24小時中斷退出
009A 11C1 103 ACALL CLR0 ;大于或等于24小時小時計時單元清0
009C 857672 104 OUTT0: MOV 72H,76H ;中斷退出時將分、時計時單元數據移
009F 857773 105 MOV 73H,77H ;入對應顯示單元
00A2 857874 106 MOV 74H,78H ;
00A5 857975 107 MOV 75H,79H ;
00A8 D0D0 108 POP PSW ;恢復狀態字(出棧)
00AA D0E0 109 POP ACC ;恢復累加器
00AC D2A9 110 SETB ET0 ;開放T0中斷
00AE 32 111 RETI ;中斷返回
112 ;
113 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
114 ;; 加1子 程 序 ;;
115 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
116 ;
00AF E6 117 ADD1: MOV A,@R0 ;取當前計時單元數據到A
00B0 18 118 DEC R0 ;指向前一地址
00B1 C4 119 SWAP A ;A中數據高四位與低四位交換
00B2 46 120 ORL A,@R0 ;前一地址中數據放入A中低四位
00B3 2401 121 ADD A,#01H ;A加1操作
00B5 D4 122 DA A ;十進制調整
00B6 FB 123 MOV R3,A ;移入R3寄存器
00B7 540F 124 ANL A,#0FH ;高四位變0
A51 MACRO ASSEMBLER 5電子鐘P1P2 04/14/2005 16:27:46 PAGE 3
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -