📄 twi.s
字号:
.module TWI.c
.area text(rom, con, rel)
.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\TWI.c
.dbfunc e twi_init _twi_init fV
.even
_twi_init::
.dbline -1
.dbline 21
; /************************************************
; 文件:TWI.c
; 用途:TWI操作函数
; 注意:
; 创建:2008.1.26
; 修改:2008.1.26
; Copy Right (c) www.avrvi.com AVR与虚拟仪器
; ************************************************/
; #include "..\config.h"
; /*************************************************************************
; ** 函数名称: twi_init(void)
; ** 功能描述: i2c通信初始化
; ** 输 入:
; ** 输出 :
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void twi_init(void)
; {
.dbline 22
; TWCR= 0x00; //disable twi
clr R2
sts 116,R2
.dbline 23
; TWBR= (1<<6) | (1<<5) | (1<<2); //set bit rate
ldi R24,100
sts 112,R24
.dbline 24
; TWSR= 0x00; //set prescale
sts 113,R2
.dbline 25
; TWAR= 0x00; //set slave address
sts 114,R2
.dbline 26
; TWCR= (1<<TWEN); //enable twi
ldi R24,4
sts 116,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e i2cstart _i2cstart fV
.even
_i2cstart::
.dbline -1
.dbline 39
; }
; /*************************************************************************
; ** 函数名称: i2cstart(void)
; ** 功能描述: i2c通信开始
; ** 输 入:
; ** 输出 :
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void i2cstart(void)
; {
.dbline 40
; TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
ldi R24,164
sts 116,R24
L4:
.dbline 41
L5:
.dbline 41
; while (!(TWCR & (1<<TWINT)));
lds R2,116
sbrs R2,7
rjmp L4
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e i2cwt _i2cwt fc
; data -> R16
.even
_i2cwt::
.dbline -1
.dbline 54
; }
; /*************************************************************************
; ** 函数名称: unsigned char i2cwt(unsigned char data)
; ** 功能描述: i2c写数据,返回TWI状态
; ** 输 入:
; ** 输 出: TWI状态
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; unsigned char i2cwt(unsigned char data)
; {
.dbline 55
; TWDR = data;
sts 115,R16
.dbline 56
; TWCR = (1<<TWINT) | (1<<TWEN);
ldi R24,132
sts 116,R24
L8:
.dbline 57
L9:
.dbline 57
; while (!(TWCR & (1<<TWINT)));
lds R2,116
sbrs R2,7
rjmp L8
.dbline 58
; _NOP();
nop
.dbline 59
; return(TWSR&0b11111000);
lds R16,113
andi R16,248
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e i2crd _i2crd fc
.even
_i2crd::
.dbline -1
.dbline 72
; }
; /*************************************************************************
; ** 函数名称: unsigned char i2crd(void)
; ** 功能描述: i2c读数据
; ** 输 入:
; ** 输出 : 读取的数据
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; unsigned char i2crd(void)
; {
.dbline 73
; TWCR= (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
ldi R24,196
sts 116,R24
L12:
.dbline 74
L13:
.dbline 74
; while (!(TWCR & (1<<TWINT)));
lds R2,116
sbrs R2,7
rjmp L12
.dbline 75
; return(TWDR);
lds R16,115
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e i2cstop _i2cstop fV
.even
_i2cstop::
.dbline -1
.dbline 88
; }
; /*************************************************************************
; ** 函数名称: i2cstop(void)
; ** 功能描述: i2c停止
; ** 输 入:
; ** 输出 :
; ** 全局变量: 无
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void i2cstop(void)
; {
.dbline 89
; TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
ldi R24,148
sts 116,R24
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -