📄 1302-12232f.lst
字号:
A51 MACRO ASSEMBLER 1302_12232F 08/17/2005 07:55:12 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN E:\05年学生用单片机实验板\实验1-时钟温度计(用1302、18B20、12232F显示器)\1302-12232F.OBJ
ASSEMBLER INVOKED BY: C:\KEIL\C51\BIN\A51.EXE E:\05年学生用单片机实验板\实验1-时钟温度计(用1302、18B20、12232F显示器)\13
02-12232F.ASM DB SB
LOC OBJ LINE SOURCE
1 ;****************************************************************;
2 ; 时钟\温度计程序( 用1302\18B20\12232F显示) ;
3 ; ;
4 ; AT89C52/12M晶振/编写者LRM/2005.07.10 ;
5 ; ;
6 ;****************************************************************;
7 ;
8 ; 从1302中读出的数据放在 52H(小时)51H(分钟)50H(秒)
9 ; 时间显示缓冲单元:70H-79H: 72H-73H(45H-44H)小时,75H-76H(43H-42H)分钟,78H-79H(41H-40H)秒
10 ; 温度显示缓冲单元:60H-67H: :\空\百\十\个\小数点\小数位\空\℃
11 ; 定时器T1为时间调整时候闪烁用。
12 ; 显示式样第一行为: 时间: 15:38:12
13 ; 显示式样第二行为: 温度: 100.5
14 ;*****************定义*********************;
00B4 15 PLAYFLG EQU P3.4 ; 主程序运行指示灯用
0090 16 SCLK EQU P1.0 ; 1302时钟口,1302第7脚
0091 17 IO EQU P1.1 ; 数据口,1302第6脚
0092 18 RST EQU P1.2 ; 使能口,1302第5脚
0082 19 SPEAK BIT P0.2 ;
00B2 20 KEY2 BIT P3.2
00A6 21 KEYSW0 EQU P2.6 ; 调时按键
00A7 22 KEYSW1 EQU P2.7 ; 加1按键
0052 23 hour DATA 52H ; 1302读出时
0051 24 mintue DATA 51H ; 1302读出分
0050 25 second DATA 50H ; 1302读出秒
0032 26 DS1302_ADDR DATA 32H ; 1302需操作的地址数据存放
0031 27 DS1302_DATA DATA 31H ; 1302读出或需写入的数据存放
0030 28 INTCON DATA 30H ; 闪烁中断计时用
0006 29 CON_DATA DATA 06H ; 闪烁时间=65*6=0.39秒
0033 30 CON1S DATA 33H ; 1秒计时用,温度1-2秒测量一次
000F 31 CON1S_DATA DATA 0FH ; 测温间隔定时值65*15ms
0007 32 FLG1S EQU 07H ; 1秒到标志
33 ;************LCD定义***********************;
0094 34 LAMPBLAK EQU P1.4 ;背光灯控制,=0时开,=1时关.
0095 35 CS EQU P1.5 ;液晶使能,=1操作,=0禁止.
0096 36 SID EQU P1.6 ;液晶串行数据输入口
0097 37 CLK EQU P1.7 ;液晶串行操作时钟口
38 ;温度部分定义
0030 39 TEMPHEAD EQU 30H ;
0026 40 TEMPL DATA 26H
0027 41 TEMPH DATA 27H
0028 42 TEMPHC DATA 28H
0029 43 TEMPLC DATA 29H
0093 44 TEMPDIN BIT P1.3
45 ;
00B6 46 VSDA BIT P3.6 ; EEPROM数据传送口,24C16的5脚
00B5 47 VSCL BIT P3.5 ; EEPROM时钟传送口 ,24C16的6脚
48 ;
49 ;*********************程序入口*********************;
50 ;
0000 51 ORG 0000H
0000 02002C 52 LJMP START
0003 53 ORG 0003H
0003 32 54 RETI
000B 55 ORG 000BH
000B 02026A 56 LJMP INTT0
0013 57 ORG 0013H
A51 MACRO ASSEMBLER 1302_12232F 08/17/2005 07:55:12 PAGE 2
0013 32 58 RETI
001B 59 ORG 001BH
001B 0202A3 60 LJMP INTT1
0023 61 ORG 0023H
0023 32 62 RETI
002B 63 ORG 002BH
002B 32 64 RETI
65 ;
66 ;*****************;主程序;*********************;
67 ;
002C 68 START:
002C C295 69 CLR CS ;液晶操作禁止
002E 758180 70 mov SP, #80H ;堆栈在80H上
0031 75700A 71 MOV 70H,#0AH ;放北京时间后的“:”代码字
0034 75710F 72 MOV 71H,#0FH ;空
0037 75740A 73 MOV 74H,#0AH ; ": "
003A 75770A 74 MOV 77H,#0AH ; ": "
003D 120543 75 LCALL READTEMP ;上电时先温度转换一次
0040 758911 76 MOV TMOD,#11H ;计数器1,方式1
0043 758B00 77 MOV TL1,#00H
0046 758D00 78 MOV TH1,#00H
0049 758A00 79 MOV TL0,#00H ;1秒定时用
004C 758C00 80 MOV TH0,#00H
004F 753006 81 MOV INTCON,#CON_DATA
0052 C200 82 CLR 00H ;清闪烁标志
0054 C201 83 CLR 01H ;清闪烁标志
0056 E4 84 CLR A ;
0057 F8 85 MOV R0, A ;从24C16中 0000H开始读出4个字节放
在40H始单元
0058 7940 86 MOV R1, #40H ;
005A 7F04 87 MOV R7, #04H ;
005C 120708 88 LCALL C16SERD ;
005F D2AF 89 SETB EA
0061 75328E 90 MOV DS1302_ADDR,#8EH
0064 753100 91 MOV DS1302_DATA,#00H ;允许写1302
0067 1202EE 92 LCALL WRITE
006A 753280 93 MOV DS1302_ADDR,#80H
006D 753100 94 MOV DS1302_DATA,#00H ;1302晶振开始振荡
0070 1202EE 95 LCALL WRITE
0073 753290 96 MOV DS1302_ADDR,#90H
0076 7531A6 97 MOV DS1302_DATA,#0A6H;1302充电,充电电流1.1MA
0079 1202EE 98 LCALL WRITE
007C 75328E 99 MOV DS1302_ADDR,#8EH
007F 753180 100 MOV DS1302_DATA,#80H ;禁止写入1302
0082 1202EE 101 LCALL WRITE
102 ;
0085 1203A0 103 LCALL SETUP ;LCD初始化
0088 120382 104 LCALL LOGON ;开机显示画面
008B 120360 105 LCALL TIME ;上行显示"时间: 00:00:00"
008E 1205FB 106 LCALL TEMPP ;下行显示“温度:
0091 D2A9 107 SETB ET0
0093 D28C 108 SETB TR0
0095 C207 109 CLR FLG1S
0097 75330F 110 MOV CON1S,#CON1S_DATA
009A 01EF 111 AJMP MAIN11
112 ;以下主程序
009C 753285 113 MAIN1: MOV DS1302_ADDR,#85H ;读出小时
009F 120326 114 LCALL READ
00A2 853152 115 MOV hour,DS1302_DATA
00A5 753283 116 MOV DS1302_ADDR,#83H ;读出分钟
00A8 120326 117 LCALL READ
00AB 853151 118 MOV mintue,DS1302_DATA
00AE 753281 119 MOV DS1302_ADDR,#81H ;读出秒
00B1 120326 120 LCALL READ
00B4 853150 121 MOV second,DS1302_DATA
122 ;
A51 MACRO ASSEMBLER 1302_12232F 08/17/2005 07:55:12 PAGE 3
00B7 A852 123 MOV R0,hour ;小时分离,送显示缓存
00B9 1202E4 124 LCALL DIVIDE
00BC 8973 125 MOV 73H,R1 ;时个位
00BE 8944 126 MOV 44H,R1
00C0 8A72 127 MOV 72H,R2 ;时十位
00C2 8A45 128 MOV 45H,R2
00C4 A851 129 MOV R0,mintue ;分钟分离,送显示缓存
00C6 1202E4 130 LCALL DIVIDE
00C9 8976 131 MOV 76H,R1 ;时个位
00CB 8942 132 MOV 42H,R1
00CD 8A75 133 MOV 75H,R2 ;时十位
00CF 8A43 134 MOV 43H,R2
00D1 A850 135 MOV R0,second ;秒分离,送显示缓存
00D3 1202E4 136 LCALL DIVIDE
00D6 8979 137 MOV 79H,R1 ;秒个位
00D8 8940 138 MOV 40H,R1
00DA 8A78 139 MOV 78H,R2 ;秒十位
00DC 8A41 140 MOV 41H,R2
00DE 12036B 141 LCALL TIMEUP ;时间显示涮新一次
00E1 30A608 142 JNB KEYSW0,SETGG ;调整时间控制键
00E4 30B220 143 JNB KEY2,BAOJSET ;设置温度报警
00E7 100705 144 JBC FLG1S,MAIN11
00EA 019C 145 AJMP MAIN1
00EC 0201A5 146 SETGG: LJMP SETG
00EF 147 MAIN11:
00EF 120559 148 LCALL READTEMP1 ;读出温度值子程序
00F2 12058C 149 LCALL CONVTEMP ;温度BCD 码计算处理子程序
00F5 120607 150 LCALL DISPTEMP ;温度值显示涮新子程序
00F8 120277 151 LCALL BAOJ ; 报警处理
00FB 120543 152 LCALL READTEMP ;再发一次转换温度命令
00FE D28C 153 SETB TR0
0100 D2A9 154 SETB ET0
0102 B2B4 155 CPL PLAYFLG ;程序运行指示灯
0104 02009C 156 LJMP MAIN1
157 ;
0107 12044E 158 BAOJSET: LCALL DELAY1
010A 30B2FA 159 JNB KEY2,BAOJSET
010D C2A9 160 CLR ET0
010F C28C 161 CLR TR0
0111 7490 162 MOV A,#90H ;第二行左第一个字开始
0113 1203DC 163 LCALL WRITE_COM
0116 9004D6 164 MOV DPTR,#CHINESE4 ;16*16点阵“报警-----”
0119 120468 165 LCALL WRITE_HZ
011C 854066 166 MOV 66H,40H
011F 854164 167 MOV 64H,41H
0122 854263 168 MOV 63H,42H
0125 854362 169 MOV 62H,43H
0128 75600A 170 MOV 60H,#0AH ; :
012B 75610F 171 MOV 61H,#0FH ; 空
012E 756511 172 MOV 65H,#11H ; 小数点.
0131 75670F 173 MOV 67H,#0FH ; 空
0134 120646 174 LCALL TEMPUP ;显示报警温度
0137 7962 175 MOV R1,#62H
0139 176 SET10:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -