📄 at24c.lis
字号:
.module AT24C.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\LCU904~1\固件程序\AT24C.c
0000 .dbfunc e AT24C_delay _AT24C_delay fV
0000 ; us -> R16
.even
0000 _AT24C_delay::
0000 .dbline -1
0000 .dbline 17
0000 ;
0000 ; #include"include.h"
0000 ;
0000 ; #define AT24CWAIT 1
0000 ; #define AT24_DEVICEADDR 0xA0
0000 ;
0000 ; #define SCL_HI() PORTB |= (1<<1)
0000 ; #define SCL_LO() PORTB &= ~(1<<1)
0000 ;
0000 ; #define SDA_HI() PORTB |= (1<<0)
0000 ; #define SDA_LO() PORTB &= ~(1<<0)
0000 ; #define SDA_OUTPUT() DDRB |= (1<<0)
0000 ; #define SDA_INPUT() DDRB &= ~(1<<0)
0000 ; #define SDAIN() (PINB&(1<<0))
0000 ;
0000 ; void AT24C_delay(unsigned char us)
0000 ; {
0000 L3:
0000 .dbline 18
0000 ; do{
0000 .dbline 19
0000 ; asm("nop");
0000 0000 nop
0002 .dbline 20
0002 ; asm("nop");
0002 0000 nop
0004 .dbline 21
0004 ; }while(us--);
0004 L4:
0004 .dbline 21
0004 202E mov R2,R16
0006 3324 clr R3
0008 0150 subi R16,1
000A 2220 tst R2
000C C9F7 brne L3
000E X0:
000E .dbline -2
000E L2:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r us 16 c
0010 .dbend
0010 .dbfunc e I2C_Initial _I2C_Initial fV
.even
0010 _I2C_Initial::
0010 .dbline -1
0010 .dbline 26
0010 ; }
0010 ;
0010 ; //打开I2C
0010 ; void I2C_Initial(void)
0010 ; {
0010 .dbline 27
0010 ; DDRB |= (1<<1);//
0010 B99A sbi 0x17,1
0012 .dbline 28
0012 ; DDRB |= (1<<0); //
0012 B89A sbi 0x17,0
0014 .dbline 30
0014 ;
0014 ; SCL_HI();//SCL
0014 C19A sbi 0x18,1
0016 .dbline 31
0016 ; SDA_HI();//SDA
0016 C09A sbi 0x18,0
0018 .dbline -2
0018 L6:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e I2C_Close _I2C_Close fV
.even
001A _I2C_Close::
001A .dbline -1
001A .dbline 36
001A ; }
001A ;
001A ; //关闭I2C
001A ; void I2C_Close(void)
001A ; {
001A .dbline 37
001A ; SCL_HI();//SCL
001A C19A sbi 0x18,1
001C .dbline 38
001C ; SDA_HI();//SDA
001C C09A sbi 0x18,0
001E .dbline 40
001E ;
001E ; DDRB |= (1<<1);//
001E B99A sbi 0x17,1
0020 .dbline 41
0020 ; DDRB |= (1<<0); //
0020 B89A sbi 0x17,0
0022 .dbline -2
0022 L7:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbend
0024 .dbfunc e I2C_SendStart _I2C_SendStart fV
.even
0024 _I2C_SendStart::
0024 .dbline -1
0024 .dbline 46
0024 ; }
0024 ;
0024 ; /*发送起动信号*/
0024 ; void I2C_SendStart(void)
0024 ; {
0024 .dbline 47
0024 ; SCL_HI();
0024 C19A sbi 0x18,1
0026 .dbline 48
0026 ; SDA_HI();
0026 C09A sbi 0x18,0
0028 .dbline 49
0028 ; AT24C_delay(AT24CWAIT);
0028 01E0 ldi R16,1
002A EADF xcall _AT24C_delay
002C .dbline 50
002C ; SDA_LO();
002C C098 cbi 0x18,0
002E .dbline 51
002E ; AT24C_delay(AT24CWAIT);
002E 01E0 ldi R16,1
0030 E7DF xcall _AT24C_delay
0032 .dbline 52
0032 ; SCL_LO();
0032 C198 cbi 0x18,1
0034 .dbline -2
0034 L8:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbend
0036 .dbfunc e I2C_SendStop _I2C_SendStop fV
.even
0036 _I2C_SendStop::
0036 .dbline -1
0036 .dbline 57
0036 ; }
0036 ;
0036 ; /*发送停止信号*/
0036 ; void I2C_SendStop(void)
0036 ; {
0036 .dbline 58
0036 ; SDA_LO();
0036 C098 cbi 0x18,0
0038 .dbline 59
0038 ; SCL_HI();
0038 C19A sbi 0x18,1
003A .dbline 60
003A ; AT24C_delay(AT24CWAIT);
003A 01E0 ldi R16,1
003C E1DF xcall _AT24C_delay
003E .dbline 61
003E ; SDA_HI();
003E C09A sbi 0x18,0
0040 .dbline -2
0040 L9:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbend
0042 .dbfunc e I2C_SendByte _I2C_SendByte fc
0042 ; i -> R20
0042 ; c -> R10
.even
0042 _I2C_SendByte::
0042 AA92 st -y,R10
0044 4A93 st -y,R20
0046 A02E mov R10,R16
0048 .dbline -1
0048 .dbline 66
0048 ; }
0048 ;
0048 ; /*发送一字节数据*/
0048 ; unsigned char I2C_SendByte(unsigned char c)
0048 ; {
0048 .dbline 68
0048 ; unsigned char i;
0048 ; for(i=0;i<8;i++)
0048 4427 clr R20
004A 11C0 xjmp L14
004C L11:
004C .dbline 69
004C ; {
004C .dbline 70
004C ; if((c<<i)&0x80) SDA_HI();
004C 0A2D mov R16,R10
004E 142F mov R17,R20
0050 0E940000 xcall lsl8
0054 802F mov R24,R16
0056 8078 andi R24,128
0058 11F0 breq L15
005A X1:
005A .dbline 70
005A C09A sbi 0x18,0
005C 01C0 xjmp L16
005E L15:
005E .dbline 71
005E ; else SDA_LO();
005E C098 cbi 0x18,0
0060 L16:
0060 .dbline 72
0060 ; AT24C_delay(AT24CWAIT);
0060 01E0 ldi R16,1
0062 CEDF xcall _AT24C_delay
0064 .dbline 73
0064 ; SCL_HI();
0064 C19A sbi 0x18,1
0066 .dbline 74
0066 ; AT24C_delay(AT24CWAIT);
0066 01E0 ldi R16,1
0068 CBDF xcall _AT24C_delay
006A .dbline 75
006A ; SCL_LO();
006A C198 cbi 0x18,1
006C .dbline 76
006C ; }
006C L12:
006C .dbline 68
006C 4395 inc R20
006E L14:
006E .dbline 68
006E 4830 cpi R20,8
0070 68F3 brlo L11
0072 X2:
0072 .dbline 77
0072 ; SDA_INPUT();
0072 B898 cbi 0x17,0
0074 .dbline 78
0074 ; AT24C_delay(AT24CWAIT);
0074 01E0 ldi R16,1
0076 C4DF xcall _AT24C_delay
0078 .dbline 79
0078 ; SCL_HI();
0078 C19A sbi 0x18,1
007A .dbline 80
007A ; AT24C_delay(AT24CWAIT);
007A 01E0 ldi R16,1
007C C1DF xcall _AT24C_delay
007E .dbline 81
007E ; if(SDAIN()) i=0;
007E B09B sbis 0x16,0
0080 02C0 rjmp L17
0082 X3:
0082 .dbline 81
0082 4427 clr R20
0084 01C0 xjmp L18
0086 L17:
0086 .dbline 82
0086 ; else i=1;
0086 41E0 ldi R20,1
0088 L18:
0088 .dbline 83
0088 ; SCL_LO();
0088 C198 cbi 0x18,1
008A .dbline 84
008A ; SDA_OUTPUT();
008A B89A sbi 0x17,0
008C .dbline 85
008C ; return i;
008C 042F mov R16,R20
008E .dbline -2
008E L10:
008E .dbline 0 ; func end
008E 4991 ld R20,y+
0090 A990 ld R10,y+
0092 0895 ret
0094 .dbsym r i 20 c
0094 .dbsym r c 10 c
0094 .dbend
0094 .dbfunc e I2C_ReceiveByte _I2C_ReceiveByte fc
0094 ; retc -> R20
0094 ; i -> R22
.even
0094 _I2C_ReceiveByte::
0094 4A93 st -y,R20
0096 6A93 st -y,R22
0098 .dbline -1
0098 .dbline 90
0098 ; }
0098 ;
0098 ; /*接收一字节数据*/
0098 ; unsigned char I2C_ReceiveByte(void)
0098 ; {
0098 .dbline 93
0098 ; unsigned char i;
0098 ; unsigned char retc;
0098 ; retc=0;
0098 4427 clr R20
009A .dbline 94
009A ; SDA_INPUT();
009A B898 cbi 0x17,0
009C .dbline 95
009C ; for(i=0;i<8;i++)
009C 6627 clr R22
009E 0DC0 xjmp L23
00A0 L20:
00A0 .dbline 96
00A0 ; {
00A0 .dbline 97
00A0 ; retc <<= 1;
00A0 440F lsl R20
00A2 .dbline 98
00A2 ; SCL_LO();
00A2 C198 cbi 0x18,1
00A4 .dbline 99
00A4 ; AT24C_delay(AT24CWAIT);
00A4 01E0 ldi R16,1
00A6 ACDF xcall _AT24C_delay
00A8 .dbline 100
00A8 ; SCL_HI();
00A8 C19A sbi 0x18,1
00AA .dbline 101
00AA ; AT24C_delay(AT24CWAIT);
00AA 01E0 ldi R16,1
00AC A9DF xcall _AT24C_delay
00AE .dbline 102
00AE ; if(SDAIN()) retc |= 1;
00AE B09B sbis 0x16,0
00B0 01C0 rjmp L24
00B2 X4:
00B2 .dbline 102
00B2 4160 ori R20,1
00B4 L24:
00B4 .dbline 103
00B4 ; AT24C_delay(AT24CWAIT);
00B4 01E0 ldi R16,1
00B6 A4DF xcall _AT24C_delay
00B8 .dbline 104
00B8 ; }
00B8 L21:
00B8 .dbline 95
00B8 6395 inc R22
00BA L23:
00BA .dbline 95
00BA 6830 cpi R22,8
00BC 88F3 brlo L20
00BE X5:
00BE .dbline 105
00BE ; SCL_LO();
00BE C198 cbi 0x18,1
00C0 .dbline 106
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -