📄 main.s
字号:
.module main.c
.area lit(rom, con, rel)
_led_table::
.word 255
.word 0
.word 136
.word 68
.word 34
.word 17
.word 51
.word 119
.word 255
.word 102
.word 24
.word 36
.word 66
.word 129
.word 165
.word 231
.word 255
.word 126
.word 60
.word 24
.dbfile C:\DOCUME~1\administrator\桌面\教程\LED应用\霓虹灯\main.c
.dbsym e led_table _led_table A[40:20]kI
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\administrator\桌面\教程\LED应用\霓虹灯\main.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 25
; //ICC-AVR application builder : 2007-1-29 10:04:38
; // Target : M16
; // Crystal: 7.3728Mhz
; // 功能:霓虹灯程序
; // 作者:古欣
; // AVR与虚拟仪器 http://www.avrvi.com
;
; #include <iom16v.h>
; #include <macros.h>
;
; #define led_port PORTA
; //定义输出端口
; #define led_ddr DDRA
; //定义输出控制寄存器
; //可以自行修改,必须保持 led_port和led_ddr一致,PORTA对应DDRA
;
; const led_table[20]={ //定义要输出的值
; 0xff,0x00,0x88,0x44,0x22,
; 0x11,0x33,0x77,0xff,0x66,
; 0x18,0x24,0x42,0x81,0xa5,
; 0xe7,0xff,0x7e,0x3c,0x18};
;
;
; void port_init(void)
; {
.dbline 26
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 27
; DDRA = 0x00;
out 0x1a,R2
.dbline 28
; PORTB = 0x00;
out 0x18,R2
.dbline 29
; DDRB = 0x00;
out 0x17,R2
.dbline 30
; PORTC = 0x00; //m103 output only
out 0x15,R2
.dbline 31
; DDRC = 0x00;
out 0x14,R2
.dbline 32
; PORTD = 0x00;
out 0x12,R2
.dbline 33
; DDRD = 0x00;
out 0x11,R2
.dbline 34
; led_ddr=0xff; //设置LED的端口为输出
ldi R24,255
out 0x1a,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 40
; }
;
; //call this routine to initialize all peripherals
; //此处为ICC系统生成,未做更改
; void init_devices(void)
; {
.dbline 42
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 43
; port_init();
xcall _port_init
.dbline 45
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 46
; GICR = 0x00;
out 0x3b,R2
.dbline 47
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 48
; SEI(); //re-enable interrupts
sei
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Delay _Delay fV
; i -> R16
; j -> R18
.even
_Delay::
.dbline -1
.dbline 53
; //all peripherals are now initialized
; }
;
; void Delay(void) //延时,没有详细计算
; {
.dbline 55
; unsigned char i,j;
; for(i=150;i>0;i--)
ldi R16,150
xjmp L7
L4:
.dbline 56
; {
.dbline 57
; for(j=200;j>0;j--)
ldi R18,200
xjmp L11
L8:
.dbline 58
L9:
.dbline 57
dec R18
L11:
.dbline 57
clr R2
cp R2,R18
brlo L8
.dbline 59
L5:
.dbline 55
dec R16
L7:
.dbline 55
clr R2
cp R2,R16
brlo L4
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbsym r j 18 c
.dbend
.dbfunc e main _main fV
; i -> R20,R21
.even
_main::
.dbline -1
.dbline 63
; ;
; }
; }
;
; void main(void)
; {
.dbline 65
; unsigned int i;
; init_devices();
xcall _init_devices
xjmp L14
L13:
.dbline 67
; while(1)
; {
.dbline 68
; for(i=0;i<20;i++)
clr R20
clr R21
xjmp L19
L16:
.dbline 69
.dbline 70
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_led_table
ldi R25,>_led_table
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
out 0x1b,R30
.dbline 71
xcall _Delay
.dbline 72
xcall _Delay
.dbline 73
xcall _Delay
.dbline 74
L17:
.dbline 68
subi R20,255 ; offset = 1
sbci R21,255
L19:
.dbline 68
cpi R20,20
ldi R30,0
cpc R21,R30
brlo L16
.dbline 75
L14:
.dbline 66
xjmp L13
X0:
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -