📄 usart.s
字号:
.module usart.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
.dbfunc e USART_Init _USART_Init fV
.even
_USART_Init::
.dbline -1
.dbline 19
; //***************************************************************************
;
; #include <iom8v.h>
; #include <macros.h>
; #include "usart.h"
;
; /*****************************************************************************
; *
; * Function name : USART_Init
; *
; * Returns : None
; *
; * Parameters : unsigned int baudrate
; *
; * Purpose : Initialize the USART
; *
; *****************************************************************************/
; void USART_Init()
; {
.dbline 21
; // Set baud rate (38.4k)EXT OSC = 3.6864M
; UBRRH = 0x00;
clr R2
out 0x20,R2
.dbline 22
; UBRRL = 0x01;
ldi R24,1
out 0x9,R24
.dbline 24
;
; UCSRB = (1 << RXEN)|(1<<TXEN); //RXEN->enable usrt recieving;
ldi R24,24
out 0xa,R24
.dbline 26
; // Set frame format : 8data, 1stop bits
; UCSRC = (1<<URSEL) | (0 << USBS) | (3 << UCSZ0);
ldi R24,134
out 0x20,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Usart_Tx _Usart_Tx fV
; data -> R16
.even
_Usart_Tx::
.dbline -1
.dbline 42
; }
;
;
; /*****************************************************************************
; *
; * Function name : Usart_Tx
; *
; * Returns : None
; *
; * Parameters : char data: byte to send
; *
; * Purpose : Send one byte through the USART
; *
; *****************************************************************************/
; void Usart_Tx(char data)
; {
L3:
.dbline 43
L4:
.dbline 43
; while (!(UCSRA & (1<<UDRE)));
sbis 0xb,5
rjmp L3
.dbline 44
; UDR = data;
out 0xc,R16
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e Usart_TxData _Usart_TxData fV
; iTemp -> R20,R21
; data -> R20
; iValue -> R22,R23
.even
_Usart_TxData::
rcall push_gset2
movw R22,R16
.dbline -1
.dbline 47
; }
; void Usart_TxData(unsigned int iValue)
; {
.dbline 50
; char data;
; unsigned int iTemp;
; iTemp = iValue;
movw R20,R22
.dbline 51
; data = (iTemp >> 8) & 0xff;
mov R20,R21
clr R21
andi R21,0
.dbline 52
; Usart_Tx(data);
mov R16,R20
rcall _Usart_Tx
.dbline 53
; data = iValue & 0xff;
mov R20,R22
andi R21,0
.dbline 54
; Usart_Tx(data);
mov R16,R20
rcall _Usart_Tx
.dbline -2
L6:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r iTemp 20 i
.dbsym r data 20 c
.dbsym r iValue 22 i
.dbend
.dbfunc e Usart_Command _Usart_Command fV
; ComCounter -> <dead>
; J -> R22
; num_bytes -> R10
; command -> R20,R21
.even
_Usart_Command::
rcall push_gset3
mov R10,R18
movw R20,R16
.dbline -1
.dbline 57
; }
; void Usart_Command(char *command, char num_bytes)
; {
.dbline 60
; unsigned char J;
; char ComCounter;
; for (J = 0; J < num_bytes; J++)
clr R22
rjmp L11
L8:
.dbline 61
.dbline 62
mov R30,R22
clr R31
add R30,R20
adc R31,R21
ldd R16,z+0
rcall _Usart_Tx
.dbline 63
L9:
.dbline 60
inc R22
L11:
.dbline 60
cp R22,R10
brlo L8
.dbline -2
L7:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l ComCounter 1 c
.dbsym r J 22 c
.dbsym r num_bytes 10 c
.dbsym r command 20 pc
.dbend
.dbfunc e Usart_Rx _Usart_Rx fc
; data -> <dead>
; iCounter -> R20,R21
.even
_Usart_Rx::
rcall push_gset1
.dbline -1
.dbline 77
; {
; Usart_Tx(command[J]);
; }
; }
; /*****************************************************************************
; *
; * Function name : Usart_Rx
; *
; * Returns : char: byte received
; *
; * Parameters : None
; *
; * Purpose : Receives one byte from the USART
; *
; *****************************************************************************/
; char Usart_Rx(void)
; {
.dbline 80
; int iCounter;
; char data;
; iCounter = 0;
clr R20
clr R21
rjmp L14
L13:
.dbline 82
; while (!(UCSRA & (1<<RXC)))
; {
.dbline 83
; Delay(5);
ldi R16,5
ldi R17,0
rcall _Delay
.dbline 84
; iCounter++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 85
; if (iCounter > 60000) break;
ldi R24,60000
ldi R25,234
cp R24,R20
cpc R25,R21
brsh L16
.dbline 85
rjmp L15
L16:
.dbline 86
L14:
.dbline 81
sbis 0xb,7
rjmp L13
L15:
.dbline 87
; }
; return UDR;
in R16,0xc
.dbline -2
L12:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l data 1 c
.dbsym r iCounter 20 I
.dbend
.area vector(rom, abs)
.org 22
rjmp _Usart_Rx_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
.dbfunc e Usart_Rx_isr _Usart_Rx_isr fV
; data -> R0
.even
_Usart_Rx_isr::
.dbline -1
.dbline 92
; }
; //*****************************************************************************/
; #pragma interrupt_handler Usart_Rx_isr:12
; void Usart_Rx_isr(void)
; {
.dbline -2
L18:
.dbline 0 ; func end
reti
.dbsym l data 1 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -