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

📄 iic.s

📁 单片机为meg88
💻 S
字号:
	.module iic.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic.c
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 10
; 
; #include "IIC.h"
; #include "common.h"
; 
; 
; // TWI initialize
; // bit rate:32,prescal:1,rate:100Khz;
; //SCL frequency = CPU Clock frequence / (16 + 2(TWBR)(PrescalerValue))
; void twi_init(void)
; {
	.dbline 11
; 	TWCR = 0x00;		//disable twi
	clr R2
	sts 188,R2
	.dbline 12
; 	TWBR = 0x20;		//set bit rate equal 32
	ldi R24,32
	sts 184,R24
	.dbline 13
; 	TWSR = 0x00;		//set prescale  clock/1
	sts 185,R2
	.dbline 14
; 	TWAR = 0x00;		//set slave address
	sts 186,R2
	.dbline 15
; 	TWCR = 0x85;		//enable twi
	ldi R24,133
	sts 188,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 48
	rjmp _twi_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\fengzm.POWERMAXTECH\桌面\MCU2\iic.c
	.dbfunc e twi_isr _twi_isr fV
;     ucIIC_TWSR -> R16
	.even
_twi_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 20
; }
; 
; #pragma interrupt_handler twi_isr:25
; void twi_isr(void)
; {
	.dbline 23
; 	uchar ucIIC_TWSR;
; 
; 	ucIIC_TWSR = TWSR & 0xF8;
	lds R16,185
	andi R16,248
	.dbline 24
; 	if(ucIIC_TWSR == 0x08)
	cpi R16,8
	brne L3
	.dbline 25
; 	{
	.dbline 26
; 		TWDR = g_ucIICAdress;
	lds R2,_g_ucIICAdress
	sts 187,R2
	.dbline 27
; 		ZHONGTU_START_IIC();
	ldi R24,133
	sts 188,R24
	.dbline 28
; 	}
	rjmp L4
L3:
	.dbline 29
; 	else if((ucIIC_TWSR == 0x18) || (ucIIC_TWSR == 0x20))
	cpi R16,24
	breq L7
	cpi R16,32
	brne L5
L7:
	.dbline 30
; 	{
	.dbline 31
; 		TWDR = *g_ucIICDataBuf;
	lds R30,_g_ucIICDataBuf
	lds R31,_g_ucIICDataBuf+1
	ldd R2,z+0
	sts 187,R2
	.dbline 32
; 		g_ucIICDataNum--;
	lds R24,_g_ucIICDataNum
	subi R24,1
	sts _g_ucIICDataNum,R24
	.dbline 33
; 		ZHONGTU_START_IIC();
	ldi R24,133
	sts 188,R24
	.dbline 34
; 	}
	rjmp L6
L5:
	.dbline 35
; 	else if((ucIIC_TWSR == 0x28) || (ucIIC_TWSR == 0x30))
	cpi R16,40
	breq L10
	cpi R16,48
	brne L8
L10:
	.dbline 36
; 	{
	.dbline 37
; 		if(g_ucIICDataNum > 0)
	clr R2
	lds R3,_g_ucIICDataNum
	cp R2,R3
	brsh L11
	.dbline 38
; 		{
	.dbline 39
;  			TWDR = *(++g_ucIICDataBuf);
	lds R24,_g_ucIICDataBuf
	lds R25,_g_ucIICDataBuf+1
	adiw R24,1
	sts _g_ucIICDataBuf+1,R25
	sts _g_ucIICDataBuf,R24
	movw R30,R24
	ldd R2,z+0
	sts 187,R2
	.dbline 40
;  			g_ucIICDataNum--;
	mov R24,R3
	subi R24,1
	sts _g_ucIICDataNum,R24
	.dbline 41
; 			ZHONGTU_START_IIC();
	ldi R24,133
	sts 188,R24
	.dbline 42
; 		}
	rjmp L9
L11:
	.dbline 44
; 		else
; 		{
	.dbline 45
; 			g_ucIICEnd = 1;
	ldi R24,1
	sts _g_ucIICEnd,R24
	.dbline 46
; 			STOP_IIC();
	ldi R24,149
	sts 188,R24
	.dbline 47
; 		}
	.dbline 48
; 	}
	rjmp L9
L8:
	.dbline 50
; 	else
; 	{
	.dbline 51
; 		STOP_IIC();
	ldi R24,149
	sts 188,R24
	.dbline 52
;         g_ucIICState = IIC_BUSY;
	ldi R24,16
	sts _g_ucIICState,R24
	.dbline 53
; 		g_ucIICEnd = 1;
	ldi R24,1
	sts _g_ucIICEnd,R24
	.dbline 54
; 	}
L9:
L6:
L4:
	.dbline -2
L2:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r ucIIC_TWSR 16 c
	.dbend
	.dbfunc e IICSendStr _IICSendStr fi
;   ucIICDataNum -> y+0
;              s -> R18,R19
;    ucIICAdress -> R16
	.even
_IICSendStr::
	.dbline -1
	.dbline 59
; }
; 
; //ucIICAdress为子地址;*s为要传送的数据组,ucIICDataNum为要传送数据的个数
; uint IICSendStr(uchar ucIICAdress, uchar *s, uchar ucIICDataNum)
; {
	.dbline 60
; 	g_ucIICAdress = ucIICAdress;
	sts _g_ucIICAdress,R16
	.dbline 61
; 	g_ucIICDataBuf = s;
	sts _g_ucIICDataBuf+1,R19
	sts _g_ucIICDataBuf,R18
	.dbline 62
; 	g_ucIICDataNum = ucIICDataNum;
	ldd R0,y+0
	sts _g_ucIICDataNum,R0
	.dbline 63
; 	g_ucIICEnd = 0;
	clr R2
	sts _g_ucIICEnd,R2
	.dbline 64
; 	START_IIC();
	ldi R24,165
	sts 188,R24
L14:
	.dbline 66
	.dbline 66
L15:
	.dbline 65
; 	while(g_ucIICEnd == 0)
	lds R2,_g_ucIICEnd
	tst R2
	breq L14
	.dbline 68
; 	{}
; 
; 	if(g_ucIICEnd == 1)
	mov R24,R2
	cpi R24,1
	brne L17
	.dbline 69
; 		return(1);
	ldi R16,1
	ldi R17,0
	rjmp L13
L17:
	.dbline 71
; 	else
; 		return(0);
	clr R16
	clr R17
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbsym l ucIICDataNum 0 c
	.dbsym r s 18 pc
	.dbsym r ucIICAdress 16 c
	.dbend

⌨️ 快捷键说明

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