?? 串口通信.s
字號:
.module _串口通信.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信/delay.h
.dbfunc e DelayUS _DelayUS fV
; time -> R16,R17
.even
_DelayUS::
.dbline -1
.dbline 9
; //內部晶振 8M
; #include <ioM16v.h>
; #include <macros.h>
; #include"delay.h"
;
;
;
; /*------宏定義------*/
; #define uchar unsigned char
xjmp L3
L2:
.dbline 11
subi R16,1
sbci R17,0
L3:
.dbline 10
; #define uint unsigned int
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e DelayMS _DelayMS fV
; i -> R20,R21
; time -> R16,R17
.even
_DelayMS::
xcall push_gset1
.dbline -1
.dbline 20
;
;
;
; //端口初始化
; void port_init(void)
; {
; PORTA = 0x00;//設置端口方向、數據
; DDRA = 0x00;
; PORTB = 0x00;
; DDRB = 0x00;
xjmp L7
L6:
.dbline 23
; PORTC = 0x00;
; DDRC = 0x00;
; PORTD = 0x00;
.dbline 24
; DDRD = 0x03;
ldi R20,1
ldi R21,0
xjmp L12
L9:
.dbline 25
L10:
.dbline 24
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 24
cpi R20,118
ldi R30,4
cpc R21,R30
brlo L9
.dbline 26
L7:
.dbline 22
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L6
tst R3
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r time 16 i
.dbend
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信\串口通信.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 16
.dbline 17
clr R2
out 0x1b,R2
.dbline 18
out 0x1a,R2
.dbline 19
out 0x18,R2
.dbline 20
out 0x17,R2
.dbline 21
out 0x15,R2
.dbline 22
out 0x14,R2
.dbline 23
out 0x12,R2
.dbline 24
ldi R24,3
out 0x11,R24
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e usart_init _usart_init fV
.even
_usart_init::
.dbline -1
.dbline 30
; }
;
;
; //串口通信初始化
; void usart_init(void)
; {
.dbline 31
; UCSRB = 0x00;//禁止中斷
clr R2
out 0xa,R2
.dbline 32
; UCSRA = 0x00;//數據發送、接受位、數據幀錯誤、奇偶校驗、溢出、多機模式
out 0xb,R2
.dbline 33
; UCSRC = BIT(URSEL) | 0x06;//使用UBRRH寄存器、數據位數8位
ldi R24,134
out 0x20,R24
.dbline 34
; UBRRL = 0x19;//設置波特率
ldi R24,25
out 0x9,R24
.dbline 35
; UBRRH = 0x00;
out 0x20,R2
.dbline 36
; UCSRB = 0x98;//接受中斷使能、接受、發送使能、不使用第9數據位
ldi R24,152
out 0xa,R24
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart_putchar _uart_putchar fV
; x -> R16
.even
_uart_putchar::
.dbline -1
.dbline 39
; }
; void uart_putchar(char x)
; {
L16:
.dbline 41
L17:
.dbline 40
; while (!(UCSRA&0x20))//查詢發送區是否為空
sbis 0xb,5
rjmp L16
.dbline 42
; ;
; UDR=x; //發送數據
out 0xc,R16
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r x 16 c
.dbend
.area vector(rom, abs)
.org 44
jmp _usart_rx_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列單片機實驗開發板演示程序\串口通信\串口通信.c
.dbfunc e usart_rx_isr _usart_rx_isr fV
; y -> R20
.even
_usart_rx_isr::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 48
; }
;
; //串行接收結束中斷服務程序
; #pragma interrupt_handler usart_rx_isr:12
; void usart_rx_isr(void)
; {
.dbline 50
; char y;
; y=UDR;
in R20,0xc
.dbline 51
; uart_putchar(y);//把接收到的數據返回給上位機
mov R16,R20
xcall _uart_putchar
.dbline -2
L19:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r y 20 c
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 56
; }
;
;
; void init_devices(void)
; {
.dbline 57
; CLI(); //禁止所有中斷
cli
.dbline 58
; MCUCR = 0x00;//INT0、INT1中斷觸發方式
clr R2
out 0x35,R2
.dbline 59
; MCUCSR = 0x80;//禁止JTAG
ldi R24,128
out 0x34,R24
.dbline 60
; GICR = 0x00;//外部中斷使能
out 0x3b,R2
.dbline 61
; port_init();
xcall _port_init
.dbline 62
; usart_init();
xcall _usart_init
.dbline 63
; SEI();//開全局中斷
sei
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 67
; }
; //主函數
; void main(void)
; {
.dbline 68
; init_devices();
xcall _init_devices
xjmp L23
L22:
.dbline 71
.dbline 72
nop
.dbline 73
L23:
.dbline 70
xjmp L22
X1:
.dbline -2
L21:
.dbline 0 ; func end
ret
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -