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