📄 main.lst
字号:
__start:
__text_start:
003E E5CF LDI R28,0x5F
003F E0D4 LDI R29,4
0040 BFCD OUT 0x3D,R28
0041 BFDE OUT 0x3E,R29
0042 51C0 SUBI R28,0x10
0043 40D0 SBCI R29,0
0044 EA0A LDI R16,0xAA
0045 8308 STD Y+0,R16
0046 2400 CLR R0
0047 E6E0 LDI R30,0x60
0048 E0F0 LDI R31,0
0049 E010 LDI R17,0
004A 36E0 CPI R30,0x60
004B 07F1 CPC R31,R17
004C F011 BEQ 0x004F
004D 9201 ST R0,Z+
004E CFFB RJMP 0x004A
004F 8300 STD Z+0,R16
0050 E7EC LDI R30,0x7C
0051 E0F0 LDI R31,0
0052 E6A0 LDI R26,0x60
0053 E0B0 LDI R27,0
0054 E010 LDI R17,0
0055 37EC CPI R30,0x7C
0056 07F1 CPC R31,R17
0057 F021 BEQ 0x005C
0058 95C8 LPM
0059 9631 ADIW R30,1
005A 920D ST R0,X+
005B CFF9 RJMP 0x0055
005C 940E0080 CALL _main
_exit:
005E CFFF RJMP _exit
FILE: C:\DOCUME~1\administrator\桌面\教程\LED应用\霓虹灯\main.c
(0001) //ICC-AVR application builder : 2007-1-29 10:04:38
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004) // 功能:霓虹灯程序
(0005) // 作者:古欣
(0006) // AVR与虚拟仪器 http://www.avrvi.com
(0007)
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010)
(0011) #define led_port PORTA
(0012) //定义输出端口
(0013) #define led_ddr DDRA
(0014) //定义输出控制寄存器
(0015) //可以自行修改,必须保持 led_port和led_ddr一致,PORTA对应DDRA
(0016)
(0017) const led_table[20]={ //定义要输出的值
(0018) 0xff,0x00,0x88,0x44,0x22,
(0019) 0x11,0x33,0x77,0xff,0x66,
(0020) 0x18,0x24,0x42,0x81,0xa5,
(0021) 0xe7,0xff,0x7e,0x3c,0x18};
(0022)
(0023)
(0024) void port_init(void)
(0025) {
(0026) PORTA = 0x00;
_port_init:
005F 2422 CLR R2
0060 BA2B OUT 0x1B,R2
(0027) DDRA = 0x00;
0061 BA2A OUT 0x1A,R2
(0028) PORTB = 0x00;
0062 BA28 OUT 0x18,R2
(0029) DDRB = 0x00;
0063 BA27 OUT 0x17,R2
(0030) PORTC = 0x00; //m103 output only
0064 BA25 OUT 0x15,R2
(0031) DDRC = 0x00;
0065 BA24 OUT 0x14,R2
(0032) PORTD = 0x00;
0066 BA22 OUT 0x12,R2
(0033) DDRD = 0x00;
0067 BA21 OUT 0x11,R2
(0034) led_ddr=0xff; //设置LED的端口为输出
0068 EF8F LDI R24,0xFF
0069 BB8A OUT 0x1A,R24
006A 9508 RET
(0035) }
(0036)
(0037) //call this routine to initialize all peripherals
(0038) //此处为ICC系统生成,未做更改
(0039) void init_devices(void)
(0040) {
(0041) //stop errant interrupts until set up
(0042) CLI(); //disable all interrupts
_init_devices:
006B 94F8 BCLR 7
(0043) port_init();
006C DFF2 RCALL _port_init
(0044)
(0045) MCUCR = 0x00;
006D 2422 CLR R2
006E BE25 OUT 0x35,R2
(0046) GICR = 0x00;
006F BE2B OUT 0x3B,R2
(0047) TIMSK = 0x00; //timer interrupt sources
0070 BE29 OUT 0x39,R2
(0048) SEI(); //re-enable interrupts
0071 9478 BSET 7
0072 9508 RET
(0049) //all peripherals are now initialized
(0050) }
(0051)
(0052) void Delay(void) //延时,没有详细计算
(0053) {
(0054) unsigned char i,j;
(0055) for(i=150;i>0;i--)
_Delay:
i --> R16
j --> R18
0073 E906 LDI R16,0x96
0074 C007 RJMP 0x007C
(0056) {
(0057) for(j=200;j>0;j--)
0075 EC28 LDI R18,0xC8
0076 C001 RJMP 0x0078
0077 952A DEC R18
0078 2422 CLR R2
0079 1622 CP R2,R18
007A F3E0 BCS 0x0077
007B 950A DEC R16
007C 2422 CLR R2
007D 1620 CP R2,R16
007E F3B0 BCS 0x0075
007F 9508 RET
(0058) ;
(0059) }
(0060) }
(0061)
(0062) void main(void)
(0063) {
(0064) unsigned int i;
(0065) init_devices();
_main:
i --> R20
0080 DFEA RCALL _init_devices
0081 C01A RJMP 0x009C
(0066) while(1)
(0067) {
(0068) for(i=0;i<20;i++)
0082 2744 CLR R20
0083 2755 CLR R21
0084 C013 RJMP 0x0098
(0069) {
(0070) led_port=led_table[i]; //顺序显示表中的内容
0085 E002 LDI R16,2
0086 E010 LDI R17,0
0087 019A MOVW R18,R20
0088 940E009E CALL empy16s
008A 01F8 MOVW R30,R16
008B E584 LDI R24,0x54
008C E090 LDI R25,0
008D 0FE8 ADD R30,R24
008E 1FF9 ADC R31,R25
008F 9005 LPM R0,Z+
0090 9014 LPM R1,0(Z)
0091 01F0 MOVW R30,R0
0092 BBEB OUT 0x1B,R30
(0071) Delay(); //延时
0093 DFDF RCALL _Delay
(0072) Delay(); //延时
0094 DFDE RCALL _Delay
(0073) Delay(); //延时
FILE: <library>
0095 DFDD RCALL _Delay
0096 5F4F SUBI R20,0xFF
0097 4F5F SBCI R21,0xFF
0098 3144 CPI R20,0x14
0099 E0E0 LDI R30,0
009A 075E CPC R21,R30
009B F348 BCS 0x0085
009C CFE5 RJMP 0x0082
009D 9508 RET
empy16s:
009E 920A ST R0,-Y
009F 921A ST R1,-Y
00A0 938A ST R24,-Y
00A1 939A ST R25,-Y
00A2 9F02 MUL R16,R18
00A3 01C0 MOVW R24,R0
00A4 9F12 MUL R17,R18
00A5 0D90 ADD R25,R0
00A6 9F03 MUL R16,R19
00A7 0D90 ADD R25,R0
00A8 018C MOVW R16,R24
00A9 9199 LD R25,Y+
00AA 9189 LD R24,Y+
00AB 9019 LD R1,Y+
00AC 9009 LD R0,Y+
00AD 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -