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

📄 lesson1.lst

📁 一个AVR单片机的示例程序。共初学者学习使用。。。。。。。。。。。。。。。。。。。。
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    0030 E5CF      LDI	R28,0x5F
    0031 E0D4      LDI	R29,4
    0032 BFCD      OUT	P3D,R28
    0033 BFDE      OUT	P3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	R16,0+Y
    0038 2400      CLR	R0
    0039 E6E0      LDI	R30,0x60
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36E0      CPI	R30,0x60
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	R16,0+Z
    0042 E6E0      LDI	R30,0x60
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 36E0      CPI	R30,0x60
    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 940E00FE  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
_Delayus:
  i                    --> R20
  US                   --> R22
    0051 D0F0      RCALL	push_gset2
    0052 2F60      MOV	R22,R16
    0053 2F71      MOV	R23,R17
FILE: C:\icc\include\AVR_PQ1A.h
(0001) /*******************************************
(0002)   文件:AVR_PQ1A.H
(0003)   功能:定义一些AVR_PQ1A开发板上应用程序用到的常量
(0004) /******************************************/
(0005) 
(0006) #include <iom16v.h>			//包含型号头文件
(0007) #include <macros.h>			//包含"位"操作头文件
(0008) 
(0009) /******************数据类型宏定义******************/
(0010) #define uchar unsigned char
(0011) #define uint unsigned int
(0012) 
(0013) /******************数码管和LED常量******************/
(0014) #define LEDLK PA2	//LED锁存器控制端
(0015) #define SEGLK PA3	//数码管段选锁存器控制端
(0016) #define BITLK PA4	//数码管位选锁存器控制端
(0017) 
(0018) #define TRUE 1
(0019) #define FALSE 0
(0020) #define ALLLED 0XFF
(0021) /*******************************************
(0022) 函数名称: Delayus
(0023) 功    能: 延时指定微秒(8M晶振)
(0024) 参    数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
(0025) 返回值  : 无
(0026) /********************************************/
(0027) void Delayus(uint US)		  
(0028) {
(0029)  uint i;
(0030)  US=US*5/4;		  	 //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
    0054 E005      LDI	R16,5
    0055 E010      LDI	R17,0
    0056 2F26      MOV	R18,R22
    0057 2F37      MOV	R19,R23
    0058 D0BE      RCALL	mpy16s
    0059 2F60      MOV	R22,R16
    005A 2F71      MOV	R23,R17
    005B 9576      LSR	R23
    005C 9567      ROR	R22
    005D 9576      LSR	R23
    005E 9567      ROR	R22
(0031)  for( i=0;i<US;i++); 
    005F 2744      CLR	R20
    0060 2755      CLR	R21
    0061 C002      RJMP	0x0064
    0062 5F4F      SUBI	R20,0xFF
    0063 4F5F      SBCI	R21,0xFF
    0064 1746      CP	R20,R22
    0065 0757      CPC	R21,R23
    0066 F3D8      BCS	0x0062
(0032) }
    0067 D0DE      RCALL	pop_gset2
    0068 9508      RET
_Delayms:
  i                    --> R20
  j                    --> R22
  MS                   --> R16
    0069 D0D8      RCALL	push_gset2
(0033) /*******************************************
(0034) 函数名称: Delayms
(0035) 功    能: 延时指定毫秒(8M晶振)
(0036) 参    数: MS--延时的毫秒数
(0037) 返回值  : 无
(0038) /********************************************/
(0039) void Delayms(uint MS)		  
(0040) {
(0041)  uint i,j;
(0042)  for( i=0;i<MS;i++)
    006A 2744      CLR	R20
    006B 2755      CLR	R21
    006C C00B      RJMP	0x0078
(0043)  for(j=0;j<1141;j++);	//1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
    006D 2766      CLR	R22
    006E 2777      CLR	R23
    006F C002      RJMP	0x0072
    0070 5F6F      SUBI	R22,0xFF
    0071 4F7F      SBCI	R23,0xFF
    0072 3765      CPI	R22,0x75
    0073 E0E4      LDI	R30,4
    0074 077E      CPC	R23,R30
    0075 F3D0      BCS	0x0070
    0076 5F4F      SUBI	R20,0xFF
    0077 4F5F      SBCI	R21,0xFF
    0078 1740      CP	R20,R16
    0079 0751      CPC	R21,R17
    007A F390      BCS	0x006D
(0044) }
    007B D0CA      RCALL	pop_gset2
    007C 9508      RET
(0045) /*******************************************
(0046) 函数名称: Board_init
(0047) 功    能: 初始化实验板,关闭全部功能
(0048) 参    数: 无
(0049) 返回值  : 无
(0050) /********************************************/
(0051) void Board_init(void)
(0052) {
(0053) 	DDRA=0xFF;	//将四个IO口全部配置为输出
_Board_init:
    007D EF8F      LDI	R24,0xFF
    007E BB8A      OUT	P1A,R24
(0054) 	DDRB=0xFF;
    007F BB87      OUT	P17,R24
(0055) 	DDRC=0xFF;
    0080 BB84      OUT	P14,R24
(0056) 	DDRD=0xFF;
    0081 BB81      OUT	P11,R24
(0057) 
(0058) 	SPCR=0x00;	//还原SPI口,使其为正常端口	
    0082 2422      CLR	R2
    0083 B82D      OUT	P0D,R2
(0059) 
(0060) 	PORTA|=BIT(PA6);//(BEEP)关闭蜂鸣器
    0084 9ADE      SBI	P1B,6
(0061) 	PORTC&=~BIT(PC6);	  //(RELAY)初始化继电器为常闭连接状态	
    0085 98AE      CBI	P15,6
(0062) 	PORTA&=~BIT(PA1);	//关闭SPI总线DA
    0086 98D9      CBI	P1B,1
(0063) 	PORTB=0xFF;	//关闭LED
    0087 BB88      OUT	P18,R24
(0064) 	PORTA|=BIT(LEDLK);	//锁存数据,使LED熄灭
    0088 9ADA      SBI	P1B,2
(0065)  	Delayus(5);		
    0089 E005      LDI	R16,5
    008A E010      LDI	R17,0
    008B DFC5      RCALL	_Delayus
(0066)  	PORTA&=~BIT(LEDLK);
    008C 98DA      CBI	P1B,2
(0067) 	
(0068) 	PORTB=0x00;	   //输出段选
    008D 2422      CLR	R2
    008E BA28      OUT	P18,R2
(0069)  	PORTA|=BIT(SEGLK);		  
    008F 9ADB      SBI	P1B,3
(0070)  	Delayus(50);			  
    0090 E302      LDI	R16,0x32
    0091 E010      LDI	R17,0
    0092 DFBE      RCALL	_Delayus
(0071)  	PORTA&=~BIT(SEGLK);	    
    0093 98DB      CBI	P1B,3
(0072)  	
(0073)  	PORTB=0xFF;	   //输出位选
    0094 EF8F      LDI	R24,0xFF
    0095 BB88      OUT	P18,R24
(0074)  	PORTA|=BIT(BITLK);		   
    0096 9ADC      SBI	P1B,4
(0075)  	Delayus(50);				   
    0097 E302      LDI	R16,0x32
    0098 E010      LDI	R17,0
    0099 DFB7      RCALL	_Delayus
(0076)  	PORTA&=~BIT(BITLK);	   
    009A 98DC      CBI	P1B,4
(0077) 	
(0078) 	PORTD=0xFF;
    009B EF8F      LDI	R24,0xFF
    009C BB82      OUT	P12,R24
(0079) 	PORTA|=BIT(PA7);
    009D 9ADF      SBI	P1B,7
(0080) 	Delayus(50);
    009E E302      LDI	R16,0x32
    009F E010      LDI	R17,0
    00A0 DFB0      RCALL	_Delayus
(0081) 	PORTA&=~BIT(PA7);
    00A1 98DF      CBI	P1B,7
(0082) 
(0083) 	
(0084) }
    00A2 9508      RET
_One_led:
  i                    --> Y+1
  light                --> R22
  number               --> R20
    00A3 D09E      RCALL	push_gset2
    00A4 2F62      MOV	R22,R18
    00A5 2F40      MOV	R20,R16
FILE: I:\AVR视频教程\视频教程\lesson1\lesson1\lesson1.c
(0001) /*******************************************
(0002)   文件:LED.C
(0003)   环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
(0004)   硬件:ATMEGA16芯片
(0005)   日期:2006年12月10日 
(0006)   功能:驱动开发板上的LED。1. 流水灯 2.闪烁指定的LED
(0007)   备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
(0008) /******************************************/
(0009) #include <iom16v.h>			//包含型号头文件
(0010) #include <macros.h>			//包含"位"操作头文件
(0011) #include <stdio.h>			//标准输入输出头文件
(0012) #include <AVR_PQ1A.h>		//包含自定义常量头文件
(0013) 
(0014) /*******************************************
(0015) 函数名称: One_led
(0016) 功    能: 点亮或者熄灭指定的LED
(0017) 参    数: number--指定的LED
(0018) 	  	  light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED
(0019) 返回值  : 无
(0020) /********************************************/
(0021) void One_led(uchar number,uchar light)
(0022) {uchar i;
(0023)  if(light==TRUE)		   //点亮操作
    00A6 3061      CPI	R22,1
    00A7 F471      BNE	0x00B6
(0024)  {
(0025)   PORTB&=~BIT(number);	   //输出数据
    00A8 E001      LDI	R16,1
    00A9 2F14      MOV	R17,R20
    00AA D09E      RCALL	lsl8
    00AB 2E20      MOV	R2,R16
    00AC 9420      COM	R2
    00AD B238      IN	R3,P18
    00AE 2032      AND	R3,R2
    00AF BA38      OUT	P18,R3
(0026)   PORTA|=BIT(LEDLK);	   //更新数据
    00B0 9ADA      SBI	P1B,2
(0027)   Delayms(5);			   //调整时序
    00B1 E005      LDI	R16,5
    00B2 E010      LDI	R17,0
    00B3 DFB5      RCALL	_Delayms
(0028)   PORTA&=~BIT(LEDLK);	   //锁存数据

⌨️ 快捷键说明

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