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

📄 m16t1.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0030 E5CF      LDI	R28,0x5F
    0031 E0D4      LDI	R29,4
    0032 BFCD      OUT	0x3D,R28
    0033 BFDE      OUT	0x3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	Y+0,R16
    0038 2400      CLR	R0
    0039 E6EB      LDI	R30,0x6B
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36EB      CPI	R30,0x6B
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	Z+0,R16
    0042 E5E4      LDI	R30,0x54
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 35EF      CPI	R30,0x5F
    0048 07F1      CPC	R31,R17
    0049 F021      BEQ	0x004E
    004A 95C8      LPM
    004B 9631      ADIW	R30,1
    004C 920D      ST	R0,X+
    004D CFF9      RJMP	0x0047
    004E 940E00D2  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
_ChangeIntToHex:
  dec                  --> R20
    0051 940E0181  CALL	push_gset1
    0053 01A8      MOVW	R20,R16
FILE: F:\job\M16学习板\定时器中断实验(实验十一)\..\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) ;
    0054 01FA      MOVW	R30,R20
    0055 8020      LDD	R2,Z+0
    0056 2433      CLR	R3
    0057 E01A      LDI	R17,0xA
    0058 2D02      MOV	R16,R2
    0059 940E0161  CALL	mod8u
    005B 2E40      MOV	R4,R16
    005C E01A      LDI	R17,0xA
    005D 2D02      MOV	R16,R2
    005E 940E0163  CALL	div8u
    0060 2F80      MOV	R24,R16
    0061 708F      ANDI	R24,0xF
    0062 9582      SWAP	R24
    0063 2984      OR	R24,R4
    0064 01FA      MOVW	R30,R20
    0065 8380      STD	Z+0,R24
    0066 940E0184  CALL	pop_gset1
    0068 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
    0069 01F8      MOVW	R30,R16
    006A 8020      LDD	R2,Z+0
    006B 2433      CLR	R3
    006C 2D82      MOV	R24,R2
    006D 9582      SWAP	R24
    006E 708F      ANDI	R24,0xF
    006F E09A      LDI	R25,0xA
    0070 9F98      MUL	R25,R24
    0071 2D82      MOV	R24,R2
    0072 708F      ANDI	R24,0xF
    0073 2C20      MOV	R2,R0
    0074 0E28      ADD	R2,R24
    0075 8220      STD	Z+0,R2
    0076 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
    0077 EC08      LDI	R16,0xC8
(0183) 	while(i--);
    0078 2E20      MOV	R2,R16
    0079 2433      CLR	R3
    007A 5001      SUBI	R16,1
    007B 2022      TST	R2
    007C F7D9      BNE	0x0078
    007D 9508      RET
_DelayMs:
  j                    --> R20
  i                    --> R16
    007E 940E0181  CALL	push_gset1
FILE: F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
(0001) /*******************************************************************
(0002)                       实验十一
(0003) 实验名称: 定时器1中断实验
(0004) 实验目的: 学习AVR单片机的定时器功能
(0005) 实验现象: 定时器每秒加一,0到255循环,通过数码管显示计数值
(0006) 环	  境: ICCAVR6.31A
(0007) 设 计 者: shinea8868
(0008) 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
(0009) 	  	  作商业用途请保留本段文字
(0010) 完成日期: 2007年4月10日
(0011) *******************************************************************/
(0012) 
(0013) #include <iom16v.h>
(0014) #include <macros.h>
(0015) #include "..\ICC_H\SOFTWARE.h"
(0016) 
(0017) uchar TimerCnt = 0;						//定时器1计数个数
(0018) uchar disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
(0019) 
(0020) /*-----------------------------------------------------------------
(0021)     延时程序计算方法
(0022) 	计数个数j = 延时时间/6*晶振频率 - 1
(0023) 函数名称: void DelayMs(uchar i)
(0024) 函数功能: 毫秒延时
(0025) 参    数: 
(0026) 返 回 值: 无
(0027) -----------------------------------------------------------------*/
(0028) void DelayMs(uchar i)
(0029) {
    0080 C006      RJMP	0x0087
(0030)  	uchar j;
(0031) 	while(i--)
(0032) 	{
(0033) 	 	j = 167;//1mhz 1ms延时
    0081 EA47      LDI	R20,0xA7
(0034) 	    while(j--);
    0082 2E24      MOV	R2,R20
    0083 2433      CLR	R3
    0084 5041      SUBI	R20,1
    0085 2022      TST	R2
    0086 F7D9      BNE	0x0082
    0087 2E20      MOV	R2,R16
    0088 2433      CLR	R3
    0089 5001      SUBI	R16,1
    008A 2022      TST	R2
    008B F7A9      BNE	0x0081
    008C 940E0184  CALL	pop_gset1
    008E 9508      RET
(0035) 	}
(0036) }
(0037) 
(0038) /*-----------------------------------------------------------------
(0039) 函数名称: void SPIMasterInit(void) 
(0040) 函数功能: SPI初始化为主机
(0041) 参    数: 
(0042) 返 回 值: 无
(0043) -----------------------------------------------------------------*/
(0044) void SPIMasterInit(void) 
(0045) {
(0046) // 	MOSI,MISO,SCK等都需要设计的数据方向定义
(0047) 	DDRB |= (1<<PB5) | (1<<PB7);		// 设置MOSI 和SCK 为输出,其他为输入 M16
_SPIMasterInit:
    008F B387      IN	R24,0x17
    0090 6A80      ORI	R24,0xA0
    0091 BB87      OUT	0x17,R24
(0048) //	DDRB |= (1<<PB2) | (1<<PB3);		// 设置MOSI 和SCK 为输出,其他为输入 M64
(0049) //	SPI控制寄存器
(0050) //	SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
(0051) //	SPIE  中断使能  SPE SPI使能 DORD 数据次序 1为LSB首先发送,0为MSB首先发送
(0052) //	MSTR  主从选择 1为主,0为从MSTR置位时选择主机模式,否则为从机.如果MSTR为"1",
(0053) //  SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位.用户必须重新设置
(0054) //	MSTR 进入主机模式。
(0055) //	CPOL: 时钟极性见ATMEGA16L(中文)P130
(0056) //	CPHA: 时钟相位
(0057) //	SPR1, SPR0: SPI 时钟速率选择1 与0  SPR1 和SPR0 对从机没有影响。
(0058) //  使能SPI 主机模式,设置时钟速率为fck/128 */
(0059) 	SPCR  = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0);		
    0092 E583      LDI	R24,0x53
    0093 B98D      OUT	0x0D,R24
    0094 9508      RET
(0060) }
(0061) /*-----------------------------------------------------------------
(0062) 函数名称: void SPIMasterTransmit(unsigned char i) 
(0063) 函数功能: SPI数据发送
(0064) 参    数: 
(0065) 返 回 值: 无
(0066) -----------------------------------------------------------------*/
(0067) void SPIMasterTransmit(uchar TranData) 
(0068) {	
(0069) 	SPDR = TranData;					// 启动数据传输 
_SPIMasterTransmit:
  TranData             --> R16
    0095 B90F      OUT	0x0F,R16
(0070) 	while (!(SPSR & (1<<SPIF)));		// 等待传输结束 
    0096 9B77      SBIS	0x0E,7
    0097 CFFE      RJMP	0x0096
    0098 9508      RET
_SPI595Out:

⌨️ 快捷键说明

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