⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slaver_1.lis

📁 ICCavr编写的TWI总线协议读写函数
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -