📄 uart.s
字号:
.module uart.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\uart\uart.c
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R16,R17
.even
_delay_nus::
st -y,R20
st -y,R21
.dbline -1
.dbline 11
; //ICC-AVR application builder : 2008-8-5 14:38:41
; // Target : M8515
; // Crystal: 8.0000Mhz
;
; #include <iom8515v.h>
; #include <macros.h>
;
; #define uchar unsigned char
; #define uint unsigned int
; void delay_nus(unsigned int n)//n微秒延时函数
; {
.dbline 13
; unsigned int i;
; for (i=0;i<n;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 14
; {
.dbline 15
; asm("nop");
nop
.dbline 16
; }
L3:
.dbline 13
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 13
cp R20,R16
cpc R21,R17
brlo L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r n 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R10,R11
.even
_delay_nms::
rcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 19
; }
; void delay_nms(unsigned int n)//n毫秒延时函数
; {
.dbline 21
; unsigned int i;
; for (i=0;i<n;i++) //执行n次1毫秒延时
clr R20
clr R21
rjmp L10
L7:
.dbline 22
; delay_nus(1000);
ldi R16,1000
ldi R17,3
rcall _delay_nus
L8:
.dbline 21
subi R20,255 ; offset = 1
sbci R21,255
L10:
.dbline 21
cp R20,R10
cpc R21,R11
brlo L7
X1:
.dbline -2
L6:
.dbline 0 ; func end
rjmp pop_xgset300C
.dbsym r i 20 i
.dbsym r n 10 i
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 25
; }
; 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;
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
; PORTE = 0x00;
out 0x7,R2
.dbline 35
; DDRE = 0x00;
out 0x6,R2
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 42
; }
;
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; void uart0_init(void)
; {
.dbline 43
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 44
; UCSRA = 0x00;
out 0xb,R2
.dbline 45
; UCSRC = BIT(URSEL) | 0x26;
ldi R24,166
out 0x20,R24
.dbline 46
; UBRRL = 0x33; //set baud rate lo
ldi R24,51
out 0x9,R24
.dbline 47
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 48
; UCSRB = 0x18;
ldi R24,24
out 0xa,R24
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sendchar _sendchar fV
; num -> R16
.even
_sendchar::
.dbline -1
.dbline 53
; }
;
;
; void sendchar(uchar num)
; {
.dbline 54
; UDR=num;
out 0xc,R16
L14:
.dbline 55
; while(!(UCSRA&(1<<TXC)));
L15:
.dbline 55
sbis 0xb,6
rjmp L14
X2:
.dbline 56
; UCSRA |= (1<<TXC);
sbi 0xb,6
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbsym r num 16 c
.dbend
.dbfunc e PutChar _PutChar fI
; c -> R20
.even
_PutChar::
st -y,R20
mov R20,R16
.dbline -1
.dbline 59
; }
; int PutChar(char c)
; {
.dbline 60
; if(c == '\n')
cpi R20,10
brne L18
X3:
.dbline 61
; {
.dbline 62
; PutChar('\r');
ldi R16,13
rcall _PutChar
.dbline 63
; }
L18:
.dbline 64
; UDR = c;
out 0xc,R20
L20:
.dbline 65
; while(!(UCSRA &(1<<UDRE)));
L21:
.dbline 65
sbis 0xb,5
rjmp L20
X4:
.dbline 66
; UCSRA |= (1<<UDRE);
sbi 0xb,5
.dbline 67
; return 0;
clr R16
clr R17
.dbline -2
L17:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r c 20 c
.dbend
.dbfunc e main _main fV
; j -> <dead>
; i -> <dead>
.even
_main::
.dbline -1
.dbline 71
; }
;
; void main(void)
; {
.dbline 73
; uchar i,j;
; uart0_init();
rcall _uart0_init
rjmp L25
L24:
.dbline 75
; while(1)
; {
.dbline 76
; delay_nms(500);
ldi R16,500
ldi R17,1
rcall _delay_nms
.dbline 77
; sendchar(0xaa);
ldi R16,170
rcall _sendchar
.dbline 78
; }
L25:
.dbline 74
rjmp L24
X5:
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbsym l j 1 c
.dbsym l i 1 c
.dbend
; ;
;
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -