📄 2402.lst
字号:
A51 MACRO ASSEMBLER 2402 09/16/2009 23:41:27 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN 2402.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE 2402.SRC SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ; 2402.SRC generated from: 2402.c
2 ; COMPILER INVOKED BY:
3 ; C:\Keil\C51\BIN\C51.EXE 2402.c BROWSE DEBUG OBJECTEXTEND
4
5
6 NAME _2402
7
8 ?PR?_ISendStr?2402 SEGMENT CODE
9 ?DT?_ISendStr?2402 SEGMENT DATA OVERLAYABLE
10 ?PR?_IRcvStr?2402 SEGMENT CODE
11 ?DT?_IRcvStr?2402 SEGMENT DATA OVERLAYABLE
12 EXTRN CODE (_SendByte)
13 EXTRN BIT (ack)
14 EXTRN CODE (RcvByte)
15 EXTRN CODE (Ack_I2c)
16 EXTRN BIT (?Ack_I2c?BIT)
17 EXTRN CODE (Start_I2c)
18 EXTRN CODE (Stop_I2c)
19 EXTRN CODE (?C?CLDPTR)
20 EXTRN CODE (?C?CSTPTR)
21 PUBLIC ?_IRcvStr?BYTE
22 PUBLIC _IRcvStr
23 PUBLIC ?_ISendStr?BYTE
24 PUBLIC _ISendStr
25
---- 26 RSEG ?DT?_IRcvStr?2402
0000 27 ?_IRcvStr?BYTE:
0000 28 sla?145: DS 1
0001 29 suba?146: DS 1
0002 30 s?147: DS 3
0005 31 no?148: DS 1
0006 32 ORG 6
0006 33 i?149: DS 1
34
---- 35 RSEG ?DT?_ISendStr?2402
0000 36 ?_ISendStr?BYTE:
0000 37 sla?040: DS 1
0001 38 suba?041: DS 1
0002 39 s?042: DS 3
0005 40 no?043: DS 1
0006 41 ORG 6
0006 42 i?044: DS 1
43 ;
44 ; /*************************此部分为AT2402的驱动程序使用I2C总线连接***********************
**************/
45
46 ; #include<Function.h>
47 ;
48 ; //AT2402的功能函数
49 ; /*******************************************************************
50 ; 向有子地址器件发送多字节数据函数
51 ; 函数原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);
52 ; 功能: 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
53 ; 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
54 ; 如果返回1表示操作成功,否则操作有误。
55 ; 注意: 使用前必须已结束总线。
56 ; ********************************************************************/
57 ; bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
A51 MACRO ASSEMBLER 2402 09/16/2009 23:41:27 PAGE 2
58
---- 59 RSEG ?PR?_ISendStr?2402
0000 60 _ISendStr:
61 USING 0
62 ; SOURCE LINE # 15
0000 8F00 F 63 MOV sla?040,R7
0002 8D00 F 64 MOV suba?041,R5
0004 8B00 F 65 MOV s?042,R3
0006 8A00 F 66 MOV s?042+01H,R2
0008 8900 F 67 MOV s?042+02H,R1
68 ; {
69 ; SOURCE LINE # 16
70 ; unsigned char i;
71 ;
72 ; Start_I2c(); /*启动总线*/
73 ; SOURCE LINE # 19
000A 120000 F 74 LCALL Start_I2c
75 ; SendByte(sla); /*发送器件地址*/
76 ; SOURCE LINE # 20
000D AF00 F 77 MOV R7,sla?040
000F 120000 F 78 LCALL _SendByte
79 ; if(ack==0)return(0);
80 ; SOURCE LINE # 21
0012 200002 F 81 JB ack,?C0001
0015 C3 82 CLR C
0016 22 83 RET
0017 84 ?C0001:
85 ; SendByte(suba); /*发送器件子地址*/
86 ; SOURCE LINE # 22
0017 AF00 F 87 MOV R7,suba?041
0019 120000 F 88 LCALL _SendByte
89 ; if(ack==0)return(0);
90 ; SOURCE LINE # 23
001C 200002 F 91 JB ack,?C0003
001F C3 92 CLR C
0020 22 93 RET
0021 94 ?C0003:
95 ;
96 ; for(i=0;i<no;i++)
97 ; SOURCE LINE # 25
0021 E4 98 CLR A
0022 F500 F 99 MOV i?044,A
0024 100 ?C0004:
0024 E500 F 101 MOV A,i?044
0026 C3 102 CLR C
0027 9500 F 103 SUBB A,no?043
0029 5021 104 JNC ?C0005
105 ; {
106 ; SOURCE LINE # 26
107 ; SendByte(*s); /*发送数据*/
108 ; SOURCE LINE # 27
002B AB00 F 109 MOV R3,s?042
002D AA00 F 110 MOV R2,s?042+01H
002F A900 F 111 MOV R1,s?042+02H
0031 120000 F 112 LCALL ?C?CLDPTR
0034 FF 113 MOV R7,A
0035 120000 F 114 LCALL _SendByte
115 ; if(ack==0)return(0);
116 ; SOURCE LINE # 28
0038 200002 F 117 JB ack,?C0007
003B C3 118 CLR C
003C 22 119 RET
003D 120 ?C0007:
121 ; s++;
122 ; SOURCE LINE # 29
003D 7401 123 MOV A,#01H
A51 MACRO ASSEMBLER 2402 09/16/2009 23:41:27 PAGE 3
003F 2500 F 124 ADD A,s?042+02H
0041 F500 F 125 MOV s?042+02H,A
0043 E4 126 CLR A
0044 3500 F 127 ADDC A,s?042+01H
0046 F500 F 128 MOV s?042+01H,A
129 ; }
130 ; SOURCE LINE # 30
0048 0500 F 131 INC i?044
004A 80D8 132 SJMP ?C0004
004C 133 ?C0005:
134 ; Stop_I2c(); /*结束总线*/
135 ; SOURCE LINE # 31
004C 120000 F 136 LCALL Stop_I2c
137 ;
138 ; return(1);
139 ; SOURCE LINE # 33
004F D3 140 SETB C
141 ; }
142 ; SOURCE LINE # 34
0050 143 ?C0002:
0050 22 144 RET
145 ; END OF _ISendStr
146
147 ;
148 ; /*******************************************************************
149 ; 向有子地址器件读取多字节数据函数
150 ; 函数原型: bit RecndStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no);
151 ; 功能: 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
152 ; 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
153 ; 如果返回1表示操作成功,否则操作有误。
154 ; 注意: 使用前必须已结束总线。
155 ; ********************************************************************/
156 ; bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)
157
---- 158 RSEG ?PR?_IRcvStr?2402
0000 159 _IRcvStr:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -