?? test.s
字號:
.module TEST.C
.area text(rom, con, rel)
.dbfile D:\iccavr\mega16\11\UART\TEST.C
.dbfile D:\iccavr\mega16\11\UART\uart.h
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 9
; /**********串口端口定義**********/
; #define RxD PD0
; #define TxD PD1
;
; #define baudrate 9600 //波特率
; #define F_CPU 8000000UL //定義晶振頻率
;
; void uart_init(void)
; {
.dbline 11
; /*****RS232口線設置*****/
; PORTD|=BIT(RxD)|BIT(TxD);
in R24,0x12
ori R24,3
out 0x12,R24
.dbline 12
; DDRD&=~BIT(RxD);
cbi 0x11,0
.dbline 13
; DDRD|=BIT(TxD);
sbi 0x11,1
.dbline 16
;
; /* 設置波特率*/
; UBRRL=(F_CPU/baudrate/16-1)%256; //本設置波特率不加倍及U2X=0
ldi R24,51
out 0x9,R24
.dbline 17
; UBRRH=(F_CPU/baudrate/16-1)/256;
clr R2
out 0x20,R2
.dbline 24
; /*U2X=1的設置波特率*/
; //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
; //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
;
; /* 接收器與發送器使能*/
; //UCSRB=(1<<RXEN)|(1<<TXEN);
; UCSRB|=BIT(4)|BIT(3);
in R24,0xa
ori R24,24
out 0xa,R24
.dbline 29
;
; /*設置傳輸格式*/
; //異步,8位數據,無奇偶校驗,一個停止位,無倍速
; //UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
; UCSRC|=BIT(7)|BIT(2)|BIT(1);
in R24,0x20
ori R24,134
out 0x20,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e putc _putc fV
; c -> R16
.even
_putc::
.dbline -1
.dbline 34
; }
;
; //串口數據發送,查詢方式
; void putc(unsigned char c)
; {
L3:
.dbline 36
; /* 等待發送緩沖器為空 */
; while (!(UCSRA&(1<<UDRE)));
L4:
.dbline 36
sbis 0xb,5
rjmp L3
X0:
.dbline 38
; /* 將數據放入緩沖器,發送數據 */
; UDR = c;
out 0xc,R16
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e puts _puts fV
; s -> R20,R21
.even
_puts::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 43
; }
;
; //串口字符串發送,查詢方式
; void puts(unsigned char *s)
; {
xjmp L8
L7:
.dbline 45
; while(*s)
; {
.dbline 46
; putc(*s);
movw R30,R20
ldd R16,z+0
xcall _putc
.dbline 47
; s++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 48
; }
L8:
.dbline 44
movw R30,R20
ldd R2,z+0
tst R2
brne L7
X1:
.dbline 49
; putc('\n');
ldi R16,10
xcall _putc
.dbline -2
L6:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r s 20 pc
.dbend
.dbfunc e getc _getc fc
.even
_getc::
.dbline -1
.dbline 55
; //return 1;
; }
;
; //串口數據接收,查詢方式
; unsigned char getc(void)
; {
L11:
.dbline 57
; /* 等待接收數據*/
; while (!(UCSRA&(1<<RXC)));
L12:
.dbline 57
sbis 0xb,7
rjmp L11
X2:
.dbline 59
; /* 從緩沖器中獲取并返回數據*/
; return UDR;
in R16,0xc
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_s _get_s fV
; i -> R20,R21
; num -> R10,R11
; js -> R12,R13
.even
_get_s::
xcall push_xgset303C
movw R10,R18
movw R12,R16
.dbline -1
.dbline 64
; }
;
; //串口接收數據存儲,存儲到數組中
; void get_s(unsigned char *js,unsigned int num)
; {
.dbline 66
; unsigned int i;
; for(i=0;i<num;i++)
clr R20
clr R21
xjmp L18
L15:
.dbline 67
; {
.dbline 68
; js[i]=getc(); //保存數據到數組里面
xcall _getc
movw R30,R20
add R30,R12
adc R31,R13
std z+0,R16
.dbline 69
; }
L16:
.dbline 66
subi R20,255 ; offset = 1
sbci R21,255
L18:
.dbline 66
cp R20,R10
cpc R21,R11
brlo L15
X3:
.dbline -2
L14:
.dbline 0 ; func end
xjmp pop_xgset303C
.dbsym r i 20 i
.dbsym r num 10 i
.dbsym r js 12 pc
.dbend
.dbfile D:\iccavr\mega16\11\UART\TEST.C
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 11
; //ICC-AVR application builder : 2008-11-4 12:34:31
; // Target : M16
; // Crystal: 8.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
;
; #include "uart.h"
;
; void main(void)
; {
.dbline 12
; uart_init();
xcall _uart_init
xjmp L21
L20:
.dbline 14
; while(1)
; {
.dbline 15
; putc(getc());
xcall _getc
xcall _putc
.dbline 16
; }
L21:
.dbline 13
xjmp L20
X4:
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbend
; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -