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

📄 24cxx_test.lis

📁 24IIC的源代码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module _24cxx_test.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\iccavr\mega16\11\24CXX\24cxx_test.c
 0000                   .dbfile D:\iccavr\mega16\11\24CXX\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           ;             i0 -> 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 i0 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:\iccavr\mega16\11\24CXX\24cxx_twi.h
 0054                   .dbfunc e WriteByte _WriteByte fc
 0054                   .dbunion 0 2 reccnt
 0054                   .dbfield 0 rcnt i
 0054                   .dbfield 0 rcntl A[2:2]c
 0054                   .dbend
 0054           ;            ltg -> y+0
 0054           ;          Wdata -> R10
 0054           ;     RomAddress -> R12,R13
                        .even
 0054           _WriteByte::
 0054 0E940000          xcall push_xgset003C
 0058 A22E              mov R10,R18
 005A 6801              movw R12,R16
 005C 2297              sbiw R28,2
 005E                   .dbline -1
 005E                   .dbline 39
 005E           ; typedef unsigned char     uint8; 
 005E           ; typedef unsigned int      uint16; 
 005E           ; 
 005E           ; typedef  union reccnt 
 005E           ; { 
 005E           ;  uint16 rcnt; 
 005E           ;  uint8  rcntl[2]; 
 005E           ; }LngToChar; 
 005E           ; 
 005E           ; #define wr_24c64_cmd      0xA0 
 005E           ; #define rd_24c64_cmd      0xA1 
 005E           ;          
 005E           ; #define START 0x08   
 005E           ; #define RE_START 0x10   
 005E           ; #define MT_SLA_ACK 0x18   
 005E           ; //#define MT_SLA_ACK 0x38   
 005E           ; #define MT_SLA_NOACK 0x20   
 005E           ; #define MT_DATA_ACK  0x28   
 005E           ; #define MT_DATA_NOACK 0x30   
 005E           ; #define MR_SLA_ACK  0x40   
 005E           ; #define MR_SLA_NOACK 0x48   
 005E           ; #define MR_DATA_ACK 0x50   
 005E           ; #define MR_DATA_NOACK 0x58  
 005E           ;    
 005E           ; #define Start()         (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))   
 005E           ; #define Stop()          (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))   
 005E           ; #define Wait()          {while(!(TWCR&(1<<TWINT)));}   
 005E           ; #define TestAck()       (TWSR&0xf8)  
 005E           ; #define SetAck()        (TWCR|=(1<<TWEA))   
 005E           ; #define SetNoAck()      (TWCR&=~(1<<TWEA))   
 005E           ; #define Twi()           (TWCR=(1<<TWINT)|(1<<TWEN))  
 005E           ; #define Write8Bit(x)    {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
 005E           ;   
 005E           ; uint8 WriteByte(uint16 RomAddress,uint8 Wdata);
 005E           ; uint8 ReadByte(uint16 RomAddress);
 005E           ; 
 005E           ; //******************************************    
 005E           ; uint8 WriteByte(uint16 RomAddress,uint8 Wdata)    
 005E           ; {       
 005E                   .dbline 42
 005E           ;  LngToChar ltg; 
 005E           ;           
 005E           ;  ltg.rcnt=RomAddress; 
 005E D982              std y+1,R13
 0060 C882              std y+0,R12
 0062                   .dbline 44
 0062           ; 
 0062           ;  _CLI(); 
 0062 F894              cli
 0064                   .dbline 45
 0064           ;  Start();//twi 
 0064 84EA              ldi R24,164
 0066 86BF              out 0x36,R24
 0068                   .dbline 46
 0068           ;  Wait();   
 0068           L16:
 0068                   .dbline 46
 0068           L17:
 0068                   .dbline 46
 0068 26B6              in R2,0x36
 006A 27FE              sbrs R2,7
 006C FDCF              rjmp L16
 006E           X3:
 006E                   .dbline 46
 006E                   .dbline 46
 006E                   .dbline 47
 006E           ;  if(TestAck()!=START) goto wr_exit;//ACK 0x08    
 006E 81B1              in R24,0x1
 0070 887F              andi R24,248
 0072 8830              cpi R24,8
 0074 09F0              breq L19
 0076           X4:
 0076                   .dbline 47
 0076 37C0              xjmp L21
 0078           L19:
 0078                   .dbline 49
 0078           ; 
 0078           ;  Write8Bit(wr_24c64_cmd);// 
 0078                   .dbline 49
 0078 80EA              ldi R24,160
 007A 83B9              out 0x3,R24
 007C                   .dbline 49
 007C 84E8              ldi R24,132
 007E 86BF              out 0x36,R24
 0080                   .dbline 49
 0080                   .dbline 49
 0080                   .dbline 50
 0080           ;  Wait();   
 0080           L22:
 0080                   .dbline 50
 0080           L23:
 0080                   .dbline 50
 0080 26B6              in R2,0x36
 0082 27FE              sbrs R2,7
 0084 FDCF              rjmp L22
 0086           X5:
 0086                   .dbline 50
 0086                   .dbline 50
 0086                   .dbline 51
 0086           ;  if(TestAck()!=MT_SLA_ACK) goto wr_exit;//ACK MT_SLA_ACK 0x18  
 0086 81B1              in R24,0x1
 0088 887F              andi R24,248
 008A 8831              cpi R24,24
 008C 09F0              breq L25
 008E           X6:
 008E                   .dbline 51
 008E 2BC0              xjmp L21
 0090           L25:
 0090                   .dbline 53
 0090           ;  
 0090           ;  Write8Bit(ltg.rcntl[1]);  //写操作单元的高8位地址    
 0090                   .dbline 53
 0090 2980              ldd R2,y+1
 0092 23B8              out 0x3,R2
 0094                   .dbline 53
 0094 84E8              ldi R24,132
 0096 86BF              out 0x36,R24
 0098                   .dbline 53
 0098                   .dbline 53
 0098                   .dbline 54
 0098           ;  Wait(); 
 0098           L28:
 0098                   .dbline 54
 0098           L29:
 0098                   .dbline 54
 0098 26B6              in R2,0x36
 009A 27FE              sbrs R2,7
 009C FDCF              rjmp L28
 009E           X7:
 009E                   .dbline 54
 009E                   .dbline 54
 009E                   .dbline 55
 009E           ;  if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK   
 009E 81B1              in R24,0x1
 00A0 887F              andi R24,248
 00A2 8832              cpi R24,40
 00A4 09F0              breq L31
 00A6           X8:
 00A6                   .dbline 55
 00A6 1FC0              xjmp L21
 00A8           L31:
 00A8                   .dbline 57
 00A8           ; 
 00A8           ;  Write8Bit(ltg.rcntl[0]);   //写操作单元的低8位地址    
 00A8                   .dbline 57
 00A8 2880              ldd R2,y+0
 00AA 23B8              out 0x3,R2
 00AC                   .dbline 57
 00AC 84E8              ldi R24,132
 00AE 86BF              out 0x36,R24
 00B0                   .dbline 57
 00B0                   .dbline 57
 00B0                   .dbline 58
 00B0           ;  Wait(); 
 00B0           L33:
 00B0                   .dbline 58
 00B0           L34:
 00B0                   .dbline 58
 00B0 26B6              in R2,0x36
 00B2 27FE              sbrs R2,7
 00B4 FDCF              rjmp L33
 00B6           X9:
 00B6                   .dbline 58
 00B6                   .dbline 58
 00B6                   .dbline 59
 00B6           ;  if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK   
 00B6 81B1              in R24,0x1
 00B8 887F              andi R24,248
 00BA 8832              cpi R24,40
 00BC 09F0              breq L36
 00BE           X10:
 00BE                   .dbline 59
 00BE 13C0              xjmp L21
 00C0           L36:
 00C0                   .dbline 61
 00C0           ;     
 00C0           ;  Write8Bit(Wdata);// 
 00C0                   .dbline 61
 00C0 A3B8              out 0x3,R10
 00C2                   .dbline 61
 00C2 84E8              ldi R24,132
 00C4 86BF              out 0x36,R24
 00C6                   .dbline 61
 00C6                   .dbline 61
 00C6                   .dbline 62
 00C6           ;  Wait();   
 00C6           L38:
 00C6                   .dbline 62
 00C6           L39:
 00C6                   .dbline 62
 00C6 26B6              in R2,0x36
 00C8 27FE              sbrs R2,7
 00CA FDCF              rjmp L38
 00CC           X11:
 00CC                   .dbline 62
 00CC                   .dbline 62
 00CC                   .dbline 63
 00CC           ;  if(TestAck()!=MT_DATA_ACK) goto wr_exit;//ACK      
 00CC 81B1              in R24,0x1
 00CE 887F              andi R24,248
 00D0 8832              cpi R24,40
 00D2 09F0              breq L41
 00D4           X12:
 00D4                   .dbline 63
 00D4 08C0              xjmp L21
 00D6           L41:

⌨️ 快捷键说明

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