📄 main.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 940E004B CALL _main
_exit:
004A CFFF RJMP _exit
FILE: D:\桌面\实验教程\LED应用\红绿灯闪烁2\main.c
(0001) #include <iom8v.h> //和单片机类型相对应的头文件,选择Atmega8做实验;
(0002) #include <macros.h>
(0003) void delay_1ms(void); //函数声明,本实验中会用到这两个函数
(0004) void delay_nms(unsigned int n);
(0005) void main(void) //主函数
(0006) {
(0007) OSCCAL=0X9E;//系统时钟校准,不同的芯片和不同的频率,
_main:
004B E98E LDI R24,0x9E
004C BF81 OUT 0x31,R24
(0008) DDRB=0B00000011; //定义B口的PB0、PB1为输出口
004D E083 LDI R24,3
004E BB87 OUT 0x17,R24
(0009) PORTB=0B00000001; //PB0口输出高电平,PB1口输出低电平,绿灯亮
004F E081 LDI R24,1
0050 BB88 OUT 0x18,R24
(0010) delay_nms(5000); //延时5秒
0051 E808 LDI R16,0x88
0052 E113 LDI R17,0x13
0053 D019 RCALL _delay_nms
(0011) PORTB=0B00000010; //PB1口输出高电平,PB0口输出低电平,关闭绿灯,红灯亮
0054 E082 LDI R24,2
0055 BB88 OUT 0x18,R24
(0012) delay_nms(5000); //延时5秒
0056 E808 LDI R16,0x88
0057 E113 LDI R17,0x13
0058 D014 RCALL _delay_nms
0059 C007 RJMP 0x0061
(0013) while(1) //程序一直执行该循环
(0014) {
(0015) PORTB^=0B00000011; //翻转PB0和PB1口
005A E083 LDI R24,3
005B B228 IN R2,0x18
005C 2628 EOR R2,R24
005D BA28 OUT 0x18,R2
(0016) delay_nms(1000);
005E EE08 LDI R16,0xE8
005F E013 LDI R17,3
0060 D00C RCALL _delay_nms
0061 CFF8 RJMP 0x005A
0062 9508 RET
(0017) }
(0018) }
(0019) void delay_1ms(void)//1ms延时函数
(0020) {
(0021) unsigned int i;
(0022) for (i=0;i<150;i++)
_delay_1ms:
i --> R16
0063 2700 CLR R16
0064 2711 CLR R17
0065 C002 RJMP 0x0068
0066 5F0F SUBI R16,0xFF
0067 4F1F SBCI R17,0xFF
0068 3906 CPI R16,0x96
0069 E0E0 LDI R30,0
006A 071E CPC R17,R30
006B F3D0 BCS 0x0066
006C 9508 RET
_delay_nms:
i --> R20
n --> R22
006D 940E0085 CALL push_gset2
006F 01B8 MOVW R22,R16
(0023) {
(0024) }
(0025) }
(0026) void delay_nms(unsigned int n)//延时n毫秒
(0027) {
(0028) unsigned int i;
(0029) for (i=0;i<n;i++)//执行n次1毫秒延时
0070 2744 CLR R20
0071 2755 CLR R21
0072 C003 RJMP 0x0076
(0030) delay_1ms();
FILE: <library>
0073 DFEF RCALL _delay_1ms
0074 5F4F SUBI R20,0xFF
0075 4F5F SBCI R21,0xFF
0076 1746 CP R20,R22
0077 0757 CPC R21,R23
0078 F3D0 BCS 0x0073
0079 940E007C CALL pop_gset2
007B 9508 RET
pop_gset2:
007C E0E2 LDI R30,2
007D 940C008B JMP pop
push_gset5:
007F 92FA ST R15,-Y
0080 92EA ST R14,-Y
push_gset4:
0081 92DA ST R13,-Y
0082 92CA ST R12,-Y
push_gset3:
0083 92BA ST R11,-Y
0084 92AA ST R10,-Y
push_gset2:
0085 937A ST R23,-Y
0086 936A ST R22,-Y
push_gset1:
0087 935A ST R21,-Y
0088 934A ST R20,-Y
0089 9508 RET
pop_gset1:
008A E0E1 LDI R30,1
pop:
008B 9149 LD R20,Y+
008C 9159 LD R21,Y+
008D FDE0 SBRC R30,0
008E 9508 RET
008F 9169 LD R22,Y+
0090 9179 LD R23,Y+
0091 FDE1 SBRC R30,1
0092 9508 RET
0093 90A9 LD R10,Y+
0094 90B9 LD R11,Y+
0095 FDE2 SBRC R30,2
0096 9508 RET
0097 90C9 LD R12,Y+
0098 90D9 LD R13,Y+
0099 FDE3 SBRC R30,3
009A 9508 RET
009B 90E9 LD R14,Y+
009C 90F9 LD R15,Y+
009D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -