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