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

📄 i2c.lis

📁 I2C AVR单片机使用I2C总线的例子
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0106 01E0              ldi R16,1
 0108 142F              mov R17,R20
 010A 00D0              rcall lsl8
 010C 22B2              in R2,0x12
 010E 202A              or R2,R16
 0110 22BA              out 0x12,R2
 0112                   .dbline 85
 0112                 L9:
 0112                   .dbline 79
 0112 4395              inc R20
 0114                 L11:
 0114                   .dbline 79
 0114 4630              cpi R20,6
 0116 40F3              brlo L8
 0118                   .dbline 86}
                       ;   {
                       ;    PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
                       ;    PORTD=~(1<<i);   //开始显示
                       ;    delay_1ms();     //每一位显示保持一定时间
                       ;    PORTD|=(1<<i);   //关闭显示
                       ;   }
                       ; }
 0118                 L4:
 0118 00D0              rcall pop_gset1
 011A 0895              ret
 011C                   .dbsym r i 20 c
 011C                   .dbfunc s main _main fI
                       ;          index -> R22
                       ;           flag -> R10
                       ;           key1 -> R12
                       ;           key2 -> R14
                         .even
 011C                 _main::
 011C                   .dbline 99{
                       ; /******************************************
                       ;     主程序功能:演示了读写AT24C02的过程
                       ;     说明:1、键盘上0~F键用于输入地址或数据,
                       ;              SHIFT键用于切换状态
                       ;           2、上电复位后,按数字键只可以修改地
                       ;              址,程序自动显示AT24C02单元内容。
                       ;           3、按一次SHIFT键,最高位LED小数点亮
                       ;              此时可以修改数字,再按一次SHIFT键
                       ;              程序将修改后的数字写入AT24C02,然
                       ;              后回到上电复位后的状态     
                       ; *******************************************/
                       ; void main(void)
                       ; {
 011C                   .dbline 102
                       ;  unsigned char key1,key2;
                       ;  unsigned char index,flag;
                       ;  MCUCR=0;
 011C 2224              clr R2
 011E 25BE              out 0x35,R2
 0120                   .dbline 103
                       ;  at24_add=0;
 0120 20920100          sts _at24_add,R2
 0124                   .dbline 104
                       ;  at24_data=0;
 0124 20920000          sts _at24_data,R2
 0128                   .dbline 105
                       ;  index=0;
 0128 6627              clr R22
 012A                   .dbline 106
                       ;  flag=0;
 012A AA24              clr R10
 012C                   .dbline 107
                       ;  port_init(); //端口初始化
 012C 93DF              rcall _port_init
 012E 68C0              rjmp L14
 0130                 L13:
 0130                   .dbline 109
                       ;  while(1)
                       ;   {  
 0130                   .dbline 110
                       ;      key1=scan_key();
 0130 00D0              rcall _scan_key
 0132 202E              mov R2,R16
 0134 312E              mov R3,R17
 0136 C22C              mov R12,R2
 0138                   .dbline 111
                       ;      if (key1!=0x7f)
 0138 8C2D              mov R24,R12
 013A 8F37              cpi R24,127
 013C 09F4              brne X2
 013E 56C0              rjmp L16
 0140                 X2:
 0140                   .dbline 112
                       ;         {
 0140                 L18:
 0140                   .dbline 114
                       ;          do 
                       ;            {
 0140                   .dbline 115
                       ;             key2=scan_key();//检查按键释放
 0140 00D0              rcall _scan_key
 0142 202E              mov R2,R16
 0144 312E              mov R3,R17
 0146 E22C              mov R14,R2
 0148                   .dbline 116
                       ;             display();
 0148 8CDF              rcall _display
 014A                   .dbline 117
                       ;             }
 014A                 L19:
 014A                   .dbline 118
                       ;          while(key1==key2);
 014A CE14              cp R12,R14
 014C C9F3              breq L18
 014E                   .dbline 119
                       ;          if (key1>=0x80)
 014E 8C2D              mov R24,R12
 0150 8038              cpi R24,128
 0152 78F0              brlo L21
 0154                   .dbline 120
                       ;             {
 0154                   .dbline 121
                       ;              if (flag!=0x00)//SHIFT键切换数据和地址修改
 0154 AA20              tst R10
 0156 39F0              breq L23
 0158                   .dbline 122
                       ;                  { 
 0158                   .dbline 123
                       ;                    i2c_Write(at24_data,at24_add);
 0158 20910100          lds R18,_at24_add
 015C 00910000          lds R16,_at24_data
 0160 4FDF              rcall _i2c_Write
 0162                   .dbline 124
                       ;                    flag=0x00;
 0162 AA24              clr R10
 0164                   .dbline 125
                       ;                   }          
 0164 02C0              rjmp L24
 0166                 L23:
 0166                   .dbline 126
                       ;              else flag=0x80;
 0166 80E8              ldi R24,128
 0168 A82E              mov R10,R24
 016A                 L24:
 016A                   .dbline 127
                       ;              ledbuff[5]=0x00^flag;
 016A A0920500          sts _ledbuff+5,R10
 016E                   .dbline 128
                       ;              index=0;
 016E 6627              clr R22
 0170                   .dbline 129
                       ;              }
 0170 3DC0              rjmp L22
 0172                 L21:
 0172                   .dbline 131
                       ;          else
                       ;             {
 0172                   .dbline 132
                       ;              switch (index)
 0172 462F              mov R20,R22
 0174 5527              clr R21
 0176 4030              cpi R20,0
 0178 4507              cpc R20,R21
 017A 29F0              breq L29
 017C 4130              cpi R20,1
 017E E0E0              ldi R30,0
 0180 5E07              cpc R21,R30
 0182 E1F0              breq L32
 0184 33C0              rjmp L26
 0186                 X0:
 0186                   .dbline 133
                       ;                {
 0186                 L29:
 0186                   .dbline 134
                       ;                 case 0:{if (flag==0x00)
 0186                   .dbline 134
 0186 AA20              tst R10
 0188 61F4              brne L30
 018A                   .dbline 135
                       ;                            {key2=at24_add&0x0f;
 018A                   .dbline 135
 018A 80910100          lds R24,_at24_add
 018E 8F70              andi R24,15
 0190 E82E              mov R14,R24
 0192                   .dbline 136
                       ;                             at24_add=key2|(key1<<4);
 0192 8C2D              mov R24,R12
 0194 8F70              andi R24,#0x0F
 0196 8295              swap R24
 0198 2E2C              mov R2,R14
 019A 282A              or R2,R24
 019C 20920100          sts _at24_add,R2
 01A0                   .dbline 137
                       ;                             }
 01A0 0BC0              rjmp L31
 01A2                 L30:
 01A2                   .dbline 139
                       ;                         else
                       ;                            {key2=at24_data&0x0f;
 01A2                   .dbline 139
 01A2 80910000          lds R24,_at24_data
 01A6 8F70              andi R24,15
 01A8 E82E              mov R14,R24
 01AA                   .dbline 140
                       ;                             at24_data=key2|(key1<<4);
 01AA 8C2D              mov R24,R12
 01AC 8F70              andi R24,#0x0F
 01AE 8295              swap R24
 01B0 2E2C              mov R2,R14
 01B2 282A              or R2,R24
 01B4 20920000          sts _at24_data,R2
 01B8                   .dbline 141
                       ;                             }
 01B8                 L31:
 01B8                   .dbline 142
                       ;                         index=01;                           
 01B8 61E0              ldi R22,1
 01BA                   .dbline 143
                       ;                         break;       
 01BA 18C0              rjmp L27
 01BC                 L32:
 01BC                   .dbline 145
                       ;                        }
                       ;                 case 1:{if (flag==0x00)
 01BC                   .dbline 145
 01BC AA20              tst R10
 01BE 59F4              brne L33
 01C0                   .dbline 146
                       ;                            {key2=at24_add&0xf0;
 01C0                   .dbline 146
 01C0 80910100          lds R24,_at24_add
 01C4 807F              andi R24,240
 01C6 E82E              mov R14,R24
 01C8                   .dbline 147
                       ;                             at24_add=key2|(key1&0x0f);
 01C8 8C2D              mov R24,R12
 01CA 8F70              andi R24,15
 01CC 2E2C              mov R2,R14
 01CE 282A              or R2,R24
 01D0 20920100          sts _at24_add,R2
 01D4                   .dbline 148
                       ;                             }
 01D4 0AC0              rjmp L34
 01D6                 L33:
 01D6                   .dbline 150
                       ;                         else
                       ;                            {key2=at24_data&0xf0;
 01D6                   .dbline 150
 01D6 80910000          lds R24,_at24_data
 01DA 807F              andi R24,240
 01DC E82E              mov R14,R24
 01DE                   .dbline 151
                       ;                             at24_data=key2|(key1&0x0f);
 01DE 8C2D              mov R24,R12
 01E0 8F70              andi R24,15
 01E2 2E2C              mov R2,R14
 01E4 282A              or R2,R24
 01E6 20920000          sts _at24_data,R2
 01EA                   .dbline 152
                       ;                             }
 01EA                 L34:
 01EA                   .dbline 153
                       ;                         index=00;   
 01EA 6627              clr R22
 01EC                   .dbline 154
                       ;                         break;  
 01EC                 L26:
 01EC                 L27:
 01EC                   .dbline 157
                       ;                        }
                       ;                }                
                       ;             }   
 01EC                 L22:
 01EC                   .dbline 158
                       ;          }                                    
 01EC                 L16:
 01EC                   .dbline 159
                       ;      if (flag==0x00)
 01EC AA20              tst R10
 01EE 39F4              brne L35
 01F0                   .dbline 160
                       ;      at24_data=i2c_Read(at24_add);
 01F0 00910100          lds R16,_at24_add
 01F4 18DF              rcall _i2c_Read
 01F6 202E              mov R2,R16
 01F8 312E              mov R3,R17
 01FA 20920000          sts _at24_data,R2
 01FE                 L35:
 01FE                   .dbline 161
 01FE 31DF              rcall _display
 0200                   .dbline 162
 0200                 L14:
 0200                   .dbline 108
 0200 97CF              rjmp L13
 0202                 X1:
 0202                   .dbline 163}
                       ;      display();   
                       ;   }
                       ; }
 0202                 L12:
 0202 0895              ret
 0204                   .dbsym r index 22 c
 0204                   .dbsym r flag 10 c
 0204                   .dbsym r key1 12 c
 0204                   .dbsym r key2 14 c
                         .area bss(ram, con, rel)
 0000                   .dbfile D:\ICC-AVR\examples.sl\I2C\I2C.c
 0000                 _at24_data::
 0000                   .blkb 1
 0001                   .dbsym s at24_data _at24_data c
 0001                 _at24_add::
 0001                   .blkb 1
 0002                   .dbsym s at24_add _at24_add c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -