📄 main.src
字号:
; .\main.SRC generated from: main.c
; COMPILER INVOKED BY:
; D:\Program Files\Keil 8.08\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND SRC(.\main.SRC)
$NOMOD51
NAME MAIN
P0 DATA 080H
P1 DATA 090H
P2 DATA 0A0H
P3 DATA 0B0H
T0 BIT 0B0H.4
AC BIT 0D0H.6
T1 BIT 0B0H.5
EA BIT 0A8H.7
IE DATA 0A8H
RD BIT 0B0H.7
ES BIT 0A8H.4
IP DATA 0B8H
RI BIT 098H.0
INT0 BIT 0B0H.2
CY BIT 0D0H.7
TI BIT 098H.1
INT1 BIT 0B0H.3
PS BIT 0B8H.4
SP DATA 081H
OV BIT 0D0H.2
WR BIT 0B0H.6
SBUF DATA 099H
PCON DATA 087H
SCON DATA 098H
TMOD DATA 089H
TCON DATA 088H
IE0 BIT 088H.1
IE1 BIT 088H.3
B DATA 0F0H
ACC DATA 0E0H
ET0 BIT 0A8H.1
ET1 BIT 0A8H.3
TF0 BIT 088H.5
TF1 BIT 088H.7
RB8 BIT 098H.2
TH0 DATA 08CH
EX0 BIT 0A8H.0
IT0 BIT 088H.0
TH1 DATA 08DH
TB8 BIT 098H.3
EX1 BIT 0A8H.2
IT1 BIT 088H.2
P BIT 0D0H.0
SM0 BIT 098H.7
TL0 DATA 08AH
SM1 BIT 098H.6
TL1 DATA 08BH
SM2 BIT 098H.5
PT0 BIT 0B8H.1
PT1 BIT 0B8H.3
RS0 BIT 0D0H.3
TR0 BIT 088H.4
RS1 BIT 0D0H.4
TR1 BIT 088H.6
SDA BIT 090H.5
PX0 BIT 0B8H.0
PX1 BIT 0B8H.2
DPH DATA 083H
DPL DATA 082H
SCL BIT 090H.4
REN BIT 098H.4
RXD BIT 0B0H.0
TXD BIT 0B0H.1
F0 BIT 0D0H.5
PSW DATA 0D0H
?PR?main?MAIN SEGMENT CODE
?PR?IWRNBYTE?MAIN SEGMENT CODE
?DT?IWRNBYTE?MAIN SEGMENT DATA OVERLAYABLE
?PR?IRDNBYTE?MAIN SEGMENT CODE
?DT?IRDNBYTE?MAIN SEGMENT DATA OVERLAYABLE
?PR?START?MAIN SEGMENT CODE
?PR?STOP?MAIN SEGMENT CODE
?PR?MACK?MAIN SEGMENT CODE
?PR?MNACK?MAIN SEGMENT CODE
?PR?CACK?MAIN SEGMENT CODE
?PR?_WRBYTE?MAIN SEGMENT CODE
?PR?RDBYTE?MAIN SEGMENT CODE
?DT?MAIN SEGMENT DATA
?BI?MAIN SEGMENT BIT
EXTRN CODE (?C_STARTUP)
PUBLIC MTD
PUBLIC MRD
PUBLIC SLA
PUBLIC ACK
PUBLIC SUBA
PUBLIC NUMBYTE
PUBLIC RDBYTE
PUBLIC _WRBYTE
PUBLIC CACK
PUBLIC MNACK
PUBLIC MACK
PUBLIC STOP
PUBLIC START
PUBLIC IRDNBYTE
PUBLIC IWRNBYTE
PUBLIC main
RSEG ?DT?IRDNBYTE?MAIN
?IRDNBYTE?BYTE:
offset?247: DS 1
ORG 1
num?248: DS 1
RSEG ?DT?IWRNBYTE?MAIN
?IWRNBYTE?BYTE:
i?145: DS 1
ORG 1
offset?146: DS 1
RSEG ?DT?MAIN
NUMBYTE: DS 1
SUBA: DS 1
SLA: DS 1
MRD: DS 15
MTD: DS 15
RSEG ?BI?MAIN
ACK: DBIT 1
; #include <reg51.h>
; #include <intrins.h>
;
; typedef unsigned char BYTE;
;
; sbit SDA=P1^5;
; sbit SCL=P1^4;
; bit ACK;
; BYTE SLA;
; BYTE SUBA;
; BYTE NUMBYTE;
;
; BYTE MTD[0x0F];
; BYTE MRD[0x0F];
;
;
; void IWRNBYTE();
; void IRDNBYTE();
; void START();
; void STOP();
; void MACK();
; void MNACK();
; void CACK();
; void WRBYTE(BYTE in);
; BYTE RDBYTE();
;
;
;
; main()
RSEG ?PR?main?MAIN
main:
USING 0
; SOURCE LINE # 29
; {
; SOURCE LINE # 30
; BYTE delay=0xF0;
; SOURCE LINE # 31
;---- Variable 'delay?040' assigned to Register 'R7' ----
MOV R7,#0F0H
; BYTE offset=0;
; SOURCE LINE # 32
;---- Variable 'offset?041' assigned to Register 'R6' ----
CLR A
MOV R6,A
?C0001:
; BYTE i,j,k;
;
; while(--delay);
; SOURCE LINE # 35
DJNZ R7,?C0001
?C0003:
;
; while(offset<0x10)
; SOURCE LINE # 37
MOV A,R6
CLR C
SUBB A,#010H
JNC ?C0004
; {
; SOURCE LINE # 38
; MTD[offset]=offset;
; SOURCE LINE # 39
MOV A,#LOW (MTD)
ADD A,R6
MOV R0,A
MOV @R0,AR6
; }
; SOURCE LINE # 40
SJMP ?C0003
?C0004:
;
; SLA=0xA0;
; SOURCE LINE # 42
MOV SLA,#0A0H
; SUBA=0x30;
; SOURCE LINE # 43
MOV SUBA,#030H
; NUMBYTE=16;
; SOURCE LINE # 44
MOV NUMBYTE,#010H
; IWRNBYTE();
; SOURCE LINE # 45
LCALL IWRNBYTE
;
; i=20;
; SOURCE LINE # 47
;---- Variable 'i?042' assigned to Register 'R7' ----
MOV R7,#014H
?C0007:
;
; do
; {
; SOURCE LINE # 50
; j=248;
; SOURCE LINE # 51
;---- Variable 'j?043' assigned to Register 'R6' ----
MOV R6,#0F8H
?C0010:
; do
; {
; SOURCE LINE # 53
; k=248;
; SOURCE LINE # 54
;---- Variable 'k?044' assigned to Register 'R5' ----
MOV R5,#0F8H
; do
; {}while(--k);
; SOURCE LINE # 56
?C0011:
DJNZ R5,?C0011
; }while(--j);
; SOURCE LINE # 57
DJNZ R6,?C0010
; }while(--i);
; SOURCE LINE # 58
DJNZ R7,?C0007
;
; SLA=0xA0;
; SOURCE LINE # 60
MOV SLA,#0A0H
; SUBA=0x30;
; SOURCE LINE # 61
MOV SUBA,#030H
; NUMBYTE=16;
; SOURCE LINE # 62
MOV NUMBYTE,#010H
; IRDNBYTE();
; SOURCE LINE # 63
LJMP IRDNBYTE
; END OF main
; }
;
;
; void IWRNBYTE()
RSEG ?PR?IWRNBYTE?MAIN
IWRNBYTE:
USING 0
; SOURCE LINE # 67
; {
; SOURCE LINE # 68
; BYTE i;
; BYTE offset;
;
; dd:
; SOURCE LINE # 72
?IWRNBYTE?dd:
; i=NUMBYTE;
; SOURCE LINE # 73
MOV i?145,NUMBYTE
; offset=0;
; SOURCE LINE # 74
CLR A
MOV offset?146,A
;
; START();
; SOURCE LINE # 76
LCALL START
; WRBYTE(SLA);
; SOURCE LINE # 77
MOV R7,SLA
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 78
LCALL CACK
; if(!ACK)
; SOURCE LINE # 79
JB ACK,?C0016
; {
; SOURCE LINE # 80
; STOP(); return;
; SOURCE LINE # 81
SJMP ?C0045
; }
; SOURCE LINE # 82
?C0016:
; WRBYTE(SUBA);
; SOURCE LINE # 83
MOV R7,SUBA
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 84
LCALL CACK
?C0020:
;
; do
; {
; SOURCE LINE # 87
; WRBYTE(MTD[offset]);
; SOURCE LINE # 88
MOV A,#LOW (MTD)
ADD A,offset?146
MOV R0,A
MOV A,@R0
MOV R7,A
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 89
LCALL CACK
; if(!ACK) goto dd;
; SOURCE LINE # 90
JNB ACK,?IWRNBYTE?dd
?C0021:
; offset++;
; SOURCE LINE # 91
INC offset?146
; }while(--i);
; SOURCE LINE # 92
DJNZ i?145,?C0020
;
; STOP();
; SOURCE LINE # 94
?C0045:
LCALL STOP
; }
; SOURCE LINE # 95
?C0017:
RET
; END OF IWRNBYTE
;
; void IRDNBYTE()
RSEG ?PR?IRDNBYTE?MAIN
IRDNBYTE:
USING 0
; SOURCE LINE # 97
; {
; SOURCE LINE # 98
; BYTE offset;
; BYTE num;
; qq:
; SOURCE LINE # 101
?IRDNBYTE?qq:
; offset=0;
; SOURCE LINE # 102
CLR A
MOV offset?247,A
; num=NUMBYTE;
; SOURCE LINE # 103
MOV num?248,NUMBYTE
;
;
; START();
; SOURCE LINE # 106
LCALL START
; WRBYTE(SLA);
; SOURCE LINE # 107
MOV R7,SLA
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 108
LCALL CACK
; if(!ACK)
; SOURCE LINE # 109
JB ACK,?C0023
; {
; SOURCE LINE # 110
; STOP();
; SOURCE LINE # 111
SJMP ?C0046
; return;
; }
; SOURCE LINE # 113
?C0023:
; WRBYTE(SUBA);
; SOURCE LINE # 114
MOV R7,SUBA
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 115
LCALL CACK
; START();
; SOURCE LINE # 116
LCALL START
; WRBYTE(++SLA);
; SOURCE LINE # 117
INC SLA
MOV R7,SLA
LCALL _WRBYTE
; CACK();
; SOURCE LINE # 118
LCALL CACK
; if(!ACK) goto qq;
; SOURCE LINE # 119
JNB ACK,?IRDNBYTE?qq
?C0028:
;
; do
; {
; SOURCE LINE # 122
; MRD[offset]=RDBYTE;
; SOURCE LINE # 123
MOV A,#LOW (MRD)
ADD A,offset?247
MOV R0,A
MOV @R0,#LOW (RDBYTE)
; MACK();
; SOURCE LINE # 124
LCALL MACK
; offset++;
; SOURCE LINE # 125
INC offset?247
; }while(--num);
; SOURCE LINE # 126
DJNZ num?248,?C0028
;
; MNACK();
; SOURCE LINE # 128
LCALL MNACK
; STOP();
; SOURCE LINE # 129
?C0046:
LCALL STOP
; }
; SOURCE LINE # 130
?C0024:
RET
; END OF IRDNBYTE
;
; void START()
RSEG ?PR?START?MAIN
START:
; SOURCE LINE # 132
; {
; SOURCE LINE # 133
; SDA=1; //发送起始条件数据信号
; SOURCE LINE # 134
SETB SDA
; _nop_(); //起始条件建立时间大于4.7us
; SOURCE LINE # 135
NOP
; SCL=1; //发送起始条件的时钟信号
; SOURCE LINE # 136
SETB SCL
; _nop_();
; SOURCE LINE # 137
NOP
; _nop_();
; SOURCE LINE # 138
NOP
; _nop_();
; SOURCE LINE # 139
NOP
; _nop_();
; SOURCE LINE # 140
NOP
; _nop_(); //起始条件锁定时间大于4.7us
; SOURCE LINE # 141
NOP
; SDA=0; //发送起始信号
; SOURCE LINE # 142
CLR SDA
; _nop_();
; SOURCE LINE # 143
NOP
; _nop_();
; SOURCE LINE # 144
NOP
; _nop_();
; SOURCE LINE # 145
NOP
; _nop_(); //起始条件锁定时间大于4.7us
; SOURCE LINE # 146
NOP
; SCL=0; //钳住I2C总线,准备发送或接收数据
; SOURCE LINE # 147
CLR SCL
; _nop_();
; SOURCE LINE # 148
NOP
; }
; SOURCE LINE # 149
RET
; END OF START
;
; void STOP()
RSEG ?PR?STOP?MAIN
STOP:
; SOURCE LINE # 151
; {
; SOURCE LINE # 152
; SDA=0; //发送停止条件的数据信号
; SOURCE LINE # 153
CLR SDA
; _nop_();
; SOURCE LINE # 154
NOP
; _nop_();
; SOURCE LINE # 155
NOP
; SCL=1; //发送停止条件的时钟信号
; SOURCE LINE # 156
SETB SCL
; _nop_();
; SOURCE LINE # 157
NOP
; _nop_();
; SOURCE LINE # 158
NOP
; _nop_();
; SOURCE LINE # 159
NOP
; _nop_();
; SOURCE LINE # 160
NOP
; _nop_(); //起始条件建立时间大于4.7us
; SOURCE LINE # 161
NOP
; SDA=1; //发送I2C总线停止信号
; SOURCE LINE # 162
SETB SDA
; _nop_();
; SOURCE LINE # 163
NOP
; _nop_();
; SOURCE LINE # 164
NOP
; _nop_();
; SOURCE LINE # 165
NOP
; _nop_();
; SOURCE LINE # 166
NOP
; _nop_();
; SOURCE LINE # 167
NOP
; }
; SOURCE LINE # 168
RET
; END OF STOP
;
; void MACK()
RSEG ?PR?MACK?MAIN
MACK:
; SOURCE LINE # 170
; {
; SOURCE LINE # 171
; SDA=0; //将SDA置0
; SOURCE LINE # 172
CLR SDA
; _nop_();
; SOURCE LINE # 173
NOP
; _nop_();
; SOURCE LINE # 174
NOP
; SCL=1;
; SOURCE LINE # 175
SETB SCL
; _nop_();
; SOURCE LINE # 176
NOP
; _nop_();
; SOURCE LINE # 177
NOP
; _nop_();
; SOURCE LINE # 178
NOP
; _nop_();
; SOURCE LINE # 179
NOP
; _nop_(); //保持数据时间,大于4.7us
; SOURCE LINE # 180
NOP
; SCL=0;
; SOURCE LINE # 181
CLR SCL
; _nop_();
; SOURCE LINE # 182
NOP
; _nop_();
; SOURCE LINE # 183
NOP
; }
; SOURCE LINE # 184
RET
; END OF MACK
;
; void MNACK()
RSEG ?PR?MNACK?MAIN
MNACK:
; SOURCE LINE # 186
; {
; SOURCE LINE # 187
; SDA=1; //将SDA置1
; SOURCE LINE # 188
SETB SDA
; _nop_();
; SOURCE LINE # 189
NOP
; _nop_();
; SOURCE LINE # 190
NOP
; SCL=1;
; SOURCE LINE # 191
SETB SCL
; _nop_();
; SOURCE LINE # 192
NOP
; _nop_();
; SOURCE LINE # 193
NOP
; _nop_();
; SOURCE LINE # 194
NOP
; _nop_();
; SOURCE LINE # 195
NOP
; _nop_();
; SOURCE LINE # 196
NOP
; SCL=0; //保持数据时间,大于4.7us
; SOURCE LINE # 197
CLR SCL
; _nop_();
; SOURCE LINE # 198
NOP
; _nop_();
; SOURCE LINE # 199
NOP
; }
; SOURCE LINE # 200
RET
; END OF MNACK
;
; void CACK()
RSEG ?PR?CACK?MAIN
CACK:
; SOURCE LINE # 202
; {
; SOURCE LINE # 203
; SDA=1;
; SOURCE LINE # 204
SETB SDA
; _nop_();
; SOURCE LINE # 205
NOP
; _nop_();
; SOURCE LINE # 206
NOP
; SCL=1;
; SOURCE LINE # 207
SETB SCL
; ACK=0;
; SOURCE LINE # 208
CLR ACK
; _nop_();
; SOURCE LINE # 209
NOP
; _nop_();
; SOURCE LINE # 210
NOP
;
; if(SDA)
; SOURCE LINE # 212
JNB SDA,?C0033
; ACK=1;
; SOURCE LINE # 213
SETB ACK
?C0033:
; _nop_();
; SOURCE LINE # 214
NOP
; SCL=0;
; SOURCE LINE # 215
CLR SCL
; _nop_();
; SOURCE LINE # 216
NOP
; }
; SOURCE LINE # 217
RET
; END OF CACK
;
; void WRBYTE(BYTE in)
RSEG ?PR?_WRBYTE?MAIN
_WRBYTE:
USING 0
; SOURCE LINE # 219
;---- Variable 'in?849' assigned to Register 'R7' ----
; {
; SOURCE LINE # 220
; BYTE num=8;
; SOURCE LINE # 221
;---- Variable 'num?850' assigned to Register 'R6' ----
MOV R6,#08H
; ACC=in;
; SOURCE LINE # 222
MOV A,R7
?C0037:
;
; do
; {
; SOURCE LINE # 225
; #pragma asm
; RLC A
RLC A
; #pragma endasm
;
; if(CY)
; SOURCE LINE # 230
JNB CY,?C0038
; {
; SOURCE LINE # 231
; SDA=1;
; SOURCE LINE # 232
SETB SDA
; _nop_();
; SOURCE LINE # 233
; SCL=1;
; SOURCE LINE # 234
; _nop_();
; SOURCE LINE # 235
; _nop_();
; SOURCE LINE # 236
; _nop_();
; SOURCE LINE # 237
; _nop_();
; SOURCE LINE # 238
; _nop_();
; SOURCE LINE # 239
; SCL=0;
; SOURCE LINE # 240
; }
; SOURCE LINE # 241
SJMP ?C0047
?C0038:
; else
; {
; SOURCE LINE # 243
; SDA=0;
; SOURCE LINE # 244
CLR SDA
; _nop_();
; SOURCE LINE # 245
?C0047:
NOP
; SCL=1;
; SOURCE LINE # 246
SETB SCL
; _nop_();
; SOURCE LINE # 247
NOP
; _nop_();
; SOURCE LINE # 248
NOP
; _nop_();
; SOURCE LINE # 249
NOP
; _nop_();
; SOURCE LINE # 250
NOP
; _nop_();
; SOURCE LINE # 251
NOP
; SCL=0;
; SOURCE LINE # 252
CLR SCL
; }
; SOURCE LINE # 253
; }while(--num);
; SOURCE LINE # 254
?C0035:
DJNZ R6,?C0037
;
;
; }
; SOURCE LINE # 257
RET
; END OF _WRBYTE
;
; BYTE RDBYTE()
RSEG ?PR?RDBYTE?MAIN
RDBYTE:
USING 0
; SOURCE LINE # 259
; {
; SOURCE LINE # 260
; BYTE num=8;
; SOURCE LINE # 261
;---- Variable 'num?951' assigned to Register 'R7' ----
MOV R7,#08H
?C0043:
;
; do
; {
; SOURCE LINE # 264
; SDA=1;
; SOURCE LINE # 265
SETB SDA
; _nop_();
; SOURCE LINE # 266
NOP
; SCL=1; // 时钟线为高,接收数据位
; SOURCE LINE # 267
SETB SCL
; _nop_();
; SOURCE LINE # 268
NOP
; _nop_();
; SOURCE LINE # 269
NOP
; CY=SDA;
; SOURCE LINE # 270
MOV C,SDA
; SCL=0;
; SOURCE LINE # 271
CLR SCL
;
; #pragma asm
; RLC A
RLC A
; #pragma endasm
;
; _nop_();
; SOURCE LINE # 277
NOP
; _nop_();
; SOURCE LINE # 278
NOP
; _nop_();
; SOURCE LINE # 279
NOP
; }while(--num);
; SOURCE LINE # 280
DJNZ R7,?C0043
;
; return ACC;
; SOURCE LINE # 282
MOV R7,A
; } ; SOURCE LINE # 283
?C0044:
RET
; END OF RDBYTE
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -