📄 led.lst
字号:
__start:
__text_start:
0015 E5CF LDI R28,0x5F
0016 E0D2 LDI R29,2
0017 BFCD OUT 0x3D,R28
0018 BFDE OUT 0x3E,R29
0019 51C0 SUBI R28,0x10
001A 40D0 SBCI R29,0
001B EA0A LDI R16,0xAA
001C 8308 STD Y+0,R16
001D 2400 CLR R0
001E E6E0 LDI R30,0x60
001F E0F0 LDI R31,0
0020 E010 LDI R17,0
0021 36E0 CPI R30,0x60
0022 07F1 CPC R31,R17
0023 F011 BEQ 0x0026
0024 9201 ST R0,Z+
0025 CFFB RJMP 0x0021
0026 8300 STD Z+0,R16
0027 E2EA LDI R30,0x2A
0028 E0F0 LDI R31,0
0029 E6A0 LDI R26,0x60
002A E0B0 LDI R27,0
002B E010 LDI R17,0
002C 32EA CPI R30,0x2A
002D 07F1 CPC R31,R17
002E F021 BEQ 0x0033
002F 95C8 LPM
0030 9631 ADIW R30,1
0031 920D ST R0,X+
0032 CFF9 RJMP 0x002C
0033 D016 RCALL _main
_exit:
0034 CFFF RJMP _exit
_DelaymS:
j --> R20
k --> R22
i --> R16
0035 D02B RCALL push_gset2
FILE: E:\iccavr代码\实验1_共阴驱动LED闪烁\led.c
(0001) //******************************************************************************
(0002) // *
(0003) // FileName : led.c ICCAVR V6.31A编译 *
(0004) // Function : 8个LED灯闪烁显示,入门级试验 *
(0005) // Date : 2006-12-11 *
(0006) // Version : 1.0 *
(0007) // *
(0008) // Author : 开关电源 hongtusy@163.com *
(0009) // Company : 电子信息技术咨询网 http://www.itsn.cn *
(0010) // *
(0011) //***************************描述与记事*****************************************
(0012) //实验板的AVR程序,C或AVR入门级试验,8个LED灯闪烁显示。
(0013) //说明:使用延迟程序,间歇点亮或关闭LED灯。
(0014) //具体电路可参照使用指南里的说明。PC口输出1,LED即点亮。
(0015) //使用器件:ATMEGA8535,可更换。 使用默认的片内RC振荡器,1MHz。
(0016) //使用的开关:SW1-1~8.SW6-1打开,SW3-8为系统复位端。
(0017) //记事:
(0018) //******************************************************************************
(0019) #include <iom8535v.h> //头文件,ATmega8535单片机的寄存器定义
(0020) #include "macros.h" //可以使用NOP()以及SEI()等指令.
(0021)
(0022) typedef unsigned char uchar; //宏
(0023) typedef unsigned int uint;
(0024)
(0025) /************************************************
(0026) 函 数 名: DelaymS()
(0027) 功 能: 毫秒级延时函数
(0028) 输入参数: 延迟时间/系统晶体
(0029) 输出参数: 做相应的延迟处理
(0030) 描 述: /
(0031) ***********************************************/
(0032) void DelaymS (uint i) //延时函数,参数i为延时时间
(0033) {
(0034) uint j,k; //双重延时
(0035) for (j=0;j<i;j++)
0036 2744 CLR R20
0037 2755 CLR R21
0038 C00C RJMP 0x0045
(0036) {
(0037) for (k=0;k<=50;k++);
0039 2766 CLR R22
003A 2777 CLR R23
003B C002 RJMP 0x003E
003C 5F6F SUBI R22,0xFF
003D 4F7F SBCI R23,0xFF
003E E382 LDI R24,0x32
003F E090 LDI R25,0
0040 1786 CP R24,R22
0041 0797 CPC R25,R23
0042 F7C8 BCC 0x003C
0043 5F4F SUBI R20,0xFF
0044 4F5F SBCI R21,0xFF
0045 1740 CP R20,R16
0046 0751 CPC R21,R17
0047 F388 BCS 0x0039
0048 D010 RCALL pop_gset2
0049 9508 RET
(0038) }
(0039) }
(0040) //************************main***************
(0041) void main(void) //主程序
(0042) {
(0043) DDRC=0xff; //PC口为输出
_main:
004A EF8F LDI R24,0xFF
004B BB84 OUT 0x14,R24
004C C00A RJMP 0x0057
(0044) while(1) //如果条件为真,1=真,所以死循环执行嵌套部分。
(0045) {
(0046) PORTC=0xff; //点亮LED
004D EF8F LDI R24,0xFF
004E BB85 OUT 0x15,R24
(0047) DelaymS(1000); //延迟程序
004F EE08 LDI R16,0xE8
0050 E013 LDI R17,3
0051 DFE3 RCALL _DelaymS
(0048) PORTC=0x00; //关闭LED
0052 2422 CLR R2
0053 BA25 OUT 0x15,R2
(0049) DelaymS(1000); //延迟程序
FILE: <library>
0054 EE08 LDI R16,0xE8
0055 E013 LDI R17,3
0056 DFDE RCALL _DelaymS
0057 CFF5 RJMP 0x004D
0058 9508 RET
pop_gset2:
0059 E0E2 LDI R30,2
005A C00C RJMP pop
push_gset5:
005B 92FA ST R15,-Y
005C 92EA ST R14,-Y
push_gset4:
005D 92DA ST R13,-Y
005E 92CA ST R12,-Y
push_gset3:
005F 92BA ST R11,-Y
0060 92AA ST R10,-Y
push_gset2:
0061 937A ST R23,-Y
0062 936A ST R22,-Y
push_gset1:
0063 935A ST R21,-Y
0064 934A ST R20,-Y
0065 9508 RET
pop_gset1:
0066 E0E1 LDI R30,1
pop:
0067 9149 LD R20,Y+
0068 9159 LD R21,Y+
0069 FDE0 SBRC R30,0
006A 9508 RET
006B 9169 LD R22,Y+
006C 9179 LD R23,Y+
006D FDE1 SBRC R30,1
006E 9508 RET
006F 90A9 LD R10,Y+
0070 90B9 LD R11,Y+
0071 FDE2 SBRC R30,2
0072 9508 RET
0073 90C9 LD R12,Y+
0074 90D9 LD R13,Y+
0075 FDE3 SBRC R30,3
0076 9508 RET
0077 90E9 LD R14,Y+
0078 90F9 LD R15,Y+
0079 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -