?? 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 + -