📄 i2c.lis
字号:
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 + -