📄 slaver_1.lis
字号:
009C CADF rcall _ERROR
009E .dbline 80
009E 0027 clr R16
00A0 38C0 rjmp L22
00A2 L23:
00A2 .dbline 83
00A2 ;
00A2 ; //发送从机地址(写),等待回应, 错误检测
00A2 ; Load(SLA_W);
00A2 02E3 ldi R16,50
00A4 B6DF rcall _Load
00A6 .dbline 84
00A6 ; if(STATUS!=MT_SLA_WRITE_ACK) {ERROR(STATUS);return 0;}
00A6 81B1 in R24,0x1
00A8 887F andi R24,248
00AA 8831 cpi R24,24
00AC 29F0 breq L25
00AE .dbline 84
00AE .dbline 84
00AE 01B1 in R16,0x1
00B0 087F andi R16,248
00B2 BFDF rcall _ERROR
00B4 .dbline 84
00B4 0027 clr R16
00B6 2DC0 rjmp L22
00B8 L25:
00B8 .dbline 87
00B8 ;
00B8 ; //发送EEPROM地址,等待回应,错误检测
00B8 ; Load(addr);
00B8 062F mov R16,R22
00BA ABDF rcall _Load
00BC .dbline 88
00BC ; if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
00BC 81B1 in R24,0x1
00BE 887F andi R24,248
00C0 8832 cpi R24,40
00C2 29F0 breq L27
00C4 .dbline 88
00C4 .dbline 88
00C4 01B1 in R16,0x1
00C6 087F andi R16,248
00C8 B4DF rcall _ERROR
00CA .dbline 88
00CA 0027 clr R16
00CC 22C0 rjmp L22
00CE L27:
00CE .dbline 91
00CE ;
00CE ; //再次启动I2C
00CE ; Start();
00CE 98DF rcall _Start
00D0 .dbline 92
00D0 ; if(STATUS!=RE_START) {ERROR(STATUS);return 0;}
00D0 81B1 in R24,0x1
00D2 887F andi R24,248
00D4 8031 cpi R24,16
00D6 29F0 breq L29
00D8 .dbline 92
00D8 .dbline 92
00D8 01B1 in R16,0x1
00DA 087F andi R16,248
00DC AADF rcall _ERROR
00DE .dbline 92
00DE 0027 clr R16
00E0 18C0 rjmp L22
00E2 L29:
00E2 .dbline 95
00E2 ;
00E2 ; //发送从机地址(读),等待回应, 错误检测
00E2 ; Load(SLA_R);
00E2 03E3 ldi R16,51
00E4 96DF rcall _Load
00E6 .dbline 96
00E6 ; if(STATUS!=MT_SLA_READ_ACK) {ERROR(STATUS);return 0;}
00E6 81B1 in R24,0x1
00E8 887F andi R24,248
00EA 8034 cpi R24,64
00EC 29F0 breq L31
00EE .dbline 96
00EE .dbline 96
00EE 01B1 in R16,0x1
00F0 087F andi R16,248
00F2 9FDF rcall _ERROR
00F4 .dbline 96
00F4 0027 clr R16
00F6 0DC0 rjmp L22
00F8 L31:
00F8 .dbline 99
00F8 ;
00F8 ; //读取I2C数据
00F8 ; Get(p_data);
00F8 8A01 movw R16,R20
00FA 92DF rcall _Get
00FC .dbline 100
00FC ; if(STATUS!=MT_READ_ACK) {ERROR(STATUS);return 0;}
00FC 81B1 in R24,0x1
00FE 887F andi R24,248
0100 8835 cpi R24,88
0102 29F0 breq L33
0104 .dbline 100
0104 .dbline 100
0104 01B1 in R16,0x1
0106 087F andi R16,248
0108 94DF rcall _ERROR
010A .dbline 100
010A 0027 clr R16
010C 02C0 rjmp L22
010E L33:
010E .dbline 103
010E ;
010E ; //发送Stop,结束读I2C操作。
010E ; Stop();
010E 7EDF rcall _Stop
0110 .dbline 104
0110 ; return 1;
0110 01E0 ldi R16,1
0112 .dbline -2
0112 L22:
0112 00D0 rcall pop_gset2
0114 .dbline 0 ; func end
0114 0895 ret
0116 .dbsym r p_data 20 pc
0116 .dbsym r addr 22 c
0116 .dbend
0116 .dbfunc e Init_Io _Init_Io fV
.even
0116 _Init_Io::
0116 .dbline -1
0116 .dbline 110
0116 ;
0116 ;
0116 ;
0116 ; }/**/
0116 ; void Init_Io(void)
0116 ; {
0116 .dbline 111
0116 ; DDRC&=~((1<<PC4)&(1<<PC5)&(1<<PC2));
0116 84B3 in R24,0x14
0118 8F7F andi R24,255
011A 84BB out 0x14,R24
011C .dbline 112
011C ; PORTC|= (1<<PC4)|(1<<PC5)|(1<<PC2);
011C 85B3 in R24,0x15
011E 8463 ori R24,52
0120 85BB out 0x15,R24
0122 .dbline 115
0122 ;
0122 ; //TWI接口初始化,从器件模式
0122 ; TWAR=TWI_ADDRESS | (1<<TWGCE);
0122 83E3 ldi R24,51
0124 82B9 out 0x2,R24
0126 .dbline 116
0126 ; TWCR=(1<<TWEA) | (1<<TWEN)|(1<<TWIE);
0126 85E4 ldi R24,69
0128 86BF out 0x36,R24
012A .dbline 117
012A ; asm("SEI");
012A 7894 SEI
012C .dbline -2
012C .dbline 118
012C ; }
012C L35:
012C .dbline 0 ; func end
012C 0895 ret
012E .dbend
012E .dbfunc e main _main fV
.even
012E _main::
012E .dbline -1
012E .dbline 120
012E ; void main()
012E ; {
012E .dbline 122
012E ; // uchar temp1,temp2;
012E ; Init_Io();
012E F3DF rcall _Init_Io
0130 .dbline 123
0130 ; uart_init();
0130 00D0 rcall _uart_init
0132 .dbline 124
0132 ; puts("串口正常工作");
0132 00E0 ldi R16,<L37
0134 10E0 ldi R17,>L37
0136 00D0 rcall _puts
0138 L38:
0138 .dbline 126
0138 .dbline 140
0138 L39:
0138 .dbline 125
0138 FFCF rjmp L38
013A X0:
013A .dbline -2
013A .dbline 142
013A ; while(1)
013A ; { /*
013A ; TWCR=(1<<TWINT)|(1<<TWEA) | (1<<TWEN); //启动一次接收
013A ; while((TWCR&(1<<TWINT))==0); //等待有数据被接收
013A ; //Delay_nms(100);
013A ; temp1=STATUS;
013A ; temp2=TWDR;
013A ; //putchar(temp1);
013A ; if(temp1==0x90)
013A ; {
013A ; puts("接受到:");
013A ; putchar(temp2);
013A ; }
013A ; */
013A ;
013A ; }
013A ;
013A ; }
013A L36:
013A .dbline 0 ; func end
013A 0895 ret
013C .dbend
.area vector(rom, abs)
.org 34
0022 9EC0 rjmp _TWI_ISR
.area text(rom, con, rel)
013C .dbfile D:\AVR\代码\ICCdaima\TWI\slaver_1.c
013C .dbfunc e TWI_ISR _TWI_ISR fV
013C ; temp2 -> R20
013C ; temp1 -> R22
.even
013C _TWI_ISR::
013C 00D0 rcall push_lset
013E 00D0 rcall push_gset2
0140 .dbline -1
0140 .dbline 145
0140 ; #pragma interrupt_handler TWI_ISR:18
0140 ; void TWI_ISR(void)
0140 ; {
0140 .dbline 147
0140 ; uchar temp1,temp2;
0140 ; temp1=STATUS;
0140 61B1 in R22,0x1
0142 687F andi R22,248
0144 .dbline 148
0144 ; temp2=TWDR;
0144 43B1 in R20,0x3
0146 .dbline 149
0146 ; if(temp1==0x90)
0146 6039 cpi R22,144
0148 29F4 brne L42
014A .dbline 150
014A ; {
014A .dbline 151
014A ; puts("接受到:");
014A 00E0 ldi R16,<L44
014C 10E0 ldi R17,>L44
014E 00D0 rcall _puts
0150 .dbline 152
0150 ; putchar(temp2);
0150 042F mov R16,R20
0152 00D0 rcall _putchar
0154 .dbline 153
0154 ; }
0154 L42:
0154 .dbline 154
0154 ; TWCR=(1<<TWINT)|(1<<TWEA) | (1<<TWEN)|(1<<TWIE); //启动一次接收
0154 85EC ldi R24,197
0156 86BF out 0x36,R24
0158 .dbline -2
0158 .dbline 156
0158 ;
0158 ; }
0158 L41:
0158 00D0 rcall pop_gset2
015A 00D0 rcall pop_lset
015C .dbline 0 ; func end
015C 1895 reti
015E .dbsym r temp2 20 c
015E .dbsym r temp1 22 c
015E .dbend
.area data(ram, con, rel)
0004 .dbfile D:\AVR\代码\ICCdaima\TWI\slaver_1.c
0004 L44:
0004 .blkb 8
.area idata
0004 BDD3CADCB5BD3A00 .byte 189,211,202,220,181,189,58,0
.area data(ram, con, rel)
000C .dbfile D:\AVR\代码\ICCdaima\TWI\slaver_1.c
000C L37:
000C .blkb 13
.area idata
000C B4AEBFDAD5FDB3A3B9A4D7F700 .byte 180,174,191,218,213,253,179,163,185,164,215,247,0
.area data(ram, con, rel)
0019 .dbfile D:\AVR\代码\ICCdaima\TWI\slaver_1.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -