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

📄 twi.s

📁 mega128+时实时钟日期芯片ds1307的例子
💻 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 + -