📄 lesson1.lst
字号:
__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 + -