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

📄 ps2simplesoft.lst

📁 ATmega16应用例子
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    00A2 E5CF      LDI	R28,0x5F
    00A3 E0D4      LDI	R29,4
    00A4 BFCD      OUT	0x3D,R28
    00A5 BFDE      OUT	0x3E,R29
    00A6 51C0      SUBI	R28,0x10
    00A7 40D0      SBCI	R29,0
    00A8 EA0A      LDI	R16,0xAA
    00A9 8308      STD	Y+0,R16
    00AA 2400      CLR	R0
    00AB E6E4      LDI	R30,0x64
    00AC E0F0      LDI	R31,0
    00AD E010      LDI	R17,0
    00AE 36EB      CPI	R30,0x6B
    00AF 07F1      CPC	R31,R17
    00B0 F011      BEQ	0x00B3
    00B1 9201      ST	R0,Z+
    00B2 CFFB      RJMP	0x00AE
    00B3 8300      STD	Z+0,R16
    00B4 E4E0      LDI	R30,0x40
    00B5 E0F1      LDI	R31,1
    00B6 E6A0      LDI	R26,0x60
    00B7 E0B0      LDI	R27,0
    00B8 E011      LDI	R17,1
    00B9 34E4      CPI	R30,0x44
    00BA 07F1      CPC	R31,R17
    00BB F021      BEQ	0x00C0
    00BC 95C8      LPM
    00BD 9631      ADIW	R30,1
    00BE 920D      ST	R0,X+
    00BF CFF9      RJMP	0x00B9
    00C0 940E032B  CALL	_main
_exit:
    00C2 CFFF      RJMP	_exit
_speaData:
  y                    --> Y+4
  j                    --> Y+0
  i                    --> R10
  len                  --> R12
  dat                  --> Y+16
    00C3 940E033A  CALL	push_arg4
    00C5 940E0405  CALL	push_gset4
    00C7 9728      SBIW	R28,0x8
    00C8 88CC      LDD	R12,Y+20
FILE: D:\ICC_H\Software.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                        
(0004) 目    的:   建立AVR的软件提取库,增加各类补丁,方便系统程序移植
(0005) 	
(0006) 目标系统:   基于AVR单片机
(0007) 		                                                                
(0008) 应用软件:   ICCAVR
(0009) 		                                                                
(0010) 版    本:   Version 1.0                                                       
(0011) 		                                                                
(0012) 圆版时间:   2005-06-25
(0013) 	
(0014) 开发人员:   SEE(中文名不告诉你~怕你骂我)
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 	
(0018) 	深 圳 微 雪 电 子 保 留 所 有 的 版 权     
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) 
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030) 
(0031) ----------------------------------------------------------------------	
(0032) 对外变量说明:
(0033)     
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)    
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039) 
(0040) #ifndef Software_H
(0041) #define Software_H
(0042) 
(0043) #include <math.h>
(0044) #include <string.h>
(0045) 
(0046) /* 兼容一般程序员的常用写法 */
(0047) typedef unsigned char	uchar;
(0048) typedef unsigned int	uint;
(0049) typedef unsigned long	ulong;
(0050) typedef signed char		schar;
(0051) typedef signed int		sint;
(0052) typedef signed long		slong;
(0053) 
(0054) /* 为方便移植,建议使用下面写法 */
(0055) typedef unsigned char	bool;
(0056) typedef unsigned char	uint8;
(0057) typedef unsigned int	uint16;
(0058) typedef unsigned long   uint32;
(0059) typedef signed  char	sint8;
(0060) typedef signed	int		sint16;
(0061) typedef signed	long	sint32;
(0062) typedef signed  char	int8;
(0063) typedef signed  int		int16;
(0064) typedef signed  long	int32;
(0065) 
(0066) /* 下面写法一般不推荐 */
(0067) //typedef unsigned char ubyte;
(0068) //typedef unsigned int	uword;
(0069) //typedef unsigned long udword;
(0070) //typedef signed   char	sbyte;
(0071) //typedef signed   int	sword;
(0072) //typedef signed   long	sdword;
(0073) 
(0074) /* 一般程序定义的默认值 */
(0075) //#define NULL			0
(0076) //#define EOF			-1
(0077) //#define TRUE   		1
(0078) //#define FALSE  		0
(0079) //#define YES   		1
(0080) //#define NO  			0
(0081) //#define ON			1
(0082) //#define OFF			0
(0083) //#define ENABLE   		1
(0084) //#define DISABLE		0
(0085) //#define CRR			1
(0086) //#define ERR			0
(0087) //#define RIGHT			1
(0088) //#define WRONG			0
(0089) //#define SUCCESS		1
(0090) //#define FAILURE		0
(0091) //#define PI			3.1415926	//3.1415926535897932
(0092) 
(0093) /* 如果你手头上的RAM实在很紧,不如尝试下面的define~ */
(0094) //#define _CALLOC(a)		( (a *)calloc(n,sizeof(a)) )
(0095) //#define _MALLOC(a)		( (a *)malloc(sizeof(a)) )
(0096) //#define _MIN(a,b)			( (a) < (b) ? (a) : (b) )
(0097) //#define _MAX(a,b)			( (a) > (b) ? (a) : (b) )
(0098) //#define _EXCHANGE(a,b)	{ int t; t=a; a=b; b=t; }
(0099) //#define _TOLOWER(c)		( (c)+32 )
(0100) //#define _TOUPPER(c)		( (c)-32 )
(0101) 
(0102) //#ifndef BIT
(0103) //#define BIT(x)	( 1<<(x) )
(0104) //#endif
(0105) 
(0106) /*--------------------------------------------------------------------
(0107) 函数全称:数据拆字
(0108) 函数功能:自己看~
(0109) 注意事项:D<=999999,C<=6
(0110) 提示说明:调用speaData(12,2),得到dataElem[0]=2,dataElem[1]=1
(0111) 输    入:
(0112) 返    回:无
(0113) --------------------------------------------------------------------*/
(0114) uint8 dataElem[6];
(0115) void speaData(uint32 dat,sint8 len)
(0116) {
(0117)     uint8 i;
(0118)     uint32 j,y;
(0119)     for(i=0,j=1;i<len;i++)
    00C9 24AA      CLR	R10
    00CA E041      LDI	R20,1
    00CB E050      LDI	R21,0
    00CC E060      LDI	R22,0
    00CD E070      LDI	R23,0
    00CE 01FE      MOVW	R30,R28
    00CF 8340      STD	Z+0,R20
    00D0 8351      STD	Z+1,R21
    00D1 8362      STD	Z+2,R22
    00D2 8373      STD	Z+3,R23
    00D3 C046      RJMP	0x011A
(0120)     {
(0121)         y=dat/j;
    00D4 01FE      MOVW	R30,R28
    00D5 8020      LDD	R2,Z+0
    00D6 8031      LDD	R3,Z+1
    00D7 8042      LDD	R4,Z+2
    00D8 8053      LDD	R5,Z+3
    00D9 01FE      MOVW	R30,R28
    00DA 8860      LDD	R6,Z+16
    00DB 8871      LDD	R7,Z+17
    00DC 8882      LDD	R8,Z+18
    00DD 8893      LDD	R9,Z+19
    00DE 925A      ST	R5,-Y
    00DF 924A      ST	R4,-Y
    00E0 923A      ST	R3,-Y
    00E1 922A      ST	R2,-Y
    00E2 0183      MOVW	R16,R6
    00E3 0194      MOVW	R18,R8
    00E4 940E033F  CALL	div32u
    00E6 01FE      MOVW	R30,R28
    00E7 8304      STD	Z+4,R16
    00E8 8315      STD	Z+5,R17
    00E9 8326      STD	Z+6,R18
    00EA 8337      STD	Z+7,R19
(0122)         dataElem[i]=y%10;
    00EB E04A      LDI	R20,0xA
    00EC E050      LDI	R21,0
    00ED E060      LDI	R22,0
    00EE E070      LDI	R23,0
    00EF 01FE      MOVW	R30,R28
    00F0 8024      LDD	R2,Z+4
    00F1 8035      LDD	R3,Z+5
    00F2 8046      LDD	R4,Z+6
    00F3 8057      LDD	R5,Z+7
    00F4 937A      ST	R23,-Y
    00F5 936A      ST	R22,-Y
    00F6 935A      ST	R21,-Y
    00F7 934A      ST	R20,-Y
    00F8 0181      MOVW	R16,R2
    00F9 0192      MOVW	R18,R4
    00FA 940E0341  CALL	mod32u
    00FC E685      LDI	R24,0x65
    00FD E090      LDI	R25,0
    00FE 2DEA      MOV	R30,R10
    00FF 27FF      CLR	R31
    0100 0FE8      ADD	R30,R24
    0101 1FF9      ADC	R31,R25
    0102 8300      STD	Z+0,R16
(0123)         j*=10;
    0103 01FE      MOVW	R30,R28
    0104 8020      LDD	R2,Z+0
    0105 8031      LDD	R3,Z+1
    0106 8042      LDD	R4,Z+2
    0107 8053      LDD	R5,Z+3
    0108 E04A      LDI	R20,0xA
    0109 E050      LDI	R21,0
    010A E060      LDI	R22,0
    010B E070      LDI	R23,0
    010C 925A      ST	R5,-Y
    010D 924A      ST	R4,-Y
    010E 923A      ST	R3,-Y
    010F 922A      ST	R2,-Y
    0110 018A      MOVW	R16,R20
    0111 019B      MOVW	R18,R22
    0112 940E03B0  CALL	empy32s
    0114 01FE      MOVW	R30,R28
    0115 8300      STD	Z+0,R16
    0116 8311      STD	Z+1,R17
    0117 8322      STD	Z+2,R18
    0118 8333      STD	Z+3,R19
    0119 94A3      INC	R10
    011A 14AC      CP	R10,R12
    011B F408      BCC	0x011D
    011C CFB7      RJMP	0x00D4
(0124)     }
(0125) }
    011D 9628      ADIW	R28,0x8
    011E 940E03E3  CALL	pop_gset4
    0120 9624      ADIW	R28,4
    0121 9508      RET
FILE: D:\ICC_H\I2C.H
(0001) /*********************************************************************
(0002) 	微 雪 电 子   WaveShare   http://www.waveShare.net            	
(0003) 		                                                        
(0004) 目    的:   建立I2C操作库
(0005) 	
(0006) 目标系统:   基于AVR单片机
(0007) 		                                                                
(0008) 应用软件:   ICCAVR
(0009) 		                                                                
(0010) 版    本:   Version 1.0                                                          
(0011) 		                                                                
(0012) 圆版时间:   2005-06-25
(0013) 	
(0014) 开发人员:   SEE(中文名不告诉你~怕你骂我)
(0015) 
(0016) 说    明:   若用于商业用途,请保留此段文字或注明代码来源
(0017) 	
(0018) 	深 圳 微 雪 电 子 保 留 所 有 的 版 权     
(0019) *********************************************************************/
(0020) 
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) 
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030) 
(0031) ----------------------------------------------------------------------	
(0032) 对外变量说明:
(0033) 
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036) 
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039) 
(0040) #ifndef I2C_H
(0041) #define I2C_H
(0042) 
(0043) /* TWSR values (not bits) */
(0044) /* Master */
(0045) #define I2C_START			0x08
(0046) #define I2C_RESTART			0x10
(0047) 
(0048) /* Master Transmitter */
(0049) #define I2C_MT_SLA_ACK		0x18
(0050) #define I2C_MT_SLA_NACK		0x20
(0051) #define I2C_MT_DATA_ACK		0x28
(0052) #define I2C_MT_DATA_NACK	0x30
(0053) #define I2C_MT_ARB_LOST		0x38
(0054) 
(0055) /* Master Receiver */
(0056) #define I2C_MR_ARB_LOST		0x38
(0057) #define I2C_MR_SLA_ACK		0x40
(0058) #define I2C_MR_SLA_NACK		0x48
(0059) #define I2C_MR_DATA_ACK		0x50
(0060) #define I2C_MR_DATA_NACK	0x58
(0061) 
(0062) /* Slave Transmitter */
(0063) #define I2C_ST_SLA_ACK			0xA8
(0064) #define I2C_ST_ARB_LOST_SLA_ACK 0xB0
(0065) #define I2C_ST_DATA_ACK			0xB8
(0066) #define I2C_ST_DATA_NACK		0xC0
(0067) #define I2C_ST_LAST_DATA		0xC8
(0068) 
(0069) /* Slave Receiver */
(0070) #define I2C_SR_SLA_ACK				0x60
(0071) #define I2C_SR_ARB_LOST_SLA_ACK		0x68
(0072) #define I2C_SR_GCALL_ACK			0x70
(0073) #define I2C_SR_ARB_LOST_GCALL_ACK	0x78
(0074) #define I2C_SR_DATA_ACK				0x80
(0075) #define I2C_SR_DATA_NACK			0x88
(0076) #define I2C_SR_GCALL_DATA_ACK		0x90
(0077) #define I2C_SR_GCALL_DATA_NACK		0x98
(0078) #define I2C_SR_STOP					0xA0
(0079) 
(0080) /* Misc */
(0081) #define I2C_NO_INFO			0xF8
(0082) #define I2C_BUS_ERROR		0x00
(0083) 
(0084) /*
(0085)  * The lower 3 bits of TWSR are reserved on the ATmega163.
(0086)  * The 2 LSB carry the prescaler bits on the newer ATmegas.
(0087)  */
(0088) #define I2C_STATUS_MASK	(_BV(TWS7)|_BV(TWS6)|_BV(TWS5)|_BV(TWS4)|_BV(TWS3))
(0089) #define I2C_STATUS		(TWSR & I2C_STATUS_MASK)
(0090) 
(0091) /*
(0092)  * R/~W bit in SLA+R/W address field.
(0093)  */
(0094) #define I2C_READ		1
(0095) #define I2C_WRITE		0
(0096) 
(0097) #define I2CStart()    	(TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
(0098) #define I2CStop()     	(TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
(0099) #define I2CWaitAck()	{while(!(TWCR&(1<<TWINT)));}
(0100) #define I2CChkAck() 	(TWSR&0xf8)					//check ack
(0101) #define I2CSendAck()	(TWCR|=(1<<TWEA))
(0102) #define I2CSendNoAck()	(TWCR&=~(1<<TWEA))
(0103) #define I2CSendByte(x)	{TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 
(0104) #define I2CRcvNckByte()	(TWCR=(1<<TWINT)|(1<<TWEN))
(0105) #define I2CRcvAckByte()	(TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))
(0106) 
(0107) /* For Program */
(0108) #define I2C_Stop()		I2CStop()
(0109) #define I2C_SendAck()	I2CSendAck()
(0110) #define I2C_SendNoAck() I2CSendNoAck()
(0111) #define I2C_WaitAck()	I2CWaitAck()
(0112) 
(0113) /* I2C Config */
(0114) #define I2C_ERR			0
(0115) #define I2C_CRR			1
(0116) 
(0117) /*--------------------------------------------------------------------
(0118) 函数名称:I2C Start
(0119) 函数功能:
(0120) 注意事项:
(0121) 提示说明:
(0122) 输    入:
(0123) 返    回:
(0124) --------------------------------------------------------------------*/
(0125) bool I2C_Start()					
(0126) {
(0127) 	I2CStart();						
_I2C_Start:
    0122 EA84      LDI	R24,0xA4
    0123 BF86      OUT	0x36,R24
(0128) 	I2CWaitAck();
    0124 B626      IN	R2,0x36
    0125 FE27      SBRS	R2,7
    0126 CFFD      RJMP	0x0124
(0129) 	if( I2CChkAck()!=I2C_START ) 
    0127 B181      IN	R24,0x01
    0128 7F88      ANDI	R24,0xF8
    0129 3088      CPI	R24,0x8
    012A F011      BEQ	0x012D
(0130) 		return I2C_ERR;
    012B 2700      CLR	R16
    012C C001      RJMP	0x012E
(0131) 	return I2C_CRR;
    012D E001      LDI	R16,1
    012E 9508      RET
(0132) }
(0133) /*--------------------------------------------------------------------
(0134) 函数名称:I2C ReStart
(0135) 函数功能:
(0136) 注意事项:
(0137) 提示说明:
(0138) 输    入:
(0139) 返    回:
(0140) --------------------------------------------------------------------*/
(0141) bool I2C_Restart()					
(0142) {
(0143) 	I2CStart();						
_I2C_Restart:
    012F EA84      LDI	R24,0xA4
    0130 BF86      OUT	0x36,R24
(0144) 	I2CWaitAck();
    0131 B626      IN	R2,0x36
    0132 FE27      SBRS	R2,7
    0133 CFFD      RJMP	0x0131
(0145) 	if( I2CChkAck()!=I2C_RESTART ) 
    0134 B181      IN	R24,0x01
    0135 7F88      ANDI	R24,0xF8
    0136 3180      CPI	R24,0x10
    0137 F011      BEQ	0x013A
(0146) 		return I2C_ERR;
    0138 2700      CLR	R16
    0139 C001      RJMP	0x013B
(0147) 	return I2C_CRR;
    013A E001      LDI	R16,1
    013B 9508      RET
(0148) }
(0149) /*--------------------------------------------------------------------
(0150) 函数名称:发送 7位 器件写地址: XXXX XXX0
(0151) 函数功能:
(0152) 注意事项:
(0153) 提示说明:
(0154) 输    入:
(0155) 返    回:
(0156) --------------------------------------------------------------------*/

⌨️ 快捷键说明

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