📄 twi.s
字号:
.module twi.c
.area text(rom, con, rel)
.dbfile F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\twi.c
.dbfunc e TWI_Init _TWI_Init fV
.even
_TWI_Init::
.dbline -1
.dbline 15
; //-----------------------------------------------------------
; //程序由AVR辅助开发工具V2.0.0自动生成
; //MCU系统的处理器为: ATMega16
; //MCU系统的晶振频率: 8.0000 Mhz
; //-----------------------------------------------------------
;
; #include <iom128v.h>
; #include "delay.h"
; #include "twi.h"
;
; //-----------------------------------------------------------
; //TWI初始化子程序
; //-----------------------------------------------------------
; void TWI_Init(void)
; {
.dbline 16
; TWCR= 0x00; //disable twi
clr R2
sts 116,R2
.dbline 17
; TWBR= 0x49; //set bit rate
ldi R24,73
sts 112,R24
.dbline 18
; TWSR= 0x03; //set prescale
ldi R24,3
sts 113,R24
.dbline 19
; TWAR= 0xFE; //set slave address
ldi R24,254
sts 114,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e twi_stop _twi_stop fV
.even
_twi_stop::
.dbline -1
.dbline 24
; }
;
; //总线上起动停止条件
; void twi_stop(void)
; {
.dbline 25
; TWI_Stop();
ldi R24,148
sts 116,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e twi_start _twi_start fc
.even
_twi_start::
.dbline -1
.dbline 30
; }
;
; //总线上起动开始条件
; unsigned char twi_start(void)
; {
.dbline 31
; TWI_Start();
ldi R24,164
sts 116,R24
L4:
.dbline 32
L5:
.dbline 32
; TWI_Wait();
lds R2,116
sbrs R2,7
rjmp L4
.dbline 33
; return TW_STATUS;
lds R16,113
andi R16,248
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e twi_writebyte _twi_writebyte fc
; c -> R20
.even
_twi_writebyte::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 38
; }
;
; //写一字节
; unsigned char twi_writebyte(unsigned char c)
; {
.dbline 39
; TWDR = c;
sts 115,R20
.dbline 40
; delay_nms(10);
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 41
; TWCR = (1 << (TWINT)) | (1 << (TWEN));
ldi R24,132
sts 116,R24
L8:
.dbline 42
L9:
.dbline 42
; TWI_Wait();
lds R2,116
sbrs R2,7
rjmp L8
.dbline 43
; delay_nms(10);
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 44
; return TW_STATUS;
lds R16,113
andi R16,248
.dbline -2
L7:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r c 20 c
.dbend
.dbfunc e twi_readbyte _twi_readbyte fc
; tmp -> R22
; ack -> R10
; c -> R20,R21
.even
_twi_readbyte::
xcall push_gset3
mov R10,R18
movw R20,R16
.dbline -1
.dbline 49
; }
;
; //读一字节 ack: true时发ACK,false时发NACK
; unsigned char twi_readbyte(unsigned char *c ,unsigned char ack)
; {
.dbline 50
; unsigned char tmp=(1 << (TWINT)) | (1 << (TWEN));
ldi R22,132
.dbline 51
; if(ack)
tst R10
breq L12
.dbline 52
; tmp|=(1 << (TWEA));
ori R22,64
L12:
.dbline 53
; TWCR=tmp;
sts 116,R22
.dbline 54
; delay_nms(10);
ldi R16,10
ldi R17,0
xcall _delay_nms
L14:
.dbline 55
L15:
.dbline 55
; TWI_Wait();
lds R2,116
sbrs R2,7
rjmp L14
.dbline 56
; delay_nms(10);
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 57
; *c=TWDR;
lds R2,115
movw R30,R20
std z+0,R2
.dbline 58
; return TW_STATUS;
lds R16,113
andi R16,248
.dbline -2
L11:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r tmp 22 c
.dbsym r ack 10 c
.dbsym r c 20 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -