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

📄 master_1.lis

📁 ICCavr编写的TWI总线协议读写函数
💻 LIS
字号:
                        .module master_1.c
                        .area data(ram, con, rel)
 0000           _Date::
 0000                   .blkb 2
                        .area idata
 0000 0000              .byte 0,0
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0000              .byte 0,0
                        .area data(ram, con, rel)
 0004                   .dbfile D:\AVR\代码\ICCdaima\TWI/UART.h
 0004                   .dbsym e Date _Date A[4:4]c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR\代码\ICCdaima\TWI/UART.h
 0000                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
 0000                   .dbfunc e Start _Start fV
                        .even
 0000           _Start::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; #include"iom8v.h"
 0000           ; #include"UART.h"
 0000           ; #define  uchar  unsigned char
 0000           ; #define  STATUS  (TWSR&0xf8)
 0000           ; #define  SLA_W    0x32
 0000           ; #define  SLA_R    0x33
 0000           ; #define  SLAVER_ADDRESS     0x32
 0000           ; #define  START              0x08
 0000           ; #define  RE_START           0x10
 0000           ; #define  MT_SLA_WRITE_ACK   0x18
 0000           ; #define  MT_SLA_READ_ACK    0x40 
 0000           ; #define  MT_DATA_ACK        0x28
 0000           ; #define  MT_READ_ACK        0x58  
 0000           ;     
 0000           ; 
 0000           ; void Start(void)
 0000           ; {
 0000                   .dbline 18
 0000           ;  TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
 0000 84EA              ldi R24,164
 0002 86BF              out 0x36,R24
 0004           L2:
 0004                   .dbline 19
 0004           L3:
 0004                   .dbline 19
 0004           ;  while(!(TWCR&(1<<TWINT)));
 0004 26B6              in R2,0x36
 0006 27FE              sbrs R2,7
 0008 FDCF              rjmp L2
 000A                   .dbline -2
 000A                   .dbline 20
 000A           ; }
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbend
 000C                   .dbfunc e Stop _Stop fV
                        .even
 000C           _Stop::
 000C                   .dbline -1
 000C                   .dbline 22
 000C           ; void Stop(void)
 000C           ; {
 000C                   .dbline 23
 000C           ;  TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
 000C 84E9              ldi R24,148
 000E 86BF              out 0x36,R24
 0010                   .dbline -2
 0010                   .dbline 24
 0010           ; }
 0010           L5:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e Load _Load fV
 0012           ;              i -> R16
                        .even
 0012           _Load::
 0012                   .dbline -1
 0012                   .dbline 26
 0012           ; void Load(uchar i)
 0012           ; {
 0012                   .dbline 27
 0012           ;  TWDR=i;
 0012 03B9              out 0x3,R16
 0014                   .dbline 28
 0014           ;  TWCR=(1<<TWINT)|(1<<TWEN);
 0014 84E8              ldi R24,132
 0016 86BF              out 0x36,R24
 0018           L7:
 0018                   .dbline 29
 0018           L8:
 0018                   .dbline 29
 0018           ;  while(!(TWCR&(1<<TWINT))); 
 0018 26B6              in R2,0x36
 001A 27FE              sbrs R2,7
 001C FDCF              rjmp L7
 001E                   .dbline -2
 001E                   .dbline 31
 001E           ; 
 001E           ; }
 001E           L6:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r i 16 c
 0020                   .dbend
 0020                   .dbfunc e Get _Get fV
 0020           ;              d -> R16,R17
                        .even
 0020           _Get::
 0020                   .dbline -1
 0020                   .dbline 34
 0020           ; 
 0020           ; void Get(unsigned char *d)
 0020           ; {
 0020                   .dbline 35
 0020           ;  TWCR=(1<<TWINT)|(1<<TWEN);
 0020 84E8              ldi R24,132
 0022 86BF              out 0x36,R24
 0024           L11:
 0024                   .dbline 36
 0024           L12:
 0024                   .dbline 36
 0024           ;  while(!(TWCR&(1<<TWINT)));
 0024 26B6              in R2,0x36
 0026 27FE              sbrs R2,7
 0028 FDCF              rjmp L11
 002A                   .dbline 37
 002A           ;  *d= TWDR;
 002A 23B0              in R2,0x3
 002C F801              movw R30,R16
 002E 2082              std z+0,R2
 0030                   .dbline -2
 0030                   .dbline 38
 0030           ; }
 0030           L10:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r d 16 pc
 0032                   .dbend
 0032                   .dbfunc e ERROR _ERROR fV
 0032           ;          state -> R20
                        .even
 0032           _ERROR::
 0032 00D0              rcall push_gset1
 0034 402F              mov R20,R16
 0036                   .dbline -1
 0036                   .dbline 40
 0036           ; void ERROR(uchar state)
 0036           ; {Stop();
 0036                   .dbline 40
 0036 EADF              rcall _Stop
 0038                   .dbline -2
 0038                   .dbline 41
 0038           ; }
 0038           L14:
 0038 00D0              rcall pop_gset1
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbsym r state 20 c
 003C                   .dbend
 003C                   .dbfunc e SendByte _SendByte fc
 003C           ;           data -> R20
                        .even
 003C           _SendByte::
 003C 00D0              rcall push_gset1
 003E 402F              mov R20,R16
 0040                   .dbline -1
 0040                   .dbline 46
 0040           ; 
 0040           ; /*写一个字节data,成功则返回1,否则
 0040           ;   返回0*/
 0040           ; uchar SendByte(uchar data)
 0040           ; {
 0040                   .dbline 48
 0040           ;    //启动I2C
 0040           ;    Start();
 0040 DFDF              rcall _Start
 0042                   .dbline 49
 0042           ;   if(STATUS!=START) //{ERROR(STATUS);return 0;}
 0042 81B1              in R24,0x1
 0044 887F              andi R24,248
 0046 8830              cpi R24,8
 0048 19F0              breq L16
 004A                   .dbline 50
 004A           ;                       puts("Start ERRor");
 004A 00E0              ldi R16,<L18
 004C 10E0              ldi R17,>L18
 004E 00D0              rcall _puts
 0050           L16:
 0050                   .dbline 52
 0050           ;    //发送从机地址(写),等待回应, 错误检测
 0050           ;    Load(0);
 0050 0027              clr R16
 0052 DFDF              rcall _Load
 0054                   .dbline 53
 0054           ;    if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
 0054 81B1              in R24,0x1
 0056 887F              andi R24,248
 0058 8831              cpi R24,24
 005A 19F0              breq L19
 005C                   .dbline 54
 005C           ;                       puts("SLA_W RROR");
 005C 00E0              ldi R16,<L21
 005E 10E0              ldi R17,>L21
 0060 00D0              rcall _puts
 0062           L19:
 0062                   .dbline 61
 0062           ;    /*
 0062           ;    //发送EEPROM地址,等待回应,错误检测
 0062           ;    Load(addr);
 0062           ;    if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
 0062           ;    */
 0062           ;    //发送数据,等待回应,错误检测
 0062           ;    Load(data);
 0062 042F              mov R16,R20
 0064 D6DF              rcall _Load
 0066                   .dbline 62
 0066           ;    if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
 0066 81B1              in R24,0x1
 0068 887F              andi R24,248
 006A 8832              cpi R24,40
 006C 19F0              breq L22
 006E                   .dbline 63
 006E           ;                          puts("Date Error");
 006E 00E0              ldi R16,<L24
 0070 10E0              ldi R17,>L24
 0072 00D0              rcall _puts
 0074           L22:
 0074                   .dbline 64
 0074           ;    Stop();
 0074 CBDF              rcall _Stop
 0076                   .dbline 65
 0076           ;    return 1;//发送成功,返回1;
 0076 01E0              ldi R16,1
 0078                   .dbline -2
 0078           L15:
 0078 00D0              rcall pop_gset1
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r data 20 c
 007C                   .dbend
 007C                   .dbfunc e Init_Io _Init_Io fV
                        .even
 007C           _Init_Io::
 007C                   .dbline -1
 007C                   .dbline 70
 007C           ;    
 007C           ; }
 007C           ; 
 007C           ; void Init_Io(void)
 007C           ; {
 007C                   .dbline 71
 007C           ;  DDRC&=~((1<<PC4)&(1<<PC5)&(1<<PC2));  
 007C 84B3              in R24,0x14
 007E 8F7F              andi R24,255
 0080 84BB              out 0x14,R24
 0082                   .dbline 72
 0082           ;  PORTC|= (1<<PC4)|(1<<PC5)|(1<<PC2);
 0082 85B3              in R24,0x15
 0084 8463              ori R24,52
 0086 85BB              out 0x15,R24
 0088                   .dbline 73
 0088           ;  TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
 0088 84E4              ldi R24,68
 008A 86BF              out 0x36,R24
 008C                   .dbline 74
 008C           ;  TWBR=32;//波特率 100K   8M晶振
 008C 80E2              ldi R24,32
 008E 80B9              out 0x0,R24
 0090                   .dbline -2
 0090                   .dbline 75
 0090           ; }
 0090           L25:
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbend
 0092                   .dbfunc e main _main fV
 0092           ;           temp -> R20
                        .even
 0092           _main::
 0092                   .dbline -1
 0092                   .dbline 77
 0092           ; void main()
 0092           ; {
 0092                   .dbline 79
 0092           ;   uchar temp;
 0092           ;   Init_Io();
 0092 F4DF              rcall _Init_Io
 0094                   .dbline 80
 0094           ;   uart_init();
 0094 00D0              rcall _uart_init
 0096                   .dbline 81
 0096           ;   puts("串口工作");
 0096 00E0              ldi R16,<L27
 0098 10E0              ldi R17,>L27
 009A 00D0              rcall _puts
 009C 0BC0              rjmp L29
 009E           L28:
 009E                   .dbline 83
 009E           ;   while(1)
 009E           ;   for(temp=0;temp<10;temp++)
 009E 4427              clr R20
 00A0 07C0              rjmp L34
 00A2           L31:
 00A2                   .dbline 84
 00A2                   .dbline 85
 00A2 042F              mov R16,R20
 00A4 005D              subi R16,208    ; addi 48
 00A6 CADF              rcall _SendByte
 00A8                   .dbline 86
 00A8 0AE0              ldi R16,10
 00AA 10E0              ldi R17,0
 00AC 00D0              rcall _Delay_nms
 00AE                   .dbline 87
 00AE           L32:
 00AE                   .dbline 83
 00AE 4395              inc R20
 00B0           L34:
 00B0                   .dbline 83
 00B0 4A30              cpi R20,10
 00B2 B8F3              brlo L31
 00B4           L29:
 00B4                   .dbline 82
 00B4 F4CF              rjmp L28
 00B6           X0:
 00B6                   .dbline -2
 00B6                   .dbline 89
 00B6           ;   {
 00B6           ;     SendByte(temp+0x30);  
 00B6           ;       Delay_nms(10);
 00B6           ;    }
 00B6           ;   
 00B6           ; }
 00B6           L26:
 00B6                   .dbline 0 ; func end
 00B6 0895              ret
 00B8                   .dbsym r temp 20 c
 00B8                   .dbend
                        .area data(ram, con, rel)
 0004                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
 0004           L27:
 0004                   .blkb 9
                        .area idata
 0004 B4AEBFDAB9A4D7F700        .byte 180,174,191,218,185,164,215,247,0
                        .area data(ram, con, rel)
 000D                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
 000D           L24:
 000D                   .blkb 11
                        .area idata
 000D 44617465204572726F7200    .byte 'D,'a,'t,'e,32,'E,'r,'r,'o,'r,0
                        .area data(ram, con, rel)
 0018                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
 0018           L21:
 0018                   .blkb 11
                        .area idata
 0018 534C415F572052524F5200    .byte 'S,'L,'A,95,'W,32,'R,'R,'O,'R,0
                        .area data(ram, con, rel)
 0023                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
 0023           L18:
 0023                   .blkb 12
                        .area idata
 0023 5374617274204552526F7200  .byte 'S,'t,'a,'r,'t,32,'E,'R,'R,'o,'r,0
                        .area data(ram, con, rel)
 002F                   .dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c

⌨️ 快捷键说明

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