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

📄 at24c.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -