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

📄 24cxx_test.lis

📁 24IIC的源代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0264                   .dbline 103
 0264           ;  if(i)//写到了页末,重新开始写新一页
 0264 AA20              tst R10
 0266 79F1              breq L64
 0268           X22:
 0268                   .dbline 104
 0268           ;  { 
 0268                   .dbline 105
 0268           ;   delay_ms(50);
 0268 02E3              ldi R16,50
 026A 10E0              ldi R17,0
 026C E4DE              xcall _delay_ms
 026E                   .dbline 106
 026E           ;   num=i;
 026E A88E              std y+24,R10
 0270                   .dbline 107
 0270           ;   P_data=p;
 0270 DF8A              std y+23,R13
 0272 CE8A              std y+22,R12
 0274                   .dbline 108
 0274           ;   next_page_start_addr+=page_size;
 0274 2C80              ldd R2,y+4
 0276 3324              clr R3
 0278 4424              clr R4
 027A 5524              clr R5
 027C 6880              ldd R6,y+0
 027E 7980              ldd R7,y+1
 0280 8A80              ldd R8,y+2
 0282 9B80              ldd R9,y+3
 0284 620C              add R6,R2
 0286 731C              adc R7,R3
 0288 841C              adc R8,R4
 028A 951C              adc R9,R5
 028C 6882              std y+0,R6
 028E 7982              std y+1,R7
 0290 8A82              std y+2,R8
 0292 9B82              std y+3,R9
 0294                   .dbline 109
 0294           ;   if(addr==model*128)
 0294 00E8              ldi R16,128
 0296 10E0              ldi R17,0
 0298 2889              ldd R18,y+16
 029A 3989              ldd R19,y+17
 029C 0E940000          xcall empy16s
 02A0 0C88              ldd R0,y+20
 02A2 1D88              ldd R1,y+21
 02A4 0016              cp R0,R16
 02A6 1106              cpc R1,R17
 02A8 09F0              breq X25
 02AA 7FCF              xjmp L43
 02AC           X25:
 02AC           X23:
 02AC                   .dbline 110
 02AC           ;   {
 02AC                   .dbline 111
 02AC           ;    addr=0;
 02AC 0024              clr R0
 02AE 1124              clr R1
 02B0 1D8A              std y+21,R1
 02B2 0C8A              std y+20,R0
 02B4                   .dbline 112
 02B4           ;    next_page_start_addr=page_size;
 02B4 2C80              ldd R2,y+4
 02B6 3324              clr R3
 02B8 4424              clr R4
 02BA 5524              clr R5
 02BC 2882              std y+0,R2
 02BE 3982              std y+1,R3
 02C0 4A82              std y+2,R4
 02C2 5B82              std y+3,R5
 02C4                   .dbline 113
 02C4           ;   }
 02C4                   .dbline 114
 02C4           ;   goto Wagain;
 02C4 72CF              xjmp L43
 02C6           L64:
 02C6                   .dbline 116
 02C6           ;  }
 02C6           ;  return ICerror;
 02C6 0D81              ldd R16,y+5
 02C8                   .dbline -2
 02C8           L29:
 02C8                   .dbline 0 ; func end
 02C8 2696              adiw R28,6
 02CA 0E940000          xcall pop_xgsetF0FC
 02CE 2496              adiw R28,4
 02D0 0895              ret
 02D2                   .dbsym r temp 14 c
 02D2                   .dbsym l ICerror 5 c
 02D2                   .dbsym r p 12 pc
 02D2                   .dbsym l page_size 4 c
 02D2                   .dbsym r i 10 c
 02D2                   .dbsym l next_page_start_addr 0 l
 02D2                   .dbsym l num 24 c
 02D2                   .dbsym l P_data 22 pc
 02D2                   .dbsym l addr 20 i
 02D2                   .dbsym l DevAddr 18 c
 02D2                   .dbsym l model 16 i
 02D2                   .dbend
 02D2                   .dbfunc e AT24CxxRead _AT24CxxRead fc
 02D2           ;           temp -> R12
 02D2           ;        ICerror -> R20
 02D2           ;              p -> R22,R23
 02D2           ;            num -> R10
 02D2           ;         P_data -> y+17
 02D2           ;           addr -> y+15
 02D2           ;        DevAddr -> R12
 02D2           ;          model -> R14,R15
                        .even
 02D2           _AT24CxxRead::
 02D2 0E940000          xcall push_xgsetF0FC
 02D6 C22E              mov R12,R18
 02D8 7801              movw R14,R16
 02DA 2597              sbiw R28,5
 02DC AB88              ldd R10,y+19
 02DE                   .dbline -1
 02DE                   .dbline 121
 02DE           ; }
 02DE           ; 
 02DE           ; //读数据,器件型号model,器件地址DevAddr,地址addr,存放到 *P_data,数据长度num
 02DE           ; unsigned char AT24CxxRead(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num)
 02DE           ; {
 02DE                   .dbline 123
 02DE           ;  unsigned char temp,*p,ICerror;
 02DE           ;  p=P_data;
 02DE 6989              ldd R22,y+17
 02E0 7A89              ldd R23,y+18
 02E2                   .dbline 124
 02E2           ;  ICerror=AT24CxxWrite(model,DevAddr,addr,0,0);
 02E2 2224              clr R2
 02E4 2C82              std y+4,R2
 02E6 3324              clr R3
 02E8 3B82              std y+3,R3
 02EA 2A82              std y+2,R2
 02EC 0F84              ldd R0,y+15
 02EE 1888              ldd R1,y+16
 02F0 1982              std y+1,R1
 02F2 0882              std y+0,R0
 02F4 2C2D              mov R18,R12
 02F6 8701              movw R16,R14
 02F8 DDDE              xcall _AT24CxxWrite
 02FA 402F              mov R20,R16
 02FC                   .dbline 125
 02FC           ;  temp=0xa0+(DevAddr<<1);
 02FC 8C2D              mov R24,R12
 02FE 880F              lsl R24
 0300 8056              subi R24,96    ; addi 160
 0302 C82E              mov R12,R24
 0304                   .dbline 126
 0304           ;  if(model<16) 
 0304 C701              movw R24,R14
 0306 8031              cpi R24,16
 0308 E0E0              ldi R30,0
 030A 9E07              cpc R25,R30
 030C 70F4              brsh L69
 030E           X26:
 030E                   .dbline 127
 030E           ;   temp+=((addr>>7)&0x0e);//器件24c32以下地址高位
 030E 27E0              ldi R18,7
 0310 30E0              ldi R19,0
 0312 0F85              ldd R16,y+15
 0314 1889              ldd R17,y+16
 0316 0E940000          xcall lsr16
 031A C801              movw R24,R16
 031C 8E70              andi R24,14
 031E 9070              andi R25,0
 0320 2C2C              mov R2,R12
 0322 3324              clr R3
 0324 280E              add R2,R24
 0326 391E              adc R3,R25
 0328 C22C              mov R12,R2
 032A           L69:
 032A           L71:
 032A                   .dbline 129
 032A           ;  Ragain2:
 032A           ;   if(ICerror<10)
 032A 4A30              cpi R20,10
 032C A0F4              brsh L74
 032E           X27:
 032E                   .dbline 130
 032E           ;    ICerror++;
 032E 4395              inc R20
 0330                   .dbline 132
 0330           ;   else 
 0330           ;    goto Rstop;
 0330           L73:
 0330                   .dbline 133
 0330           ;  twi_start(); //
 0330 91DE              xcall _twi_start
 0332                   .dbline 134
 0332           ;  if(twi_writebyte(temp|1)==0)
 0332 0C2D              mov R16,R12
 0334 0160              ori R16,1
 0336 99DE              xcall _twi_writebyte
 0338 0023              tst R16
 033A 31F4              brne L78
 033C           X28:
 033C                   .dbline 135
 033C           ;   goto Ragain2;
 033C F6CF              xjmp L71
 033E           L77:
 033E                   .dbline 137
 033E           ;  while(num--)
 033E           ;  {
 033E                   .dbline 138
 033E           ;   twi_readbyte(p,num); 
 033E 2A2D              mov R18,R10
 0340 8B01              movw R16,R22
 0342 A2DE              xcall _twi_readbyte
 0344                   .dbline 139
 0344           ;   p++;
 0344 6F5F              subi R22,255  ; offset = 1
 0346 7F4F              sbci R23,255
 0348                   .dbline 140
 0348           ;  }
 0348           L78:
 0348                   .dbline 136
 0348 CA2C              mov R12,R10
 034A DD24              clr R13
 034C 8C2D              mov R24,R12
 034E 8150              subi R24,1
 0350 A82E              mov R10,R24
 0352 CC20              tst R12
 0354 A1F7              brne L77
 0356           X29:
 0356           L74:
 0356                   .dbline 142
 0356           ;  Rstop:
 0356           ;   Stop(); 
 0356 84E9              ldi R24,148
 0358 86BF              out 0x36,R24
 035A                   .dbline 143
 035A           ;  return(ICerror);
 035A 042F              mov R16,R20
 035C                   .dbline -2
 035C           L68:
 035C                   .dbline 0 ; func end
 035C 2596              adiw R28,5
 035E 0C940000          xjmp pop_xgsetF0FC
 0362                   .dbsym r temp 12 c
 0362                   .dbsym r ICerror 20 c
 0362                   .dbsym r p 22 pc
 0362                   .dbsym r num 10 c
 0362                   .dbsym l P_data 17 pc
 0362                   .dbsym l addr 15 i
 0362                   .dbsym r DevAddr 12 c
 0362                   .dbsym r model 14 i
 0362                   .dbend
 0362                   .dbfile D:\mega16_32实验板资料\ICCAVR源程序\twi\24c64\连续读写\lcd1602.h
 0362                   .dbfunc e LCD_init _LCD_init fV
                        .even
 0362           _LCD_init::
 0362                   .dbline -1
 0362                   .dbline 34
 0362           ; /*-------------------------------------------
 0362           ;    RS----------PC2
 0362           ;    RW----------GND
 0362           ;    EN----------PC3
 0362           ;    D4-D7-------PC4-PC7
 0362           ; ---------------------------------------------*/
 0362           ; //定义MCU与LCD的接口 
 0362           ; #define LCD_EN_PORT   PORTC
 0362           ; #define LCD_EN_DDR    DDRC
 0362           ; #define LCD_RS_PORT   PORTC
 0362           ; #define LCD_RS_DDR    DDRC
 0362           ; #define LCD_DATA_PORT PORTC
 0362           ; #define LCD_DATA_DDR  DDRC
 0362           ; #define LCD_DATA_PIN  PINC
 0362           ; #define LCD_EN        0x08   //portc3 out
 0362           ; #define LCD_RS        0x04   //portc2 out
 0362           ; #define LCD_DATA      0xf0 //portc4/5/6/7 out
 0362           ; 
 0362           ; /*----------------------------------------------------------
 0362           ; Public function prototypes
 0362           ; ----------------------------------------------------------*/
 0362           ; void LCD_init(void);
 0362           ; void LCD_en_write(void);
 0362           ; void clear(void);
 0362           ; void LCD_write_char(unsigned command,unsigned data);
 0362           ; void LCD_set_xy(unsigned char x, unsigned char y);
 0362           ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
 0362           ; void LCD_write_data(unsigned char X,unsigned char Y,int dat);
 0362           ; 
 0362           ; /*------------------------------------------------------------
 0362           ; 函数: lcd1602口线初始化和液晶初始化
 0362           ; -------------------------------------------------------------*/
 0362           ; void LCD_init(void) //液晶初始化
 0362           ; {
 0362                   .dbline 35
 0362           ;  LCD_DATA_DDR|=LCD_DATA;
 0362 84B3              in R24,0x14
 0364 806F              ori R24,240
 0366 84BB              out 0x14,R24
 0368                   .dbline 36
 0368           ;  LCD_EN_DDR|=LCD_EN;
 0368 A39A              sbi 0x14,3
 036A                   .dbline 37
 036A           ;  LCD_RS_DDR|=LCD_RS;
 036A A29A              sbi 0x14,2
 036C                   .dbline 38
 036C           ;  delay_ms(15);
 036C 0FE0              ldi R16,15
 036E 10E0              ldi R17,0
 0370 62DE              xcall _delay_ms
 0372                   .dbline 39
 0372           ;  LCD_write_char(0x28,0); //4位显示
 0372 2227              clr R18
 0374 3327              clr R19
 0376 08E2              ldi R16,40
 0378 10E0              ldi R17,0
 037A 2AD0              xcall _LCD_write_char
 037C                   .dbline 40
 037C           ;  delay_ms(15);
 037C 0FE0              ldi R16,15
 037E 10E0              ldi R17,0
 0380 5ADE              xcall _delay_ms
 0382                   .dbline 41
 0382           ;  LCD_write_char(0x0c,0); //显示开
 0382 2227              clr R18
 0384 3327              clr R19
 0386 0CE0              ldi R16,12
 0388 10E0              ldi R17,0
 038A 22D0              xcall _LCD_write_char
 038C                   .dbline 42
 038C           ;  delay_ms(15);
 038C 0FE0              ldi R16,15
 038E 10E0              ldi R17,0
 0390 52DE              xcall _delay_ms
 0392                   .dbline 43
 0392           ;  LCD_write_char(0x01,0); //清屏
 0392 2227              clr R18
 0394 3327              clr R19
 0396 01E0              ldi R16,1
 0398 10E0              ldi R17,0
 039A 1AD0              xcall _LCD_write_char
 039C                   .dbline 44
 039C           ;  clear();
 039C 6AD0              xcall _clear
 039E                   .dbline -2
 039E           L80:

⌨️ 快捷键说明

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