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

📄 main.lis

📁 AT24C256 读写 atmega16单片机( ICC )
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\atmega16子函数\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   //数据输出 1
 0000           ; #define SDA0() PORTC&=~(1<<PC1) //数据输出 0
 0000           ; #define SDAout() DDRC|=1<<PC1   //数据线改为输出
 0000           ; #define SDAin() DDRC&=~(1<<PC1)  //数据线改为输入
 0000           ; #define RSDA() PINC&(1<<PC1)   //读数据
 0000           ; #define SCL1() PORTC|=1<<PC0   //时钟线输出1
 0000           ; #define SCL0() PORTC&=~(1<<PC0) //时钟线输出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);//该函数为软件延时函数,根据需要自己去写吧
 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)//写一个字节
 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) //读一个字节数据
 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           ;  }

⌨️ 快捷键说明

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