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

📄 led.lst

📁 AVR程序
💻 LST
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E008B  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
_ChangeIntToHex:
  dec                  --> R20
    004B 940E00BF  CALL	push_gset1
    004D 01A8      MOVW	R20,R16
FILE: F:\job\M16学习板\LED显示程序(实验一)\..\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	bit;
(0057) typedef unsigned char	uint8;
(0058) typedef unsigned int	uint16;
(0059) typedef unsigned long   uint32;
(0060) typedef signed  char	sint8;
(0061) typedef signed	int		sint16;
(0062) typedef signed	long	sint32;
(0063) typedef signed  char	int8;
(0064) typedef signed  int		int16;
(0065) typedef signed  long	int32;
(0066) //typedef const			code;
(0067) 
(0068) /* 一般程序定义的默认值 */
(0069) #define NULL			0
(0070) #define EOF			   -1
(0071) #define TRUE   			1
(0072) #define FALSE  			0
(0073) #define ON				1
(0074) #define OFF				0
(0075) #define ENABLE   		1
(0076) #define DISABLE			0
(0077) #define CRR				1
(0078) #define ERR				0
(0079) #define RIGHT			1
(0080) #define WRONG			0
(0081) #define SUCCESS			1
(0082) #define FAILURE			0
(0083) //#define PI			3.1415926	//3.1415926535897932
(0084) 
(0085) /* 如果你手头上的RAM实在很紧,不如尝试下面的define~ */
(0086) //#define _CALLOC(a)		( (a *)calloc(n,sizeof(a)) )
(0087) //#define _MALLOC(a)		( (a *)malloc(sizeof(a)) )
(0088) //#define _MIN(a,b)			( (a) < (b) ? (a) : (b) )
(0089) //#define _MAX(a,b)			( (a) > (b) ? (a) : (b) )
(0090) //#define _EXCHANGE(a,b)	{ int t; t=a; a=b; b=t; }
(0091) //#define _TOLOWER(c)		( (c)+32 )
(0092) //#define _TOUPPER(c)		( (c)-32 )
(0093) 
(0094) //#ifndef BIT
(0095) //#define BIT(x)	( 1<<(x) )
(0096) //#endif
(0097) 
(0098) /*--------------------------------------------------------------------
(0099) 函数全称:数据拆字
(0100) 函数功能:自己看~
(0101) 注意事项:D<=999999,C<=6
(0102) 提示说明:调用speaData(12,2),得到dataElem[0]=2,dataElem[1]=1
(0103) 输    入:
(0104) 返    回:无
(0105) --------------------------------------------------------------------
(0106) uint8 dataElem[6];
(0107) void speaData(uint32 dat,sint8 len)
(0108) {
(0109)     uint8 i;
(0110)     uint32 j,y;
(0111)     for(i=0,j=1;i<len;i++)
(0112)     {
(0113)         y=dat/j;
(0114)         dataElem[i]=y%10;
(0115)         j*=10;
(0116)     }
(0117) }
(0118) /*--------------------------------------------------------------------
(0119) 函数全称:十进制强制转换为十六进制
(0120) 函数功能:
(0121) 注意事项:
(0122) 提示说明:调用changeIntToHex(33),return 0x33
(0123) 输    入:
(0124) 返    回:
(0125) --------------------------------------------------------------------*/
(0126) #define changeIntToHex(dec)		( ( ((dec)/10) <<4 ) + ((dec)%10) )
(0127) /*--------------------------------------------------------------------
(0128) 函数全称:十进制强制转换为十六进制
(0129) 函数功能:
(0130) 注意事项:
(0131) 提示说明:调用changeIntToHex(33),return 0x33
(0132) 输    入:
(0133) 返    回:
(0134) --------------------------------------------------------------------*/
(0135) void ChangeIntToHex( uchar *dec)		
(0136) {
(0137)  	*dec = (((*dec)/10) <<4 )|((*dec)%10) ;
    004E 01FA      MOVW	R30,R20
    004F 8020      LDD	R2,Z+0
    0050 2433      CLR	R3
    0051 E01A      LDI	R17,0xA
    0052 2D02      MOV	R16,R2
    0053 940E009F  CALL	mod8u
    0055 2E40      MOV	R4,R16
    0056 E01A      LDI	R17,0xA
    0057 2D02      MOV	R16,R2
    0058 940E00A1  CALL	div8u
    005A 2F80      MOV	R24,R16
    005B 708F      ANDI	R24,0xF
    005C 9582      SWAP	R24
    005D 2984      OR	R24,R4
    005E 01FA      MOVW	R30,R20
    005F 8380      STD	Z+0,R24
    0060 940E00C2  CALL	pop_gset1
    0062 9508      RET
(0138) }
(0139) /*--------------------------------------------------------------------
(0140) 函数全称:十进制化为十六进制,并以十进制格式返回
(0141) 函数功能:
(0142) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0143) 提示说明:调用converseIntToHex(33),return 21
(0144) 输    入:
(0145) 返    回:
(0146) --------------------------------------------------------------------/
(0147) #define converseIntToHex(dec)	( ( ((dec)>>4) *10 ) + ((dec)%16) )
(0148) /*--------------------------------------------------------------------
(0149) 函数全称:十六进制强制转换为十进制
(0150) 函数功能:
(0151) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0152) 提示说明:调用changeHexToInt(0x33),return 33
(0153) 输    入:
(0154) 返    回:
(0155) --------------------------------------------------------------------*/
(0156) #define changeHexToInt(hex)		( ( ((hex)>>4) *10 ) + ((hex)%16) )
(0157) /*--------------------------------------------------------------------
(0158) 函数全称:十六进制强制转换为十进制
(0159) 函数功能:
(0160) 注意事项:传参必须为 unsigned 类型,否则移位结果可能吓你一跳
(0161) 提示说明:调用changeHexToInt(0x33),return 33
(0162) 输    入:
(0163) 返    回:
(0164) --------------------------------------------------------------------*/
(0165) void ChangeHexToInt(uchar *hex)
(0166) {
(0167)  	*hex = (((*hex)>>4) *10 ) + ((*hex)&0x0f);
_ChangeHexToInt:
  hex                  --> R16
    0063 01F8      MOVW	R30,R16
    0064 8020      LDD	R2,Z+0
    0065 2433      CLR	R3
    0066 2D82      MOV	R24,R2
    0067 9582      SWAP	R24
    0068 708F      ANDI	R24,0xF
    0069 E09A      LDI	R25,0xA
    006A 9F98      MUL	R25,R24
    006B 2D82      MOV	R24,R2
    006C 708F      ANDI	R24,0xF
    006D 2C20      MOV	R2,R0
    006E 0E28      ADD	R2,R24
    006F 8220      STD	Z+0,R2
    0070 9508      RET
(0168) }		
(0169) /*--------------------------------------------------------------------
(0170) 函数全称:十六进制化为十进制,,并以十六进制格式返回
(0171) 函数功能:
(0172) 注意事项:
(0173) 提示说明:调用converseHexToInt(0x33),return 0x51
(0174) 输    入:
(0175) 返    回:
(0176) --------------------------------------------------------------------*/
(0177) #define converseHexToInt(hex)	( ( ((hex)/10) <<4 ) + ((hex)%10) )
(0178) 
(0179) void Delay(void)
(0180) {
(0181)  	uchar i;
(0182) 	i = 200;
_Delay:
  i                    --> R16
    0071 EC08      LDI	R16,0xC8
(0183) 	while(i--);
    0072 2E20      MOV	R2,R16
    0073 2433      CLR	R3
    0074 5001      SUBI	R16,1
    0075 2022      TST	R2
    0076 F7D9      BNE	0x0072
    0077 9508      RET
_DelayMs:
  j                    --> R20
  i                    --> R16
    0078 940E00BF  CALL	push_gset1
FILE: F:\job\M16学习板\LED显示程序(实验一)\LEDDisp.c
(0001) /*******************************************************************
(0002)                       实验一
(0003) 实验名称: LED驱动程序实验
(0004) 实验目的: 初步学习对单片机端口的操作,加深对AVR单片机端口寄存器的理解
(0005) 实验现象: LED数码管从左向右依次亮,然后依次灭
(0006) 环	  境: ICCAVR6.31A
(0007) 设 计 者: shinea8868
(0008) 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
(0009) 	  	  作商业用途请保留本段文字
(0010) 完成日期: 2007年4月9日
(0011) *******************************************************************/
(0012) 
(0013) 
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) #include "..\ICC_H\SOFTWARE.h"
(0017) /*-----------------------------------------------------------------
(0018)     延时程序计算方法
(0019) 	计数个数j = 延时时间/6*晶振频率 - 1
(0020) -----------------------------------------------------------------*/
(0021) void DelayMs(uint i)
(0022) {
    007A C006      RJMP	0x0081
(0023)  	uchar j;
(0024) 	while(i--)
(0025) 	{
(0026) 	 	j = 167;//1mhz 1ms延时
    007B EA47      LDI	R20,0xA7
(0027) 	    while(j--);
    007C 2E24      MOV	R2,R20
    007D 2433      CLR	R3
    007E 5041      SUBI	R20,1
    007F 2022      TST	R2
    0080 F7D9      BNE	0x007C
    0081 0118      MOVW	R2,R16
    0082 5001      SUBI	R16,1
    0083 4010      SBCI	R17,0
    0084 2022      TST	R2
    0085 F7A9      BNE	0x007B
    0086 2033      TST	R3
    0087 F799      BNE	0x007B
    0088 940E00C2  CALL	pop_gset1
    008A 9508      RET
(0028) 	}
(0029) }
(0030) /*-----------------------------------------------------------------
(0031) 函数名称: void main(void)
(0032) 函数功能: 
(0033) 参    数: 
(0034) 返 回 值: 无
(0035) -----------------------------------------------------------------*/
(0036) void main(void)
(0037) {
_main:
  i                    --> R20
    008B C011      RJMP	0x009D
(0038)  	uchar i;
(0039) 	while(1)
(0040) 	{
(0041) 	 	for( i = 0; i < 8; i++)
    008C 2744      CLR	R20
    008D C00D      RJMP	0x009B
(0042) 		{
(0043) 	 	 	DelayMs(1000);
    008E EE08      LDI	R16,0xE8
    008F E013      LDI	R17,3
    0090 DFE7      RCALL	_DelayMs
(0044) 			DDRB = 0xff;
    0091 EF8F      LDI	R24,0xFF
    0092 BB87      OUT	0x17,R24
(0045) 			PORTB ^= (1<<i);//PORTB的第i位取反
FILE: <library>
    0093 E001      LDI	R16,1
    0094 2F14      MOV	R17,R20
    0095 940E00D6  CALL	lsl8
    0097 B228      IN	R2,0x18
    0098 2620      EOR	R2,R16
    0099 BA28      OUT	0x18,R2
    009A 9543      INC	R20
    009B 3048      CPI	R20,0x8
    009C F388      BCS	0x008E
    009D CFEE      RJMP	0x008C
    009E 9508      RET
mod8u:
    009F 9468      BSET	6
    00A0 C001      RJMP	xdiv8u
div8u:
    00A1 94E8      BCLR	6
xdiv8u:
    00A2 932A      ST	R18,-Y
    00A3 92FA      ST	R15,-Y
    00A4 92EA      ST	R14,-Y
    00A5 24FF      CLR	R15
    00A6 24EE      CLR	R14
    00A7 E120      LDI	R18,0x10
    00A8 0F00      LSL	R16
    00A9 1CFF      ROL	R15
    00AA 1CEE      ROL	R14
    00AB 16E1      CP	R14,R17
    00AC F010      BCS	0x00AF
    00AD 1AE1      SUB	R14,R17
    00AE 9503      INC	R16
    00AF 952A      DEC	R18
    00B0 F7B9      BNE	0x00A8
    00B1 F40E      BRTC	0x00B3
    00B2 2D0E      MOV	R16,R14
    00B3 90E9      LD	R14,Y+
    00B4 90F9      LD	R15,Y+
    00B5 9129      LD	R18,Y+
    00B6 9508      RET
push_gset5:
    00B7 92FA      ST	R15,-Y
    00B8 92EA      ST	R14,-Y
push_gset4:
    00B9 92DA      ST	R13,-Y
    00BA 92CA      ST	R12,-Y
push_gset3:
    00BB 92BA      ST	R11,-Y
    00BC 92AA      ST	R10,-Y
push_gset2:
    00BD 937A      ST	R23,-Y
    00BE 936A      ST	R22,-Y
push_gset1:
    00BF 935A      ST	R21,-Y
    00C0 934A      ST	R20,-Y
    00C1 9508      RET
pop_gset1:
    00C2 E0E1      LDI	R30,1
pop:
    00C3 9149      LD	R20,Y+
    00C4 9159      LD	R21,Y+
    00C5 FDE0      SBRC	R30,0
    00C6 9508      RET
    00C7 9169      LD	R22,Y+
    00C8 9179      LD	R23,Y+
    00C9 FDE1      SBRC	R30,1
    00CA 9508      RET
    00CB 90A9      LD	R10,Y+
    00CC 90B9      LD	R11,Y+
    00CD FDE2      SBRC	R30,2
    00CE 9508      RET
    00CF 90C9      LD	R12,Y+
    00D0 90D9      LD	R13,Y+
    00D1 FDE3      SBRC	R30,3
    00D2 9508      RET
    00D3 90E9      LD	R14,Y+
    00D4 90F9      LD	R15,Y+
    00D5 9508      RET
lsl8:
    00D6 2311      TST	R17
    00D7 F019      BEQ	0x00DB
    00D8 0F00      LSL	R16
    00D9 951A      DEC	R17
    00DA CFFB      RJMP	lsl8
    00DB 9508      RET

⌨️ 快捷键说明

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