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

📄 24cxx_test.lis

📁 24IIC的源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module _24cxx_test.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\24c64\连续读写\24cxx_test.c
 0000                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\24c64\连续读写\delay.h
 0000                   .dbfunc e delay_1us _delay_1us fV
                        .even
 0000           _delay_1us::
 0000                   .dbline -1
 0000                   .dbline 6
 0000           ; /**********延时函数*****************/
 0000           ; /*-----------------------------------------------
 0000           ; delay_us         :1us延时函数
 0000           ; ------------------------------------------------*/
 0000           ; void delay_1us(void)
 0000           ; {
 0000                   .dbline 7
 0000           ;  asm("nop");
 0000 0000              nop
 0002                   .dbline -2
 0002           L1:
 0002                   .dbline 0 ; func end
 0002 0895              ret
 0004                   .dbend
 0004                   .dbfunc e delay_us _delay_us fV
 0004           ;              t -> R20,R21
                        .even
 0004           _delay_us::
 0004 4A93              st -y,R20
 0006 5A93              st -y,R21
 0008 A801              movw R20,R16
 000A                   .dbline -1
 000A                   .dbline 14
 000A           ; }
 000A           ; /*-----------------------------------------------
 000A           ; delay_nus          :长延时函数
 000A           ; 输入参数: t        :延时时间 us
 000A           ; ------------------------------------------------*/
 000A           ; void delay_us(unsigned int t)
 000A           ; {
 000A 01C0              xjmp L4
 000C           L3:
 000C                   .dbline 16
 000C           ;  while(t--)
 000C           ;   delay_1us();
 000C F9DF              xcall _delay_1us
 000E           L4:
 000E                   .dbline 15
 000E 1A01              movw R2,R20
 0010 4150              subi R20,1
 0012 5040              sbci R21,0
 0014 2220              tst R2
 0016 D1F7              brne L3
 0018 3320              tst R3
 001A C1F7              brne L3
 001C           X0:
 001C                   .dbline -2
 001C           L2:
 001C                   .dbline 0 ; func end
 001C 5991              ld R21,y+
 001E 4991              ld R20,y+
 0020 0895              ret
 0022                   .dbsym r t 20 i
 0022                   .dbend
 0022                   .dbfunc e delay_1ms _delay_1ms fV
 0022           ;              i -> R16,R17
                        .even
 0022           _delay_1ms::
 0022                   .dbline -1
 0022                   .dbline 22
 0022           ; }
 0022           ; /*----------------------------------------------
 0022           ; delay_ms         :1ms延时函数
 0022           ; -----------------------------------------------*/
 0022           ; void delay_1ms(void)
 0022           ; {
 0022                   .dbline 24
 0022           ;  unsigned int i;
 0022           ;  for(i=0;i<1140;i++);
 0022 0027              clr R16
 0024 1127              clr R17
 0026 02C0              xjmp L10
 0028           L7:
 0028                   .dbline 24
 0028           L8:
 0028                   .dbline 24
 0028 0F5F              subi R16,255  ; offset = 1
 002A 1F4F              sbci R17,255
 002C           L10:
 002C                   .dbline 24
 002C 0437              cpi R16,116
 002E E4E0              ldi R30,4
 0030 1E07              cpc R17,R30
 0032 D0F3              brlo L7
 0034           X1:
 0034                   .dbline -2
 0034           L6:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r i 16 i
 0036                   .dbend
 0036                   .dbfunc e delay_ms _delay_ms fV
 0036           ;              t -> R20,R21
                        .even
 0036           _delay_ms::
 0036 4A93              st -y,R20
 0038 5A93              st -y,R21
 003A A801              movw R20,R16
 003C                   .dbline -1
 003C                   .dbline 31
 003C           ; }
 003C           ; /*----------------------------------------------
 003C           ; delay_nms          :长延时函数
 003C           ; 输入参数: t        :延时时间 ms
 003C           ; -----------------------------------------------*/
 003C           ; void delay_ms(unsigned int t)
 003C           ; {
 003C 01C0              xjmp L13
 003E           L12:
 003E                   .dbline 33
 003E           ;  while(t--)
 003E           ;   delay_1ms();
 003E F1DF              xcall _delay_1ms
 0040           L13:
 0040                   .dbline 32
 0040 1A01              movw R2,R20
 0042 4150              subi R20,1
 0044 5040              sbci R21,0
 0046 2220              tst R2
 0048 D1F7              brne L12
 004A 3320              tst R3
 004C C1F7              brne L12
 004E           X2:
 004E                   .dbline -2
 004E           L11:
 004E                   .dbline 0 ; func end
 004E 5991              ld R21,y+
 0050 4991              ld R20,y+
 0052 0895              ret
 0054                   .dbsym r t 20 i
 0054                   .dbend
 0054                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\24c64\连续读写\24cxx.h
 0054                   .dbfunc e twi_start _twi_start fc
                        .even
 0054           _twi_start::
 0054                   .dbline -1
 0054                   .dbline 17
 0054           ; /*------------------------------------------------------------------
 0054           ; 
 0054           ; ------------------------------------------------------------------*/
 0054           ; #define Start()     (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))   
 0054           ; #define Stop()      (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)) //总线上起动停止条件
 0054           ; #define Wait()      {while(!(TWCR&(1<<TWINT)));} 
 0054           ; #define TW_STATUS     (TWSR&0xf8)
 0054           ; #define Twi()       (TWCR=(1<<TWINT)|(1<<TWEN)) 
 0054           ; 
 0054           ; //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
 0054           ; unsigned char AT24CxxWrite(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num);
 0054           ; //读数据,器件型号model,器件地址DevAddr,地址addr,存放到 *P_data,数据长度num
 0054           ; unsigned char AT24CxxRead(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num);
 0054           ; 
 0054           ; //总线上起动开始条件 
 0054           ; unsigned char twi_start(void) 
 0054           ; {
 0054                   .dbline 18
 0054           ;  Start(); 
 0054 84EA              ldi R24,164
 0056 86BF              out 0x36,R24
 0058                   .dbline 19
 0058           ;  Wait();
 0058           L16:
 0058                   .dbline 19
 0058           L17:
 0058                   .dbline 19
 0058 26B6              in R2,0x36
 005A 27FE              sbrs R2,7
 005C FDCF              rjmp L16
 005E           X3:
 005E                   .dbline 19
 005E                   .dbline 19
 005E                   .dbline 20
 005E           ;  delay_us(100);
 005E 04E6              ldi R16,100
 0060 10E0              ldi R17,0
 0062 D0DF              xcall _delay_us
 0064                   .dbline 21
 0064           ;  return TW_STATUS; 
 0064 01B1              in R16,0x1
 0066 087F              andi R16,248
 0068                   .dbline -2
 0068           L15:
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbend
 006A                   .dbfunc e twi_writebyte _twi_writebyte fc
 006A           ;              c -> R10
                        .even
 006A           _twi_writebyte::
 006A AA92              st -y,R10
 006C A02E              mov R10,R16
 006E                   .dbline -1
 006E                   .dbline 26
 006E           ; }
 006E           ; 
 006E           ; //写一字节 
 006E           ; unsigned char twi_writebyte(unsigned char c) 
 006E           ; {
 006E                   .dbline 27
 006E           ;  TWDR=c; 
 006E A3B8              out 0x3,R10
 0070                   .dbline 28
 0070           ;  Twi(); 
 0070 84E8              ldi R24,132
 0072 86BF              out 0x36,R24
 0074                   .dbline 29
 0074           ;  Wait(); 
 0074           L20:
 0074                   .dbline 29
 0074           L21:
 0074                   .dbline 29
 0074 26B6              in R2,0x36
 0076 27FE              sbrs R2,7
 0078 FDCF              rjmp L20
 007A           X4:
 007A                   .dbline 29
 007A                   .dbline 29
 007A                   .dbline 30
 007A           ;  delay_us(100);
 007A 04E6              ldi R16,100
 007C 10E0              ldi R17,0
 007E C2DF              xcall _delay_us
 0080                   .dbline 31
 0080           ;  return TW_STATUS; 
 0080 01B1              in R16,0x1
 0082 087F              andi R16,248
 0084                   .dbline -2
 0084           L19:
 0084                   .dbline 0 ; func end
 0084 A990              ld R10,y+
 0086 0895              ret
 0088                   .dbsym r c 10 c
 0088                   .dbend
 0088                   .dbfunc e twi_readbyte _twi_readbyte fc
 0088           ;            tmp -> R20
 0088           ;            ack -> R12
 0088           ;              c -> R10,R11
                        .even
 0088           _twi_readbyte::
 0088 0E940000          xcall push_xgset303C
 008C C22E              mov R12,R18
 008E 5801              movw R10,R16
 0090                   .dbline -1
 0090                   .dbline 36
 0090           ; }
 0090           ; 
 0090           ; //读一字节 ack: true时发ACK,false时发NACK 
 0090           ; unsigned char twi_readbyte(unsigned char *c ,unsigned char ack) 
 0090           ; {
 0090                   .dbline 37
 0090           ;  unsigned char tmp=(1<<TWINT)|(1<<TWEN); 
 0090 44E8              ldi R20,132
 0092                   .dbline 38
 0092           ;  if(ack) tmp|=(1<<TWEA); 
 0092 CC20              tst R12
 0094 09F0              breq L24
 0096           X5:
 0096                   .dbline 38
 0096 4064              ori R20,64
 0098           L24:
 0098                   .dbline 39
 0098           ;  TWCR=tmp;
 0098 46BF              out 0x36,R20
 009A                   .dbline 40
 009A           ;  Wait(); 
 009A           L26:
 009A                   .dbline 40
 009A           L27:
 009A                   .dbline 40
 009A 26B6              in R2,0x36
 009C 27FE              sbrs R2,7
 009E FDCF              rjmp L26
 00A0           X6:
 00A0                   .dbline 40
 00A0                   .dbline 40
 00A0                   .dbline 41
 00A0           ;  delay_us(100);
 00A0 04E6              ldi R16,100
 00A2 10E0              ldi R17,0
 00A4 AFDF              xcall _delay_us
 00A6                   .dbline 42
 00A6           ;  *c=TWDR; 
 00A6 23B0              in R2,0x3
 00A8 F501              movw R30,R10
 00AA 2082              std z+0,R2
 00AC                   .dbline 43
 00AC           ;  return TW_STATUS; 
 00AC 01B1              in R16,0x1
 00AE 087F              andi R16,248
 00B0                   .dbline -2
 00B0           L23:
 00B0                   .dbline 0 ; func end
 00B0 0C940000          xjmp pop_xgset303C
 00B4                   .dbsym r tmp 20 c
 00B4                   .dbsym r ack 12 c
 00B4                   .dbsym r c 10 pc
 00B4                   .dbend
 00B4                   .dbfunc e AT24CxxWrite _AT24CxxWrite fc
 00B4           ;           temp -> R14
 00B4           ;        ICerror -> y+5
 00B4           ;              p -> R12,R13
 00B4           ;      page_size -> y+4
 00B4           ;              i -> R10
 00B4           ; next_page_start_addr -> y+0
 00B4           ;            num -> y+24
 00B4           ;         P_data -> y+22
 00B4           ;           addr -> y+20
 00B4           ;        DevAddr -> y+18
 00B4           ;          model -> y+16
                        .even
 00B4           _AT24CxxWrite::
 00B4 0E940000          xcall push_arg4
 00B8 0E940000          xcall push_xgsetF0FC
 00BC 2697              sbiw R28,6
 00BE                   .dbline -1
 00BE                   .dbline 48
 00BE           ; }
 00BE           ; 
 00BE           ; //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
 00BE           ; unsigned char AT24CxxWrite(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num)
 00BE           ; {
 00BE                   .dbline 49
 00BE           ;  unsigned char i,temp,*p,ICerror=0,page_size;
 00BE 0024              clr R0
 00C0 0D82              std y+5,R0
 00C2                   .dbline 51
 00C2           ;  unsigned long next_page_start_addr;
 00C2           ;  if(model<=2)
 00C2 82E0              ldi R24,2
 00C4 90E0              ldi R25,0
 00C6 0888              ldd R0,y+16
 00C8 1988              ldd R1,y+17

⌨️ 快捷键说明

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