📄 io.s
字号:
.module io.c
.area text(rom, con, rel)
.dbfile E:\wu\单片机教学\IO实验程序\io.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 9
; //ICC-AVR application builder : 2005-3-1 6:11:41
; // Target : M8
; // Crystal: 11.059Mhz
;
; #include <iom8v.h>
; #include <macros.h>
;
; void port_init(void)
; {
.dbline 10
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 11
; DDRB = 0x00;
clr R2
out 0x17,R2
.dbline 12
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x15,R24
.dbline 13
; DDRC = 0x20;
ldi R24,32
out 0x14,R24
.dbline 14
; PORTD = 0xFF;
ldi R24,255
out 0x12,R24
.dbline 15
; DDRD = 0xFF;
out 0x11,R24
.dbline -2
.dbline 16
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 20
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 22
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 23
; port_init();
rcall _port_init
.dbline 25
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 26
; GICR = 0x00;
out 0x3b,R2
.dbline 27
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 28
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 30
; //all peripherals are now initialised
; }
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay _delay fV
; k -> R20,R21
; i -> R22,R23
; j -> R10,R11
; time -> R16
.even
_delay::
rcall push_gset3
.dbline -1
.dbline 33
;
; void delay(char time)//延时函数,单位延时0.25s。
; { unsigned int i,j,k;
.dbline 34
; for(k=0;k<time;k++)
clr R20
clr R21
rjmp L7
L4:
.dbline 35
; for(i=0;i<1500;i++)
clr R22
clr R23
rjmp L11
L8:
.dbline 36
clr R10
clr R11
rjmp L15
L12:
.dbline 36
L13:
.dbline 36
movw R24,R10
adiw R24,1
movw R10,R24
L15:
.dbline 36
movw R24,R10
cpi R24,100
ldi R30,0
cpc R25,R30
brlo L12
L9:
.dbline 35
subi R22,255 ; offset = 1
sbci R23,255
L11:
.dbline 35
cpi R22,220
ldi R30,5
cpc R23,R30
brlo L8
L5:
.dbline 34
subi R20,255 ; offset = 1
sbci R21,255
L7:
.dbline 34
mov R2,R16
clr R3
cp R20,R2
cpc R21,R3
brlo L4
.dbline -2
.dbline 37
; for(j=0;j<100;j++);
; }
L3:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r k 20 i
.dbsym r i 22 i
.dbsym r j 10 i
.dbsym r time 16 c
.dbend
.area lit(rom, con, rel)
L17:
.byte 63,6
.byte 91,'O
.byte 'f,'f
.byte 125,7
.byte 127
.area text(rom, con, rel)
.dbfile E:\wu\单片机教学\IO实验程序\io.c
.dbfunc e main _main fV
; led -> y+0
; data -> R20
; i -> R22
.even
_main::
sbiw R28,9
.dbline -1
.dbline 40
;
; void main(void)
; {
.dbline 43
; char i;
; char data;
; char led[9] = {0x3F,0x06, 0x5B, 0x4F, 0x66 ,0x66, 0x7D, 0x07, 0x7F}; //数码管码值
ldi R24,<L17
ldi R25,>L17
movw R30,R28
ldi R16,9
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 44
; init_devices();
rcall _init_devices
rjmp L19
L18:
.dbline 47
;
; while (1)
; { if((PINB &0x10)==0) //数码管任务;
.dbline 47
sbic 0x16,4
rjmp L21
.dbline 48
; { PORTC &= ~0x20; //PC5清零
.dbline 48
cbi 0x15,5
.dbline 49
; data = (PINB & 0x0F)>>1; //取PB1~PB3的数据;
in R20,0x16
andi R20,15
lsr R20
.dbline 50
; PORTD = led[data]; //查表输出数码管值;
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x12,R2
.dbline 51
; }
rjmp L22
L21:
.dbline 53
; else //跑马灯任务;
; { if((PINB & 0x08) == 0 ) //只亮一个灯
.dbline 53
sbic 0x16,3
rjmp L23
.dbline 54
; { data = (PINB & 0x06)>>1; //取PB1、PB2的数据;
.dbline 54
in R20,0x16
andi R20,6
lsr R20
.dbline 55
; for(i=0;i<8;i++) //低位到高位
clr R22
rjmp L28
L25:
.dbline 56
.dbline 56
ldi R16,1
mov R17,R22
rcall lsl8
mov R2,R16
com R2
out 0x12,R2
.dbline 57
mov R16,R20
rcall _delay
.dbline 58
L26:
.dbline 55
inc R22
L28:
.dbline 55
cpi R22,8
brlo L25
.dbline 59
; { PORTD = ~(1<<i);
; delay(data); //延时
; }
; for(i=0;i<8;i++) //高位到低位
clr R22
rjmp L32
L29:
.dbline 60
.dbline 60
mov R18,R22
clr R19
ldi R16,128
ldi R17,0
rcall asr16
movw R2,R16
com R2
com R3
out 0x12,R2
.dbline 61
mov R16,R20
rcall _delay
.dbline 62
L30:
.dbline 59
inc R22
L32:
.dbline 59
cpi R22,8
brlo L29
.dbline 63
; { PORTD = ~(0x80>>i);
; delay(data);
; }
; }
rjmp L24
L23:
.dbline 65
; else //亮两个灯
; { data = (PINB & 0x06)>>1; //同上
.dbline 65
in R20,0x16
andi R20,6
lsr R20
.dbline 67
;
; for(i=0;i<8;i++)
clr R22
rjmp L36
L33:
.dbline 68
.dbline 68
ldi R16,3
mov R17,R22
rcall lsl8
mov R2,R16
com R2
out 0x12,R2
.dbline 69
mov R16,R20
rcall _delay
.dbline 70
L34:
.dbline 67
inc R22
L36:
.dbline 67
cpi R22,8
brlo L33
.dbline 71
; { PORTD = ~(3<<i);
; delay(data);
; }
; for(i=0;i<8;i++)
clr R22
rjmp L40
L37:
.dbline 72
.dbline 72
mov R18,R22
clr R19
ldi R16,192
ldi R17,0
rcall asr16
movw R2,R16
com R2
com R3
out 0x12,R2
.dbline 73
mov R16,R20
rcall _delay
.dbline 74
L38:
.dbline 71
inc R22
L40:
.dbline 71
cpi R22,8
brlo L37
.dbline 75
; { PORTD = ~(0xC0>>i);
; delay(data);
; }
; }
L24:
.dbline 76
; }
L22:
.dbline 77
L19:
.dbline 46
rjmp L18
X0:
.dbline -2
.dbline 78
; }
; }
L16:
adiw R28,9
.dbline 0 ; func end
ret
.dbsym l led 0 A[9:9]c
.dbsym r data 20 c
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -