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

📄 twi.lis

📁 ATMEGA128的PCF8536驱动程序
💻 LIS
字号:
                        .module TWI.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\TWI.c
 0000                   .dbfunc e twi_init _twi_init fV
                        .even
 0000           _twi_init::
 0000                   .dbline -1
 0000                   .dbline 21
 0000           ; /************************************************
 0000           ; 文件:TWI.c
 0000           ; 用途:TWI操作函数
 0000           ; 注意:
 0000           ; 创建:2008.1.26
 0000           ; 修改:2008.1.26
 0000           ; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
 0000           ; ************************************************/
 0000           ; #include "..\config.h"
 0000           ; /*************************************************************************
 0000           ; ** 函数名称: twi_init(void)
 0000           ; ** 功能描述: i2c通信初始化
 0000           ; ** 输 入: 
 0000           ; ** 输出        : 
 0000           ; ** 全局变量: 无
 0000           ; ** 调用模块: 
 0000           ; ** 说明:
 0000           ; ** 注意:
 0000           ; **************************************************************************/
 0000           ; void twi_init(void)
 0000           ; {
 0000                   .dbline 22
 0000           ;  TWCR= 0x00; //disable twi
 0000 2224              clr R2
 0002 20927400          sts 116,R2
 0006                   .dbline 23
 0006           ;  TWBR= (1<<6) | (1<<5) | (1<<2); //set bit rate
 0006 84E6              ldi R24,100
 0008 80937000          sts 112,R24
 000C                   .dbline 24
 000C           ;  TWSR= 0x00; //set prescale
 000C 20927100          sts 113,R2
 0010                   .dbline 25
 0010           ;  TWAR= 0x00; //set slave address
 0010 20927200          sts 114,R2
 0014                   .dbline 26
 0014           ;  TWCR= (1<<TWEN); //enable twi
 0014 84E0              ldi R24,4
 0016 80937400          sts 116,R24
 001A                   .dbline -2
 001A           L2:
 001A                   .dbline 0 ; func end
 001A 0895              ret
 001C                   .dbend
 001C                   .dbfunc e i2cstart _i2cstart fV
                        .even
 001C           _i2cstart::
 001C                   .dbline -1
 001C                   .dbline 39
 001C           ; }
 001C           ; /*************************************************************************
 001C           ; ** 函数名称: i2cstart(void)
 001C           ; ** 功能描述: i2c通信开始
 001C           ; ** 输 入: 
 001C           ; ** 输出        : 
 001C           ; ** 全局变量: 无
 001C           ; ** 调用模块: 
 001C           ; ** 说明:
 001C           ; ** 注意:
 001C           ; **************************************************************************/
 001C           ; void i2cstart(void)
 001C           ; { 
 001C                   .dbline 40
 001C           ;       TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); 
 001C 84EA              ldi R24,164
 001E 80937400          sts 116,R24
 0022           L4:
 0022                   .dbline 41
 0022           L5:
 0022                   .dbline 41
 0022           ;       while (!(TWCR & (1<<TWINT)));
 0022 20907400          lds R2,116
 0026 27FE              sbrs R2,7
 0028 FCCF              rjmp L4
 002A                   .dbline -2
 002A           L3:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbend
 002C                   .dbfunc e i2cwt _i2cwt fc
 002C           ;           data -> R16
                        .even
 002C           _i2cwt::
 002C                   .dbline -1
 002C                   .dbline 54
 002C           ; }
 002C           ; /*************************************************************************
 002C           ; ** 函数名称: unsigned char i2cwt(unsigned char data)
 002C           ; ** 功能描述: i2c写数据,返回TWI状态
 002C           ; ** 输 入: 
 002C           ; ** 输  出: TWI状态
 002C           ; ** 全局变量: 无
 002C           ; ** 调用模块: 
 002C           ; ** 说明:
 002C           ; ** 注意:
 002C           ; **************************************************************************/
 002C           ; unsigned char i2cwt(unsigned char data)
 002C           ; { 
 002C                   .dbline 55
 002C           ;       TWDR = data;
 002C 00937300          sts 115,R16
 0030                   .dbline 56
 0030           ;       TWCR = (1<<TWINT) | (1<<TWEN);
 0030 84E8              ldi R24,132
 0032 80937400          sts 116,R24
 0036           L8:
 0036                   .dbline 57
 0036           L9:
 0036                   .dbline 57
 0036           ;       while (!(TWCR & (1<<TWINT)));
 0036 20907400          lds R2,116
 003A 27FE              sbrs R2,7
 003C FCCF              rjmp L8
 003E                   .dbline 58
 003E           ;       _NOP();
 003E 0000              nop
 0040                   .dbline 59
 0040           ;       return(TWSR&0b11111000);
 0040 00917100          lds R16,113
 0044 087F              andi R16,248
 0046                   .dbline -2
 0046           L7:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbsym r data 16 c
 0048                   .dbend
 0048                   .dbfunc e i2crd _i2crd fc
                        .even
 0048           _i2crd::
 0048                   .dbline -1
 0048                   .dbline 72
 0048           ; }
 0048           ; /*************************************************************************
 0048           ; ** 函数名称: unsigned char i2crd(void)
 0048           ; ** 功能描述: i2c读数据
 0048           ; ** 输 入: 
 0048           ; ** 输出        : 读取的数据
 0048           ; ** 全局变量: 无
 0048           ; ** 调用模块: 
 0048           ; ** 说明:
 0048           ; ** 注意:
 0048           ; **************************************************************************/
 0048           ; unsigned char i2crd(void)
 0048           ; {
 0048                   .dbline 73
 0048           ;       TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
 0048 84EC              ldi R24,196
 004A 80937400          sts 116,R24
 004E           L12:
 004E                   .dbline 74
 004E           L13:
 004E                   .dbline 74
 004E           ;       while (!(TWCR & (1<<TWINT)));
 004E 20907400          lds R2,116
 0052 27FE              sbrs R2,7
 0054 FCCF              rjmp L12
 0056                   .dbline 75
 0056           ;       return(TWDR);
 0056 00917300          lds R16,115
 005A                   .dbline -2
 005A           L11:
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbend
 005C                   .dbfunc e i2cstop _i2cstop fV
                        .even
 005C           _i2cstop::
 005C                   .dbline -1
 005C                   .dbline 88
 005C           ; }
 005C           ; /*************************************************************************
 005C           ; ** 函数名称: i2cstop(void)
 005C           ; ** 功能描述: i2c停止
 005C           ; ** 输 入: 
 005C           ; ** 输出        : 
 005C           ; ** 全局变量: 无
 005C           ; ** 调用模块: 
 005C           ; ** 说明:
 005C           ; ** 注意:
 005C           ; **************************************************************************/
 005C           ; void i2cstop(void)
 005C           ; { 
 005C                   .dbline 89
 005C           ;    TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
 005C 84E9              ldi R24,148
 005E 80937400          sts 116,R24
 0062                   .dbline -2
 0062           L15:
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbend

⌨️ 快捷键说明

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