?? main.lis
字號:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\atmega16子函數(shù)\AT24C256\main.c
0000 .dbfunc e WriteStart _WriteStart fV
.even
0000 _WriteStart::
0000 .dbline -1
0000 .dbline 15
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define SDA1() PORTC|=1<<PC1 //數(shù)據(jù)輸出 1
0000 ; #define SDA0() PORTC&=~(1<<PC1) //數(shù)據(jù)輸出 0
0000 ; #define SDAout() DDRC|=1<<PC1 //數(shù)據(jù)線改為輸出
0000 ; #define SDAin() DDRC&=~(1<<PC1) //數(shù)據(jù)線改為輸入
0000 ; #define RSDA() PINC&(1<<PC1) //讀數(shù)據(jù)
0000 ; #define SCL1() PORTC|=1<<PC0 //時(shí)鐘線輸出1
0000 ; #define SCL0() PORTC&=~(1<<PC0) //時(shí)鐘線輸出0
0000 ; #define e2ptime 20
0000 ;
0000 ;
0000 ; void WriteStart(void)//起始
0000 ; {
0000 .dbline 16
0000 ; SDA1();
0000 A99A sbi 0x15,1
0002 .dbline 17
0002 ; Delay(e2ptime);//該函數(shù)為軟件延時(shí)函數(shù),根據(jù)需要自己去寫吧
0002 04E1 ldi R16,20
0004 10E0 ldi R17,0
0006 08D2 xcall _Delay
0008 .dbline 18
0008 ; SCL1();
0008 A89A sbi 0x15,0
000A .dbline 19
000A ; Delay(e2ptime);
000A 04E1 ldi R16,20
000C 10E0 ldi R17,0
000E 04D2 xcall _Delay
0010 .dbline 20
0010 ; SDA0();
0010 A998 cbi 0x15,1
0012 .dbline 21
0012 ; Delay(e2ptime);
0012 04E1 ldi R16,20
0014 10E0 ldi R17,0
0016 .dbline -2
0016 .dbline 23
0016 ; // SCL0();
0016 ; }
0016 L1:
0016 .dbline 0 ; func end
0016 00C2 xjmp _Delay
0018 .dbend
0018 .dbfunc e WACK _WACK fV
0018 ; a -> R20
.even
0018 _WACK::
0018 0E940000 xcall push_gset1
001C 402F mov R20,R16
001E .dbline -1
001E .dbline 26
001E ;
001E ; void WACK(unsigned char a)//輸出ACK
001E ; {
001E .dbline 27
001E ; SCL0();
001E A898 cbi 0x15,0
0020 .dbline 28
0020 ; Delay(e2ptime);
0020 04E1 ldi R16,20
0022 10E0 ldi R17,0
0024 F9D1 xcall _Delay
0026 .dbline 29
0026 ; SDA0();//
0026 A998 cbi 0x15,1
0028 .dbline 30
0028 ; if(a)SDA1();
0028 4423 tst R20
002A 09F0 breq L3
002C .dbline 30
002C A99A sbi 0x15,1
002E L3:
002E .dbline 31
002E ; Delay(e2ptime);
002E 04E1 ldi R16,20
0030 10E0 ldi R17,0
0032 F2D1 xcall _Delay
0034 .dbline 32
0034 ; SCL1();
0034 A89A sbi 0x15,0
0036 .dbline 33
0036 ; Delay(e2ptime);
0036 04E1 ldi R16,20
0038 10E0 ldi R17,0
003A EED1 xcall _Delay
003C .dbline 34
003C ; SCL0();
003C A898 cbi 0x15,0
003E .dbline -2
003E .dbline 35
003E ; }
003E L2:
003E 0E940000 xcall pop_gset1
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r a 20 c
0044 .dbend
0044 .dbfunc e RACK _RACK fc
0044 ; temp -> R20
.even
0044 _RACK::
0044 0E940000 xcall push_gset1
0048 .dbline -1
0048 .dbline 38
0048 ;
0048 ; unsigned char RACK(void)//讀ACK
0048 ; {
0048 .dbline 39
0048 ; unsigned char temp=4;
0048 44E0 ldi R20,4
004A .dbline 40
004A ; SCL0();
004A A898 cbi 0x15,0
004C .dbline 41
004C ; Delay(e2ptime);
004C 04E1 ldi R16,20
004E 10E0 ldi R17,0
0050 E3D1 xcall _Delay
0052 .dbline 42
0052 ; SDAin();//改成輸入
0052 A198 cbi 0x14,1
0054 .dbline 43
0054 ; SDA1();//加上拉
0054 A99A sbi 0x15,1
0056 .dbline 44
0056 ; SCL1();
0056 A89A sbi 0x15,0
0058 .dbline 45
0058 ; Delay(e2ptime);
0058 04E1 ldi R16,20
005A 10E0 ldi R17,0
005C DDD1 xcall _Delay
005E 01C0 xjmp L7
0060 L6:
0060 .dbline 46
0060 4A95 dec R20
0062 L7:
0062 .dbline 46
0062 ; while(RSDA()&&temp)temp--;
0062 999B sbis 0x13,1
0064 02C0 rjmp L9
0066 4423 tst R20
0068 D9F7 brne L6
006A L9:
006A .dbline 47
006A ; SCL0();
006A A898 cbi 0x15,0
006C .dbline 48
006C ; SDAout();
006C A19A sbi 0x14,1
006E .dbline 49
006E ; if(temp)return(0);
006E 4423 tst R20
0070 11F0 breq L10
0072 .dbline 49
0072 0027 clr R16
0074 01C0 xjmp L5
0076 L10:
0076 .dbline 50
0076 ; else return(1);
0076 01E0 ldi R16,1
0078 .dbline -2
0078 L5:
0078 0E940000 xcall pop_gset1
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r temp 20 c
007E .dbend
007E .dbfunc e WriteByte _WriteByte fc
007E ; i -> R20
007E ; a -> R22
.even
007E _WriteByte::
007E 0E940000 xcall push_gset2
0082 602F mov R22,R16
0084 .dbline -1
0084 .dbline 54
0084 ; }
0084 ;
0084 ; unsigned char WriteByte(unsigned char a)//寫一個(gè)字節(jié)
0084 ; {
0084 .dbline 56
0084 ; unsigned char i;
0084 ; SCL0();
0084 A898 cbi 0x15,0
0086 .dbline 57
0086 ; for(i=0x80;i;i>>=1)
0086 40E8 ldi R20,128
0088 15C0 xjmp L16
008A L13:
008A .dbline 58
008A ; {
008A .dbline 59
008A ; Delay(e2ptime);
008A 04E1 ldi R16,20
008C 10E0 ldi R17,0
008E C4D1 xcall _Delay
0090 .dbline 60
0090 ; if(a&i)SDA1();
0090 262E mov R2,R22
0092 2422 and R2,R20
0094 11F0 breq L17
0096 .dbline 60
0096 A99A sbi 0x15,1
0098 01C0 xjmp L18
009A L17:
009A .dbline 61
009A ; else SDA0();
009A A998 cbi 0x15,1
009C L18:
009C .dbline 62
009C 04E1 ldi R16,20
009E 10E0 ldi R17,0
00A0 BBD1 xcall _Delay
00A2 .dbline 63
00A2 A89A sbi 0x15,0
00A4 .dbline 64
00A4 04E1 ldi R16,20
00A6 10E0 ldi R17,0
00A8 B7D1 xcall _Delay
00AA .dbline 65
00AA A898 cbi 0x15,0
00AC .dbline 66
00AC 04E1 ldi R16,20
00AE 10E0 ldi R17,0
00B0 B3D1 xcall _Delay
00B2 .dbline 67
00B2 L14:
00B2 .dbline 57
00B2 4695 lsr R20
00B4 L16:
00B4 .dbline 57
00B4 4423 tst R20
00B6 49F7 brne L13
00B8 .dbline 68
00B8 ; Delay(e2ptime);
00B8 ; SCL1();
00B8 ; Delay(e2ptime);
00B8 ; SCL0();
00B8 ; Delay(e2ptime);
00B8 ; }
00B8 ; return(RACK());
00B8 C5DF xcall _RACK
00BA .dbline -2
00BA L12:
00BA 0E940000 xcall pop_gset2
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r i 20 c
00C0 .dbsym r a 22 c
00C0 .dbend
00C0 .dbfunc e Stop _Stop fV
.even
00C0 _Stop::
00C0 .dbline -1
00C0 .dbline 72
00C0 ; }
00C0 ;
00C0 ; void Stop(void)//停止
00C0 ; {
00C0 .dbline 73
00C0 ; SCL0();
00C0 A898 cbi 0x15,0
00C2 .dbline 74
00C2 ; Delay(e2ptime);
00C2 04E1 ldi R16,20
00C4 10E0 ldi R17,0
00C6 A8D1 xcall _Delay
00C8 .dbline 75
00C8 ; SDA0();//
00C8 A998 cbi 0x15,1
00CA .dbline 76
00CA ; Delay(e2ptime);
00CA 04E1 ldi R16,20
00CC 10E0 ldi R17,0
00CE A4D1 xcall _Delay
00D0 .dbline 77
00D0 ; SCL1();
00D0 A89A sbi 0x15,0
00D2 .dbline 78
00D2 ; Delay(e2ptime);
00D2 04E1 ldi R16,20
00D4 10E0 ldi R17,0
00D6 A0D1 xcall _Delay
00D8 .dbline 79
00D8 ; SDA1();
00D8 A99A sbi 0x15,1
00DA .dbline 80
00DA ; Delay(e2ptime);////////////////
00DA 04E1 ldi R16,20
00DC 10E0 ldi R17,0
00DE .dbline -2
00DE .dbline 82
00DE ; //SCL0();/////////////
00DE ; }
00DE L19:
00DE .dbline 0 ; func end
00DE 9CC1 xjmp _Delay
00E0 .dbend
00E0 .dbfunc e ReadByte _ReadByte fc
00E0 ; temp -> R20
00E0 ; i -> R22
.even
00E0 _ReadByte::
00E0 0E940000 xcall push_gset2
00E4 .dbline -1
00E4 .dbline 85
00E4 ;
00E4 ; char ReadByte(void) //讀一個(gè)字節(jié)數(shù)據(jù)
00E4 ; {
00E4 .dbline 87
00E4 ; unsigned char temp,i;
00E4 ; SCL0();
00E4 A898 cbi 0x15,0
00E6 .dbline 88
00E6 ; SDAin();
00E6 A198 cbi 0x14,1
00E8 .dbline 89
00E8 ; SDA1();
00E8 A99A sbi 0x15,1
00EA .dbline 90
00EA ; for(i=0,temp=0;i<8;i++)
00EA 6627 clr R22
00EC 4427 clr R20
00EE 0DC0 xjmp L24
00F0 L21:
00F0 .dbline 91
00F0 ; {
00F0 .dbline 92
00F0 ; temp<<=1;
00F0 440F lsl R20
00F2 .dbline 93
00F2 ; SCL1();
00F2 A89A sbi 0x15,0
00F4 .dbline 94
00F4 ; Delay(e2ptime);
00F4 04E1 ldi R16,20
00F6 10E0 ldi R17,0
00F8 8FD1 xcall _Delay
00FA .dbline 95
00FA ; if(RSDA())temp|=1;
00FA 999B sbis 0x13,1
00FC 01C0 rjmp L25
00FE .dbline 95
00FE 4160 ori R20,1
0100 L25:
0100 .dbline 96
0100 A898 cbi 0x15,0
0102 .dbline 97
0102 04E1 ldi R16,20
0104 10E0 ldi R17,0
0106 88D1 xcall _Delay
0108 .dbline 98
0108 L22:
0108 .dbline 90
0108 6395 inc R22
010A L24:
010A .dbline 90
010A 6830 cpi R22,8
010C 88F3 brlo L21
010E .dbline 99
010E ; SCL0();
010E ; Delay(e2ptime);
010E ; }
010E ; SDAout();
010E A19A sbi 0x14,1
0110 .dbline 100
0110 ; return(temp);
0110 042F mov R16,R20
0112 .dbline -2
0112 L20:
0112 0E940000 xcall pop_gset2
0116 .dbline 0 ; func end
0116 0895 ret
0118 .dbsym r temp 20 c
0118 .dbsym r i 22 c
0118 .dbend
0118 .dbfunc e AT24CxxWrite _AT24CxxWrite fV
0118 ; ICerror -> y+5
0118 ; temp -> R12
0118 ; p -> R14,R15
0118 ; page_size -> y+4
0118 ; i -> R10
0118 ; next_page_start_addr -> y+0
0118 ; num -> y+24
0118 ; P_data -> y+22
0118 ; addr -> y+20
0118 ; DevAddr -> y+18
0118 ; model -> y+16
.even
0118 _AT24CxxWrite::
0118 0E940000 xcall push_arg4
011C 0E940000 xcall push_gset5
0120 2697 sbiw R28,6
0122 .dbline -1
0122 .dbline 117
0122 ; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -