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

📄 iic.s

📁 平缝机的单片机伺服控制系统源代码。本程序为用单片机控制永磁同步电机的低成本方案
💻 S
字号:
	.module IIC.C
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\IIC\IIC.C
	.dbfunc e twi_init _twi_init fV
	.even
_twi_init::
	.dbline -1
	.dbline 32
; /*****************************************************************
;  *  文件名:      IIC.c
;  *  版本号:      
;  *  创作日期:    2005.7.7
;  *  作者:        fengzm
;  *  功能说明:    IIC数据传输
;  *  其它说明:    使用AVR单片机Atmega48, 晶振:8Mhz
;                   注意:发送START信号之后软件不要清零TWCR的"TWSTA"位。
;  *****************************************************************/
;  
; 
; /*****************************************************************
; 
;  *   修改日期:   2005.7.8  
;  *   修改人:     wangzq
;  *   修改原因:   格式调整
; 
;  说明:
;  FirstData = 0; IicData = 待发数据;START_IIC();开始发送数据。
;  FirstData == 0xff  表示发送结束。
; *******************************************************************/
; 
; 
; //包含文件
; #include "IIC.h"
; 
; 
; 
; // TWI initialize
; // bit rate:32,prescal:1,rate:100Khz;
; void twi_init(void)
; {
	.dbline 33
; 	TWCR = 0x00;             //disable twi
	clr R2
	ldi R30,188
	ldi R31,0
	std z+0,R2
	.dbline 34
;     TWBR = 0x20;             //set bit rate equal 32
	ldi R24,32
	ldi R30,184
	std z+0,R24
	.dbline 35
;     TWSR = 0x00;             //set prescale  clock/1
	ldi R30,185
	std z+0,R2
	.dbline 36
;     TWAR = 0x00;             //set slave address
	ldi R30,186
	std z+0,R2
	.dbline 37
;     TWCR = 0x85;             //enable twi
	ldi R24,133
	ldi R30,188
	std z+0,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\niutao\MYDOCU~1\永磁电机\平缝机\新建文件夹\函数库\IIC\IIC.C
	.dbfunc e twi_isr _twi_isr fV
;        IicTwsr -> R16
	.even
_twi_isr::
	st -y,R2
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 42
; }
; 
; #pragma interrupt_handler twi_isr:25
; void twi_isr(void)
; {
	.dbline 45
; 	byte  IicTwsr;              
;   
; 	IicTwsr = TWSR & 0xF8;       
	ldi R30,185
	ldi R31,0
	ldd R16,z+0
	andi R16,248
	.dbline 46
; 	switch (IicTwsr)
	clr R17
	cpi R16,32
	ldi R30,0
	cpc R17,R30
	breq L7
	ldi R24,32
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L16
L15:
	cpi R16,8
	ldi R30,0
	cpc R17,R30
	breq L6
	cpi R16,8
	ldi R30,0
	cpc R17,R30
	brge X1
	rjmp L3
X1:
L17:
	cpi R16,24
	ldi R30,0
	cpc R17,R30
	breq L7
	rjmp L3
L16:
	cpi R16,40
	ldi R30,0
	cpc R17,R30
	breq L10
	cpi R16,40
	ldi R30,0
	cpc R17,R30
	brge X2
	rjmp L3
X2:
L18:
	cpi R16,48
	ldi R30,0
	cpc R17,R30
	breq L10
	rjmp L3
X0:
	.dbline 47
; 	{
L6:
	.dbline 49
; 		case 0x08:
;         TWDR = 0x58;			//发送命令;
	ldi R24,88
	ldi R30,187
	ldi R31,0
	std z+0,R24
	.dbline 50
;         START_IIC();			//开始发送
	ldi R24,133
	ldi R30,188
	std z+0,R24
	.dbline 51
;         g_FirstData = 0;
	clr R2
	sts _g_FirstData,R2
	.dbline 52
;         break;
	rjmp L4
L7:
	.dbline 56
; 	  
; 		case 0x18:
; 		case 0x20:
; 		if (g_FirstData == 0)
	lds R2,_g_FirstData
	tst R2
	breq X3
	rjmp L4
X3:
	.dbline 57
; 		{
	.dbline 58
; 			TWDR=0x00;			//发送命令;
	clr R2
	ldi R30,187
	ldi R31,0
	std z+0,R2
	.dbline 59
;         	START_IIC();		//开始发送
	ldi R24,133
	ldi R30,188
	std z+0,R24
	.dbline 60
;         	g_FirstData = 1;
	ldi R24,1
	sts _g_FirstData,R24
	.dbline 61
; 		}	  
	.dbline 62
; 		break;
	rjmp L4
L10:
	.dbline 66
; 	  
; 		case 0x28:
; 		case 0x30:
;         if (g_FirstData == 2)
	lds R24,_g_FirstData
	cpi R24,2
	brne L11
	.dbline 67
; 	    {
	.dbline 68
; 	    	TWCR |= 0x10;			//发出停止位,停止发送;
	lds R24,188
	ori R24,16
	sts 188,R24
	.dbline 69
; 	        g_FirstData = 0xff;		//发送完成;
	ldi R24,255
	sts _g_FirstData,R24
	.dbline 70
; 		}	  
L11:
	.dbline 71
; 		if (g_FirstData == 1)
	lds R24,_g_FirstData
	cpi R24,1
	brne L4
	.dbline 72
; 		{
	.dbline 73
; 			TWDR = g_IicData;			//发送数据;
	lds R2,_g_IicData
	ldi R30,187
	ldi R31,0
	std z+0,R2
	.dbline 74
;             START_IIC();			//开始发送
	ldi R24,133
	ldi R30,188
	std z+0,R24
	.dbline 75
; 	        g_FirstData = 2; 
	ldi R24,2
	sts _g_FirstData,R24
	.dbline 76
; 	     }
	.dbline 77
; 		 break;  
	rjmp L4
L3:
	.dbline 80
	lds R24,188
	ori R24,16
	sts 188,R24
	.dbline 81
	ldi R24,255
	sts _g_FirstData,R24
	.dbline 82
L4:
	.dbline -2
L2:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r IicTwsr 16 c
	.dbend

⌨️ 快捷键说明

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