📄 24cxx_test.lis
字号:
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 + -