📄 24xx.lst
字号:
A51 MACRO ASSEMBLER 24XX 04/27/2006 17:23:15 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN 24XX.OBJ
ASSEMBLER INVOKED BY: D:\Program Files\Keil\C51\BIN\A51.EXE 24XX.asm SET(SMALL) EP
LOC OBJ LINE SOURCE
1 ;这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的汇编程序
00B4 2 SCL BIT P3.4;定义24C02的串行时钟线
00B5 3 SDA BIT P3.5;定义24C02的串行数据线
4
5
0000 6 ORG 0000H
0000 020030 7 LJMP START
8
9
0030 10 ORG 0030H
0030 120049 11 START:LCALL STAR;调用
0033 7A08 12 MOV R2,#08H;一个数据有8位
0035 900600 13 MOV DPTR,#0600H;定义源数据的位置
0038 7400 14 LOOP:MOV A,#00H
003A 93 15 MOVC A,@A+DPTR
003B 12005A 16 LCALL SDATA
003E 12006C 17 LCALL ACK
0041 40F5 18 JC LOOP
0043 A3 19 INC DPTR
0044 DAF2 20 DJNZ R2,LOOP
21
0046 12007B 22 LCALL STOP;调用停止子程序
23
0049 D2B5 24 STAR:SETB SDA
004B D2B4 25 SETB SCL
004D 00 26 NOP
004E 00 27 NOP
004F 00 28 NOP
0050 00 29 NOP
0051 C2B5 30 CLR SDA
0053 00 31 NOP
0054 00 32 NOP
0055 00 33 NOP
0056 00 34 NOP
0057 C2B4 35 CLR SCL
0059 22 36 RET
005A 7808 37 SDATA:MOV R0,#08H
005C 33 38 LOOP0:RLC A
005D 92B5 39 MOV SDA,C
005F 00 40 NOP
0060 00 41 NOP
0061 D2B4 42 SETB SCL
0063 00 43 NOP
0064 00 44 NOP
0065 00 45 NOP
0066 00 46 NOP
0067 C2B4 47 CLR SCL
0069 D8F1 48 DJNZ R0,LOOP0
006B 22 49 RET
006C D2B5 50 ACK:SETB SDA
006E 00 51 NOP
006F 00 52 NOP
0070 D2B4 53 SETB SCL
0072 00 54 NOP
0073 00 55 NOP
0074 00 56 NOP
0075 00 57 NOP
0076 A2B5 58 MOV C,SDA
A51 MACRO ASSEMBLER 24XX 04/27/2006 17:23:15 PAGE 2
0078 C2B4 59 CLR SCL
007A 22 60 RET
007B C2B5 61 STOP:CLR SDA
007D 00 62 NOP
007E 00 63 NOP
007F 00 64 NOP
0080 00 65 NOP
0081 D2B4 66 SETB SCL
0083 00 67 NOP
0084 00 68 NOP
0085 00 69 NOP
0086 00 70 NOP
0087 D2B5 71 SETB SDA
0089 00 72 NOP
008A 00 73 NOP
008B 00 74 NOP
008C 00 75 NOP
008D 22 76 RET
0600 77 ORG 0600H
0600 A0100102 78 DB 0A0H,10H,01H,02H,03H,04H,05H,06H
0604 03040506
79 END
;读写E2PROM子程序如下:
;写串行E2PROM子程序EEPW
; R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
; (R4)=片内字节地址
; (R1)=欲写数据存放地址指针
; (R7)=连续写字节数n
ORG 0000H
*** WARNING #A73 IN 91 (24XX.asm, LINE 91): TEXT FOUND BEYOND END STATEMENT - IGNORED
LJMP EEPW
ORG 0030H
EEPW:MOV P1,#0FFH
CLR P1.0 ;发开始信号
MOV A,R3 ;送器件地址
ACALL SUBS
MOV A,R4 ;送片内字节地址
ACALL SUBS
AGAIN:MOV A,@R1
ACALL SUBS ;调发送单字节子程序INC R1
DJNZ R7,AGAIN;连续写n个字节
CLR P1.0 ;SDA置0, 准备送停止信号
ACALL DELAY ;延时以满足传输速率要求
SETB P1.1 ;发停止信号
ACALL DELAY
SETB P1.0
RET
SUBS: MOV R0,#08H ;发送单字节子程序
LOOP: CLR P1.1
RLC A
MOV P1.0,C
NOP
SETB P1.1
ACALL DELAY
DJNZ R0,LOOP ;循环8次送8个bit
CLR P1.1
ACALL DELAY
SETB P1.1
REP: MOV C,P1.0
A51 MACRO ASSEMBLER 24XX 04/27/2006 17:23:15 PAGE 3
JC REP ;判应答到否,未到则等待
CLR P1.1
RET
DELAY: NOP
NOP
RET
;读串行E2PROM子程序EEPR
;(R1)=欲读数据存放地址指针
;; R3=10100001(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
;(R4)=片内字节地址
;(R7)=连续读字节数
EEPR: MOV P1,#0FFH
CLR P1.0 ;发开始信号
MOV A,R3 ;送器件地址
ACALL SUBS ;调发送单字节子程序
MOV A,R4 ;送片内字节地址
ACALL SUBS
MOV P1,#0FFH
CLR P1.0 ;再发开始信号
MOV A,R3
SETB ACC.0 ;发读命令
ACALL SUBS
MORE: ACALL SUBR
MOV @R1,A
INC R1
DJNZ R7,MORE
CLR P1.0
ACALL DELAY
SETB P1.1
ACALL DELAY
SETB P1.0 ;送停止信号
RET
SUBR: MOV R0,#08H ;接受单字节子程序
LOOP2: SETB P1.1
ACALL DELAY
MOV C,P1.0
RLC A
CLR P1.1
ACALL DELAY
DJNZ R0,LOOP2
CJNE R7,#01H,LOW
SETB P1.0 ;若是最后一个字节置A=1
AJMP SETOK
LOW: CLR P1.0 ;否则置A=0
SETOK: ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.0 ;应答毕,SDA置1
RET
end
A51 MACRO ASSEMBLER 24XX 04/27/2006 17:23:15 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACK. . . . . . . . C ADDR 006CH A
LOOP . . . . . . . C ADDR 0038H A
LOOP0. . . . . . . C ADDR 005CH A
P3 . . . . . . . . D ADDR 00B0H A
SCL. . . . . . . . B ADDR 00B0H.4 A
SDA. . . . . . . . B ADDR 00B0H.5 A
SDATA. . . . . . . C ADDR 005AH A
STAR . . . . . . . C ADDR 0049H A
START. . . . . . . C ADDR 0030H A
STOP . . . . . . . C ADDR 007BH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -