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

📄 slave.lis

📁 ICCavr编写的TWI总线协议读写函数
💻 LIS
字号:
                        .module slave.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 0000                   .dbfunc e IoInit _IoInit fV
                        .even
 0000           _IoInit::
 0000                   .dbline -1
 0000                   .dbline 27
 0000           ; /*
 0000           ;       文件名:slave.c 
 0000           ;       两个Mega8间的TWI通信实验从模式单片机程序
 0000           ;       
 0000           ;       外部4MHz晶振
 0000           ;       
 0000           ;       芯艺 2004-09-02 --- 2004-09-03
 0000           ; */
 0000           ; 
 0000           ; #include <iom8v.h>
 0000           ; #include <stdio.h>
 0000           ; #include"delay.h"
 0000           ; #include"twi.h"
 0000           ; #define uint unsigned int
 0000           ; #define uchar unsigned char
 0000           ; #define  uchar  unsigned char
 0000           ; 
 0000           ; #define TWI_ADDRESS 0X32
 0000           ; 
 0000           ; /*
 0000           ; #define  TW_STATUS  (TWSR&0xf8)
 0000           ; #define  TW_WRITE    0xa0
 0000           ; #define  TW_READ    0xa1
 0000           ; */
 0000           ; //初始化
 0000           ; void IoInit(void)
 0000           ; {
 0000                   .dbline 29
 0000           ;       //使能SCL、SDA引脚内部上拉电阻
 0000           ;       DDRC=0;
 0000 2224              clr R2
 0002 24BA              out 0x14,R2
 0004                   .dbline 30
 0004           ;       PORTC=0X30;
 0004 80E3              ldi R24,48
 0006 85BB              out 0x15,R24
 0008                   .dbline 33
 0008           ; 
 0008           ;       //TWI接口初始化,从器件模式
 0008           ;       TWAR=TWI_ADDRESS | (1<<TWGCE);
 0008 83E3              ldi R24,51
 000A 82B9              out 0x2,R24
 000C                   .dbline 34
 000C           ;       TWCR=(1<<TWEA) | (1<<TWEN);
 000C 84E4              ldi R24,68
 000E 86BF              out 0x36,R24
 0010                   .dbline -2
 0010                   .dbline 35
 0010           ; }
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e main _main fV
 0012           ;              j -> R20
 0012           ;              i -> R10
                        .even
 0012           _main::
 0012                   .dbline -1
 0012                   .dbline 38
 0012           ; 
 0012           ; void main(void)
 0012           ; {
 0012                   .dbline 39
 0012           ;       uchar i,j=0;
 0012 4427              clr R20
 0014                   .dbline 41
 0014           ;       
 0014           ;       IoInit();
 0014 F5DF              rcall _IoInit
 0016                   .dbline 42
 0016           ;       uart_init();
 0016 00D0              rcall _uart_init
 0018                   .dbline 43
 0018           ;       printf("START\n");
 0018 00E0              ldi R16,<L3
 001A 10E0              ldi R17,>L3
 001C 00D0              rcall _printf
 001E 3AC0              rjmp L5
 0020           L4:
 0020                   .dbline 45
 0020           ;       while(1)
 0020           ;       {
 0020                   .dbline 47
 0020           ;               //while ((TWCR & (1<<TWINT)) == 0);  //完成一次接收
 0020           ;               i=TW_STATUS;                       //看看状态
 0020 81B1              in R24,0x1
 0022 887F              andi R24,248
 0024 A82E              mov R10,R24
 0026                   .dbline 48
 0026           ;                Delay_nms(100);
 0026 04E6              ldi R16,100
 0028 10E0              ldi R17,0
 002A 00D0              rcall _Delay_nms
 002C                   .dbline 49
 002C           ;               switch(i)
 002C 6A2D              mov R22,R10
 002E 7727              clr R23
 0030 6038              cpi R22,128
 0032 E0E0              ldi R30,0
 0034 7E07              cpc R23,R30
 0036 99F0              breq L12
 0038 80E8              ldi R24,128
 003A 90E0              ldi R25,0
 003C 8617              cp R24,R22
 003E 9707              cpc R25,R23
 0040 2CF0              brlt L21
 0042           L20:
 0042 6036              cpi R22,96
 0044 E0E0              ldi R30,0
 0046 7E07              cpc R23,R30
 0048 31F0              breq L10
 004A 1DC0              rjmp L7
 004C           L21:
 004C 603A              cpi R22,160
 004E E0E0              ldi R30,0
 0050 7E07              cpc R23,R30
 0052 A1F0              breq L17
 0054 18C0              rjmp L7
 0056           X0:
 0056                   .dbline 50
 0056           ;               {
 0056           L10:
 0056                   .dbline 52
 0056           ;                       case TW_SR_SLA_ACK:
 0056           ;                               printf("START\nSLA+W\n");
 0056 00E0              ldi R16,<L11
 0058 10E0              ldi R17,>L11
 005A 00D0              rcall _printf
 005C                   .dbline 53
 005C           ;                               break;
 005C 19C0              rjmp L8
 005E           L12:
 005E                   .dbline 55
 005E           ;                       case TW_SR_DATA_ACK:
 005E           ;                               if(j==0)
 005E 4423              tst R20
 0060 31F4              brne L13
 0062                   .dbline 56
 0062           ;                                       printf("收到:%d",TWDR);
 0062 23B1              in R18,0x3
 0064 3327              clr R19
 0066 00E0              ldi R16,<L15
 0068 10E0              ldi R17,>L15
 006A 00D0              rcall _printf
 006C 05C0              rjmp L14
 006E           L13:
 006E                   .dbline 58
 006E           ;                               else
 006E           ;                                       printf(" %d",TWDR);
 006E 23B1              in R18,0x3
 0070 3327              clr R19
 0072 00E0              ldi R16,<L16
 0074 10E0              ldi R17,>L16
 0076 00D0              rcall _printf
 0078           L14:
 0078                   .dbline 59
 0078           ;                               j++;
 0078 4395              inc R20
 007A                   .dbline 60
 007A           ;                               break;
 007A 0AC0              rjmp L8
 007C           L17:
 007C                   .dbline 62
 007C           ;                       case TW_SR_STOP:
 007C           ;                               printf(";\nSTOP\n\n");
 007C 00E0              ldi R16,<L18
 007E 10E0              ldi R17,>L18
 0080 00D0              rcall _printf
 0082                   .dbline 63
 0082           ;                               j=0;
 0082 4427              clr R20
 0084                   .dbline 64
 0084           ;                               break;
 0084 05C0              rjmp L8
 0086           L7:
 0086                   .dbline 66
 0086           ;                       default:
 0086           ;                               printf("error:%x",(int)i);
 0086 2A2D              mov R18,R10
 0088 3327              clr R19
 008A 00E0              ldi R16,<L19
 008C 10E0              ldi R17,>L19
 008E 00D0              rcall _printf
 0090                   .dbline 67
 0090           ;                               break;
 0090           L8:
 0090                   .dbline 69
 0090 84EC              ldi R24,196
 0092 86BF              out 0x36,R24
 0094                   .dbline 70
 0094           L5:
 0094                   .dbline 44
 0094 C5CF              rjmp L4
 0096           X1:
 0096                   .dbline -2
 0096                   .dbline 72
 0096           ;               }
 0096           ;               TWCR=(1<<TWEA) | (1<<TWEN)|(1<<TWINT);  //清除TWINT位
 0096           ;       }
 0096           ; 
 0096           ; }
 0096           L2:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r j 20 c
 0098                   .dbsym r i 10 c
 0098                   .dbend
                        .area data(ram, con, rel)
 0000                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 0000           L19:
 0000                   .blkb 9
                        .area idata
 0000 6572726F723A257800        .byte 'e,'r,'r,'o,'r,58,37,'x,0
                        .area data(ram, con, rel)
 0009                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 0009           L18:
 0009                   .blkb 9
                        .area idata
 0009 3B0A53544F500A0A00        .byte 59,10,'S,'T,'O,'P,10,10,0
                        .area data(ram, con, rel)
 0012                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 0012           L16:
 0012                   .blkb 4
                        .area idata
 0012 20256400          .byte 32,37,'d,0
                        .area data(ram, con, rel)
 0016                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 0016           L15:
 0016                   .blkb 8
                        .area idata
 0016 CAD5B5BD3A256400  .byte 202,213,181,189,58,37,'d,0
                        .area data(ram, con, rel)
 001E                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 001E           L11:
 001E                   .blkb 13
                        .area idata
 001E 53544152540A534C412B570A00        .byte 'S,'T,'A,'R,'T,10,'S,'L,'A,43,'W,10,0
                        .area data(ram, con, rel)
 002B                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c
 002B           L3:
 002B                   .blkb 7
                        .area idata
 002B 53544152540A00    .byte 'S,'T,'A,'R,'T,10,0
                        .area data(ram, con, rel)
 0032                   .dbfile D:\AVR\代码\ICCdaima\TWI\slave.c

⌨️ 快捷键说明

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