📄 led.s
字号:
.module led.c
.area text(rom, con, rel)
.dbfile C:\icc\mega32\led.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 10
; //ICC-AVR application builder : 2008-07-02 下午 03:28:23
; // Target : M32
; // Crystal: 8.0000Mhz
;
; #include <iom32v.h>
; #include <macros.h>
; #define uchar unsigned char
;
; void port_init(void) //端口定义
; {
.dbline 11
; PORTA = 0x00; //低电平
clr R2
out 0x1b,R2
.dbline 12
; DDRA = 0xFF; //输入
ldi R24,255
out 0x1a,R24
.dbline 13
; PORTB = 0x00; //低电平
out 0x18,R2
.dbline 14
; DDRB = 0xFF; //输出
out 0x17,R24
.dbline 15
; PORTC = 0x00;
out 0x15,R2
.dbline 16
; DDRC = 0x00;
out 0x14,R2
.dbline 17
; PORTD = 0x00;
out 0x12,R2
.dbline 18
; DDRD = 0x3C;
ldi R24,60
out 0x11,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 23
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 25
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 26
; port_init();
xcall _port_init
.dbline 28
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 29
; GICR = 0x00;
out 0x3b,R2
.dbline 30
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 31
; SEI(); //re-enable interrupts
sei
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_1us _delay_1us fV
; i -> R16
.even
_delay_1us::
.dbline -1
.dbline 37
; //all peripherals are now initialized
; }
;
; //1微秒延时
; void delay_1us(void)
; { uchar i=8;
.dbline 37
ldi R16,8
.dbline 38
; asm("nop");
nop
.dbline 39
; i--;
dec R16
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e delay_nus _delay_nus fV
; t -> R20
.even
_delay_nus::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 43
; }
; //长微秒延时
; void delay_nus(uchar t)
; { while(t--)
xjmp L6
L5:
.dbline 44
xcall _delay_1us
L6:
.dbline 43
mov R2,R20
clr R3
subi R20,1
tst R2
brne L5
.dbline -2
L4:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r t 20 c
.dbend
.dbfunc e delay_1ms _delay_1ms fV
.even
_delay_1ms::
.dbline -1
.dbline 48
; delay_1us();
; }
; //1毫秒延时
; void delay_1ms(void)
; {
.dbline 49
; delay_nus(1000);
ldi R16,232
xcall _delay_nus
.dbline -2
L8:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_nms _delay_nms fV
; t -> R20
.even
_delay_nms::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 53
; }
; //长毫秒延时
; void delay_nms(uchar t)
; { while(t--)
xjmp L11
L10:
.dbline 54
xcall _delay_1ms
L11:
.dbline 53
mov R2,R20
clr R3
subi R20,1
tst R2
brne L10
.dbline -2
L9:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r t 20 c
.dbend
.dbfunc e led_out _led_out fV
; i -> R20
.even
_led_out::
xcall push_gset1
.dbline -1
.dbline 58
; delay_1ms();
; }
; //定义LED等
; void led_out(void)
; { uchar i;
.dbline 59
; for(i=1;i<5;i++)
ldi R20,1
xjmp L17
L14:
.dbline 60
.dbline 60
ldi R17,6
sub R17,R20
ldi R16,1
xcall lsl8
in R2,0x12
or R2,R16
out 0x12,R2
.dbline 61
ldi R16,244
xcall _delay_nms
.dbline 61
L15:
.dbline 59
inc R20
L17:
.dbline 59
cpi R20,5
brlo L14
.dbline 62
; {PORTD|=BIT(6-i);
; delay_nms(500);}
; for(i=5;i<13;i++)
ldi R20,5
xjmp L21
L18:
.dbline 63
.dbline 63
ldi R17,12
sub R17,R20
ldi R16,1
xcall lsl8
in R2,0x18
or R2,R16
out 0x18,R2
.dbline 64
ldi R16,244
xcall _delay_nms
.dbline 64
L19:
.dbline 62
inc R20
L21:
.dbline 62
cpi R20,13
brlo L18
.dbline 65
; {PORTB|=BIT(12-i);
; delay_nms(500);}
; for(i=12;i>4;i--)
ldi R20,12
xjmp L25
L22:
.dbline 66
.dbline 67
ldi R17,12
sub R17,R20
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline 68
ldi R16,244
xcall _delay_nms
.dbline 69
L23:
.dbline 65
dec R20
L25:
.dbline 65
ldi R24,4
cp R24,R20
brlo L22
.dbline 70
; {
; PORTB&=~BIT(12-i);
; delay_nms(500);
; }
; for(i=4;i!=0;i--)
ldi R20,4
xjmp L29
L26:
.dbline 71
.dbline 72
ldi R17,6
sub R17,R20
ldi R16,1
xcall lsl8
mov R2,R16
com R2
in R3,0x12
and R3,R2
out 0x12,R3
.dbline 73
ldi R16,244
xcall _delay_nms
.dbline 74
L27:
.dbline 70
dec R20
L29:
.dbline 70
tst R20
brne L26
.dbline -2
L13:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 78
; {
; PORTD&=~BIT(6-i);
; delay_nms(500);
; }
; }
; //主程序开始
; void main(void)
; {
.dbline 79
; init_devices();
xcall _init_devices
xjmp L32
L31:
.dbline 81
.dbline 82
xcall _led_out
.dbline 83
L32:
.dbline 80
xjmp L31
X0:
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -