📄 at24c02.lst
字号:
.module AT24C02.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
000D _tabel::
000D 063F .byte 63,6
000E 4F5B .byte 91,'O
000F 6D66 .byte 'f,'m
0010 077D .byte 125,7
0011 6F7F .byte 127,'o
0012 7C77 .byte 'w,124
0013 5E39 .byte 57,94
0014 7179 .byte 'y,'q
0015 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0015 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
--- 0000 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
0030 _ledbuff::
0030 .blkb 2
.area idata
--- 0000 3F3F .byte 63,63
.area data(ram, con, rel)
--- 0001 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
--- 0001 .blkb 2
.area idata
--- 0001 3F3F .byte 63,63
.area data(ram, con, rel)
--- 0002 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
--- 0002 .blkb 2
.area idata
--- 0002 0000 .byte 0,0
.area data(ram, con, rel)
--- 0003 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
--- 0003 .dbsym s ledbuff _ledbuff Ac[6:6]
.area text(rom, con, rel)
--- 0000 .dbfile D:\ICC-AVR\examples.sl\I2C\AT24C02.c
--- 0000 .dbfunc s port_init _port_init fI
.even
0038 _port_init::
0038 .dbline 22{
; /**********************************************
; http://www.sl.com.cn
; 双龙电子公司----I2C总线演示程序(ICCAVR)
; 作者:詹卫前
; 1、以访问AT24C02为例
; 2、SDA :PORTA.0
; 3、SCL : PORTA.1
; **********************************************/
; #include <io8515.h>
; #include <slavr.h>
; /* 七段译码字形表 */
; #pragma data:code
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; #pragma data:data
; /* 显示缓冲区 */
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x00,0x00};
; unsigned char at24_add,at24_data;
; /******************************************
; 端口初始化
; *******************************************/
; void port_init(void)
; {
0038 .dbline 23
; DDRD=0x3f;
0038 E38F ldi R24,63
0039 BB81 out 0x11,R24
003A .dbline 24
; DDRB=0xff;
003A EF8F ldi R24,255
003B BB87 out 0x17,R24
003C .dbline 25
; PORTD=0xff;
003C BB82 out 0x12,R24
003D .dbline 26
; PORTB=0xff;
003D BB88 out 0x18,R24
003E .dbline 27}
; }
003E L1:
003E 9508 ret
003F .dbfunc s display _display fI
; i -> R20
.even
003F _display::
003F D22C rcall push_gset1
0040 .dbline 32{
; /******************************************
; 六路动态扫描显示电路
; *******************************************/
; void display(void)
; {
0040 .dbline 34
; unsigned char i;
; i=at24_data%16;
0040 E110 ldi R17,16
0041 91000066 lds R16,_at24_data
0043 D213 rcall mod8u
0044 2F40 mov R20,R16
0045 .dbline 35
; ledbuff[0]=tabel[i];
0045 E18A ldi R24,<_tabel
0046 E090 ldi R25,>_tabel
0047 2E24 mov R2,R20
0048 2433 clr R3
0049 0E28 add R2,R24
004A 1E39 adc R3,R25
004B 2DE2 mov R30,R2
004C 2DF3 mov R31,R3
004D 95C8 lpm
004E 92000060 sts _ledbuff,R0
0050 .dbline 36
; i=at24_data/16;
0050 E110 ldi R17,16
0051 91000066 lds R16,_at24_data
0053 D205 rcall div8u
0054 2F40 mov R20,R16
0055 .dbline 37
; ledbuff[1]=tabel[i];
0055 E18A ldi R24,<_tabel
0056 E090 ldi R25,>_tabel
0057 2E24 mov R2,R20
0058 2433 clr R3
0059 0E28 add R2,R24
005A 1E39 adc R3,R25
005B 2DE2 mov R30,R2
005C 2DF3 mov R31,R3
005D 95C8 lpm
005E 92000061 sts _ledbuff+1,R0
0060 .dbline 38
; i=at24_add%16;
0060 E110 ldi R17,16
0061 91000067 lds R16,_at24_add
0063 D1F3 rcall mod8u
0064 2F40 mov R20,R16
0065 .dbline 39
; ledbuff[2]=tabel[i];
0065 E18A ldi R24,<_tabel
0066 E090 ldi R25,>_tabel
0067 2E24 mov R2,R20
0068 2433 clr R3
0069 0E28 add R2,R24
006A 1E39 adc R3,R25
006B 2DE2 mov R30,R2
006C 2DF3 mov R31,R3
006D 95C8 lpm
006E 92000062 sts _ledbuff+2,R0
0070 .dbline 40
; i=at24_add/16;
0070 E110 ldi R17,16
0071 91000067 lds R16,_at24_add
0073 D1E5 rcall div8u
0074 2F40 mov R20,R16
0075 .dbline 41
; ledbuff[3]=tabel[i];
0075 E18A ldi R24,<_tabel
0076 E090 ldi R25,>_tabel
0077 2E24 mov R2,R20
0078 2433 clr R3
0079 0E28 add R2,R24
007A 1E39 adc R3,R25
007B 2DE2 mov R30,R2
007C 2DF3 mov R31,R3
007D 95C8 lpm
007E 92000063 sts _ledbuff+3,R0
0080 .dbline 42
; for (i=0;i<6;i++)
0080 2744 clr R20
0081 C016 rjmp L9
0082 L6:
0082 .dbline 43
0082 .dbline 44
0082 E680 ldi R24,<_ledbuff
0083 E090 ldi R25,>_ledbuff
0084 2FE4 mov R30,R20
0085 27FF clr R31
0086 0FE8 add R30,R24
0087 1FF9 adc R31,R25
0088 8020 ldd R2,z+0
0089 BA28 out 0x18,R2
008A .dbline 45
008A E001 ldi R16,1
008B 2F14 mov R17,R20
008C D205 rcall lsl8
008D 2E20 mov R2,R16
008E 9420 com R2
008F BA22 out 0x12,R2
0090 .dbline 46
0090 D12C rcall _delay_1ms
0091 .dbline 47
0091 E001 ldi R16,1
0092 2F14 mov R17,R20
0093 D1FE rcall lsl8
0094 B222 in R2,0x12
0095 2A20 or R2,R16
0096 BA22 out 0x12,R2
0097 .dbline 48
0097 L7:
0097 .dbline 42
0097 9543 inc R20
0098 L9:
0098 .dbline 42
0098 3046 cpi R20,6
0099 F340 brlo L6
009A .dbline 49}
; {
; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
; PORTD=~(1<<i); //开始显示
; delay_1ms(); //每一位显示保持一定时间
; PORTD|=(1<<i); //关闭显示
; }
; }
009A L2:
009A D1D4 rcall pop_gset1
009B 9508 ret
009C .dbsym r i 20 c
009C .dbfunc s main _main fI
; index -> R22
; flag -> R10
; key1 -> R12
; key2 -> R14
.even
009C _main::
009C 9721 sbiw R28,1
009D .dbline 62{
; /******************************************
; 主程序功能:演示了读写AT24C02的过程
; 说明:1、键盘上0~F键用于输入地址或数据,
; SHIFT键用于切换状态
; 2、上电复位后,按数字键只可以修改地
; 址,程序自动显示AT24C02单元内容。
; 3、按一次SHIFT键,最高位LED小数点亮
; 此时可以修改数字,再按一次SHIFT键
; 程序将修改后的数字写入AT24C02,然
; 后回到上电复位后的状态
; *******************************************/
; void main(void)
; {
009D .dbline 65
; unsigned char key1,key2;
; unsigned char index,flag;
; MCUCR=0;
009D 2422 clr R2
009E BE25 out 0x35,R2
009F .dbline 66
; at24_add=0;
009F 92200067 sts _at24_add,R2
00A1 .dbline 67
; at24_data=0;
00A1 92200066 sts _at24_data,R2
00A3 .dbline 68
; index=0;
00A3 2766 clr R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -