📄 24cxx.lst
字号:
A51 MACRO ASSEMBLER 24CXX 09/13/2007 02:25:18 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 24CXX.OBJ
ASSEMBLER INVOKED BY: C:\tools\Keil\C51\BIN\A51.EXE 24CXX.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;实验名称:读写AT24C02实验
2 ; 功能:用串口发送指令读出或写入00-7FH单无的内容,显示结果在LCD上显示
3 ; 读出(16进制数):AA 地址
4 ; 写入(16进制数):BB 地址 内容
5 ; 作者:http://www.mcuprog.com
6 ; 05-02-01
7
00B3 8 SCK BIT P3.3 ;I2C的时钟线
00B4 9 SDA BIT P3.4 ;I2C的数据线
10 ;读写I2C总线器件要用到的寄存器
0000 11 ERRFLAG BIT 00H
001A 12 TEMP1 EQU 1AH
001B 13 DELAYCOUNT EQU 1BH
001C 14 ADDREHI EQU 1CH ;读写的地址
001D 15 ADDRELO EQU 1DH
001E 16 WRITE_DATA EQU 1EH ;单字节写入的数据
001F 17 READ_DATA EQU 1FH ;单字节读出的数据
18
00A2 19 E BIT P2.2
00A1 20 RW BIT P2.1
00A0 21 RS BIT P2.0
22
0080 23 LCDPORT EQU P0
0030 24 CMD_BYTE EQU 30H
0031 25 DAT_BYTE EQU 31H
26
0001 27 READBIT BIT 01H ;读某个单元
0002 28 WRITEBIT BIT 02H ;写某个单元
0003 29 RS232OKBIT BIT 03H ;一个完整的串口指令完
0032 30 RECSUM EQU 32H ;要从232收的字字数
0000 31 ORG 0000H
0000 2100 32 AJMP MAIN
000B 33 ORG 000BH
000B 4100 34 AJMP TIME0_1
0023 35 ORG 0023H
0023 C298 36 RS232: CLR RI
0025 E599 37 MOV A,SBUF
0027 B4AA09 38 CJNE A,#0AAH,RS232_1
002A 753201 39 MOV RECSUM,#01H ;是读EEP后面只要一个地址就可
002D 7840 40 MOV R0,#40H
002F D201 41 SETB READBIT
0031 0146 42 AJMP RS232_RE
0033 B4BB09 43 RS232_1: CJNE A,#0BBH,RS232_2
0036 753202 44 MOV RECSUM,#02H ;是写后要要一个地址一个写的内容
0039 7840 45 MOV R0,#40H
003B D202 46 SETB WRITEBIT
003D 0146 47 AJMP RS232_RE
003F F6 48 RS232_2: MOV @R0,A
0040 08 49 INC R0
0041 D53202 50 DJNZ RECSUM,RS232_RE
0044 D203 51 SETB RS232OKBIT
0046 32 52 RS232_RE: RETI
53
54
0100 55 ORG 0100H
0100 7820 56 MAIN: MOV R0,#20H
0102 7600 57 CLR0: MOV @R0,#00H
0104 08 58 INC R0
A51 MACRO ASSEMBLER 24CXX 09/13/2007 02:25:18 PAGE 2
0105 B870FA 59 CJNE R0,#70H,CLR0
0108 751D00 60 MOV ADDRELO,#00H
010B 120352 61 LCALL READ_BYTE
010E 1202C2 62 LCALL INITLCD
0111 753080 63 MOV CMD_BYTE,#80H
0114 12029E 64 LCALL WRITE_CMD
0117 1202ED 65 LCALL DELAY0
011A 753141 66 MOV DAT_BYTE,#"A"
011D 1202B0 67 LCALL WRITE_DAT
0120 753144 68 MOV DAT_BYTE,#"D"
0123 1202B0 69 LCALL WRITE_DAT
0126 753144 70 MOV DAT_BYTE,#"D"
0129 1202B0 71 LCALL WRITE_DAT
012C 753152 72 MOV DAT_BYTE,#"R"
012F 1202B0 73 LCALL WRITE_DAT
0132 753145 74 MOV DAT_BYTE,#"E"
0135 1202B0 75 LCALL WRITE_DAT
0138 75313A 76 MOV DAT_BYTE,#":"
013B 1202B0 77 LCALL WRITE_DAT
013E 120236 78 LCALL DISPEEPAD
79
0141 7530C0 80 MOV CMD_BYTE,#0C0H
0144 12029E 81 LCALL WRITE_CMD
0147 75314D 82 MOV DAT_BYTE,#"M"
014A 1202B0 83 LCALL WRITE_DAT
014D 753145 84 MOV DAT_BYTE,#"E"
0150 1202B0 85 LCALL WRITE_DAT
0153 75314D 86 MOV DAT_BYTE,#"M"
0156 1202B0 87 LCALL WRITE_DAT
0159 75314F 88 MOV DAT_BYTE,#"O"
015C 1202B0 89 LCALL WRITE_DAT
015F 753152 90 MOV DAT_BYTE,#"R"
0162 1202B0 91 LCALL WRITE_DAT
0165 753159 92 MOV DAT_BYTE,#"Y"
0168 1202B0 93 LCALL WRITE_DAT
016B 75313A 94 MOV DAT_BYTE,#":"
016E 1202B0 95 LCALL WRITE_DAT
0171 12026A 96 LCALL DISPEEPMO
97
0174 758CFC 98 MOV TH0,#0FCH ;1MS
0177 758A67 99 MOV TL0,#67H
017A 758DFD 100 MOV TH1,#0FDH ;9600波特
017D 758BFD 101 MOV TL1,#0FDH
0180 758921 102 MOV TMOD,#21H
0183 759850 103 MOV SCON,#50H
0186 D28C 104 SETB TR0
0188 D28E 105 SETB TR1
018A 75A892 106 MOV IE,#92H
018D D29C 107 SETB REN
018F 438701 108 MAIN1: ORL PCON,#01H
0192 218F 109 AJMP MAIN1
110
0200 111 ORG 0200H
0200 758CFC 112 TIME0_1: MOV TH0,#0FCH
0203 758A67 113 MOV TL0,#67H
0206 100302 114 JBC RS232OKBIT,TODP
0209 4113 115 AJMP TIME0_RE
020B 100106 116 TODP: JBC READBIT,READ_EEP
020E 100211 117 JBC WRITEBIT,WRITE_EEP
0211 4113 118 AJMP TIME0_RE
119
0213 32 120 TIME0_RE: RETI
121
0214 85401D 122 READ_EEP: MOV ADDRELO,40H
0217 120352 123 LCALL READ_BYTE
021A 120236 124 LCALL DISPEEPAD
A51 MACRO ASSEMBLER 24CXX 09/13/2007 02:25:18 PAGE 3
021D 12026A 125 LCALL DISPEEPMO
0220 4113 126 AJMP TIME0_RE
0222 85401D 127 WRITE_EEP: MOV ADDRELO,40H
0225 85411E 128 MOV WRITE_DATA,41H
0228 85411F 129 MOV READ_DATA,41H
022B 120304 130 LCALL WRITE_BYTE
022E 120236 131 LCALL DISPEEPAD
0231 12026A 132 LCALL DISPEEPMO
0234 4113 133 AJMP TIME0_RE
134
135
136 ;显示EEP地址
0236 753087 137 DISPEEPAD: MOV CMD_BYTE,#87H
0239 12029E 138 LCALL WRITE_CMD
023C E51D 139 MOV A,ADDRELO
023E 54F0 140 ANL A,#0F0H
0240 C4 141 SWAP A
0241 B40A00 142 CJNE A,#0AH,DPEEPAD_1
0244 5006 143 DPEEPAD_1: JNC DPEEPAD_2
0246 2430 144 ADD A,#30H
0248 F531 145 MOV DAT_BYTE,A
024A 4150 146 AJMP DPEEPAD_3
024C 2437 147 DPEEPAD_2: ADD A,#37H
024E F531 148 MOV DAT_BYTE,A
0250 1202B0 149 DPEEPAD_3: LCALL WRITE_DAT
150
0253 E51D 151 MOV A,ADDRELO
0255 540F 152 ANL A,#0FH
0257 B40A00 153 CJNE A,#0AH,DPEEPAD_4
025A 5006 154 DPEEPAD_4: JNC DPEEPAD_5
025C 2430 155 ADD A,#30H
025E F531 156 MOV DAT_BYTE,A
0260 8004 157 SJMP DPEEPAD_6
0262 2437 158 DPEEPAD_5: ADD A,#37H
0264 F531 159 MOV DAT_BYTE,A
0266 1202B0 160 DPEEPAD_6: LCALL WRITE_DAT
0269 22 161 RET
162
026A 7530C7 163 DISPEEPMO: MOV CMD_BYTE,#0C7H
026D 12029E 164 LCALL WRITE_CMD
0270 E51F 165 MOV A,READ_DATA
0272 54F0 166 ANL A,#0F0H
0274 C4 167 SWAP A
0275 B40A00 168 CJNE A,#0AH,DPEEPMO_1
0278 5006 169 DPEEPMO_1: JNC DPEEPMO_2
027A 2430 170 ADD A,#30H
027C F531 171 MOV DAT_BYTE,A
027E 4184 172 AJMP DPEEPMO_3
0280 2437 173 DPEEPMO_2: ADD A,#37H
0282 F531 174 MOV DAT_BYTE,A
0284 1202B0 175 DPEEPMO_3: LCALL WRITE_DAT
176
0287 E51F 177 MOV A,READ_DATA
0289 540F 178 ANL A,#0FH
028B B40A00 179 CJNE A,#0AH,DPEEPMO_4
028E 5006 180 DPEEPMO_4: JNC DPEEPMO_5
0290 2430 181 ADD A,#30H
0292 F531 182 MOV DAT_BYTE,A
0294 8004 183 SJMP DPEEPMO_6
0296 2437 184 DPEEPMO_5: ADD A,#37H
0298 F531 185 MOV DAT_BYTE,A
029A 1202B0 186 DPEEPMO_6: LCALL WRITE_DAT
029D 22 187 RET
188
189 ;LCD1602要用到的一些子程序
190 ;写命令(入口参数CMD_BYTE)
A51 MACRO ASSEMBLER 24CXX 09/13/2007 02:25:18 PAGE 4
029E C2A0 191 WRITE_CMD: CLR RS
02A0 C2A1 192 CLR RW
02A2 E530 193 MOV A,CMD_BYTE
02A4 F580 194 MOV LCDPORT,A
02A6 D2A2 195 SETB E
02A8 00 196 NOP
02A9 00 197 NOP
02AA C2A2 198 CLR E
02AC 1202ED 199 LCALL DELAY0
02AF 22 200 RET
201
202 ;写显示数据(入口参数DAT_BYTE)
02B0 D2A0 203 WRITE_DAT: SETB RS
02B2 C2A1 204 CLR RW
02B4 E531 205 MOV A,DAT_BYTE
02B6 F580 206 MOV LCDPORT,A
02B8 D2A2 207 SETB E
02BA 00 208 NOP
02BB 00 209 NOP
02BC C2A2 210 CLR E
02BE 1202ED 211 LCALL DELAY0
02C1 22 212 RET
213
214 ;LCD显示初始化
02C2 753030 215 INITLCD: MOV CMD_BYTE,#30H
02C5 12029E 216 LCALL WRITE_CMD
02C8 753030 217 MOV CMD_BYTE,#30H
02CB 12029E 218 LCALL WRITE_CMD
02CE 753030 219 MOV CMD_BYTE,#30H
02D1 12029E 220 LCALL WRITE_CMD
02D4 753038 221 MOV CMD_BYTE,#38H ;设定工作方式
02D7 12029E 222 LCALL WRITE_CMD
02DA 75300C 223 MOV CMD_BYTE,#0CH ;显示状态设置
02DD 12029E 224 LCALL WRITE_CMD
02E0 753001 225 MOV CMD_BYTE,#01H ;清屏
02E3 12029E 226 LCALL WRITE_CMD
02E6 753006 227 MOV CMD_BYTE,#06H ;输入方式设置
02E9 12029E 228 LCALL WRITE_CMD
02EC 22 229 RET
230 ;延时子程序
02ED 7DA0 231 DELAY0: MOV R5,#0A0H
02EF 00 232 DELAY1: NOP
02F0 DDFD 233 DJNZ R5,DELAY1
02F2 22 234 RET
235
236 ;延时子程序
02F3 E51B 237 DELAY: MOV A,DELAYCOUNT
02F5 600C 238 JZ DELAY_RE
02F7 151B 239 DEC DELAYCOUNT
02F9 7FC8 240 MOV R7,#0C8H
02FB 00 241 DELAY_1: NOP
02FC 00 242 NOP
02FD 00 243 NOP
02FE DFFB 244 DJNZ R7,DELAY_1
0300 0202F3 245 LJMP DELAY
0303 22 246 DELAY_RE: RET
247 ;---------------24CXX要用到的子程序---------------------------------
248 ;单字节写(入口ADDREHI,ADDRELO,WRITE_DATA)
0304 1203C3 249 WRITE_BYTE: LCALL STARTI2C
0307 200023 250 JB ERRFLAG,WRITE_B_RE ;不是空闲返回
030A 74A0 251 MOV A,#0A0H
030C 12038C 252 LCALL SHOUT_DATA
030F 200012 253 JB ERRFLAG,WRITE_B_STOP ;出错停止
254 ; MOV A,ADDREHI ;送高位地址
255 ; LCALL SHOUT_DATA
256 ; JB ERRFLAG,WRITE_B_STOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -