📄 led.s
字号:
.module LED.C
.area text(rom, con, rel)
.dbfile F:\辛涛\实验板\实验板程序\数码管显示\LED.C
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 18
; /*********************************************
; ************PC0==>DATA
; ************PC1==>SCLK
; ************PC2==>C0
; ************PC3==>C1
; ************PC4==>C2
; ************PC5==>C3
; ************PC6==>C4
; **********************************************/
; //ICC-AVR application builder : 2007-4-4 15:05:58
; // Target : M8
; // Crystal: 11.059Mhz
;
; #include <iom8v.h>
; #include <macros.h>
;
; void port_init(void)
; {
.dbline 19
; PORTB = 0xFF;
ldi R24,255
out 0x18,R24
.dbline 20
; DDRB = 0x00;
clr R2
out 0x17,R2
.dbline 21
; PORTC = 0x7F; //m103 output only
ldi R24,127
out 0x15,R24
.dbline 22
; DDRC = 0x7F;
out 0x14,R24
.dbline 23
; PORTD = 0xFF;
ldi R24,255
out 0x12,R24
.dbline 24
; DDRD = 0x00;
out 0x11,R2
.dbline -2
.dbline 25
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 28
; /*****************************延时函数**************************************/
; void delay_1ms(void)//1ms延时函数
; {
.dbline 30
; unsigned int i;
; for (i=1;i<1571;i++)
ldi R16,1
ldi R17,0
rjmp L6
L3:
.dbline 31
L4:
.dbline 30
subi R16,255 ; offset = 1
sbci R17,255
L6:
.dbline 30
cpi R16,35
ldi R30,6
cpc R17,R30
brlo L3
.dbline -2
.dbline 32
; ;
; }
L2:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_ms _delay_ms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_ms::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 34
; void delay_ms (unsigned int n)
; {
.dbline 35
; unsigned int i=0;
clr R20
clr R21
.dbline 36
; for (i=0;i<n;i++)
rjmp L11
L8:
.dbline 37
rcall _delay_1ms
L9:
.dbline 36
subi R20,255 ; offset = 1
sbci R21,255
L11:
.dbline 36
cp R20,R22
cpc R21,R23
brlo L8
.dbline -2
.dbline 38
; delay_1ms();
; }
L7:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e VUART0 _VUART0 fc
; count1 -> <dead>
; VBUF -> R20
; count2 -> R22
; bit_ctr -> R10
; Display -> R22
.even
_VUART0::
rcall push_gset3
mov R22,R16
.dbline -1
.dbline 41
; /************************虚拟串行显示通道0***************************/
; unsigned char VUART0 (unsigned char Display)
; {
.dbline 43
; unsigned char VBUF,bit_ctr,count1,count2;
; VBUF=Display;
.dbline 44
; bit_ctr=0x01;
.dbline 45
; for (count2=0;count2<8;count2++)
mov R20,R22
clr R10
inc R10
clr R22
rjmp L16
L13:
.dbline 46
; {
.dbline 47
; if ((VBUF&bit_ctr)==0x00)
mov R2,R20
and R2,R10
brne L17
.dbline 48
; {//数据为0
.dbline 49
; PORTC=0b00111100;//PC0=RXD数据
ldi R24,60
out 0x15,R24
.dbline 50
; delay_ms (2);
ldi R16,2
ldi R17,0
rcall _delay_ms
.dbline 51
; PORTC=0b00111110;//PC1=TXD时钟
ldi R24,62
out 0x15,R24
.dbline 52
; delay_ms (2);
ldi R16,2
ldi R17,0
rcall _delay_ms
.dbline 53
; PORTC=0b00111111;//PC1=TXD时钟
ldi R24,63
out 0x15,R24
.dbline 54
; }
rjmp L18
L17:
.dbline 56
; else
; {//数据为1
.dbline 57
; PORTC=0b00111101;//PC0=RXD数据
ldi R24,61
out 0x15,R24
.dbline 58
; delay_ms (2);
ldi R16,2
ldi R17,0
rcall _delay_ms
.dbline 59
; PORTC=0b00111111;//PC1=TXD时钟
ldi R24,63
out 0x15,R24
.dbline 60
; }
L18:
.dbline 61
lsl R10
.dbline 62
L14:
.dbline 45
inc R22
L16:
.dbline 45
cpi R22,8
brlo L13
.dbline -2
.dbline 64
; bit_ctr<<=1;
; }
;
; }
L12:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l count1 1 c
.dbsym r VBUF 20 c
.dbsym r count2 22 c
.dbsym r bit_ctr 10 c
.dbsym r Display 22 c
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 67
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 69
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 70
; port_init();
rcall _port_init
.dbline 72
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 73
; GICR = 0x00;
out 0x3b,R2
.dbline 74
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 75
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 77
; //all peripherals are now initialised
; }
L19:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 79
; void main()
; {
.dbline 80
; init_devices();
rcall _init_devices
.dbline 84
;
; //while(1)
; // {
; VUART0 (0xff);
ldi R16,255
.dbline -2
.dbline 86
; //}
; }
L20:
.dbline 0 ; func end
rjmp _VUART0
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -