?? uart0.s43
字號:
#include "device.h"
#define _def_uart 1
#include "UART0.h" ; UART Externals
#if __VER__ < 200
RSEG UDATA0
#else
RSEG DATA16_Z
#endif
_UART_RX_Buffer_Size
UART_RX_Buffer_Size equ 20 ; Define Size of Receive Buffer
_UART_RX_Buffer
UART_RX_Buffer DS UART_RX_Buffer_Size ; Allocate Buffer
_UART_RX_Bytes
UART_RX_Bytes DS 2 ; Counter for RX'd Bytes
_UART_TX_Buffer_Size
UART_TX_Buffer_Size equ 40 ; Define Size of Transmit Buffer
_UART_TX_Buffer
UART_TX_Buffer DS UART_TX_Buffer_Size ; Allocate Buffer
_UART_TX_Bytes
UART_TX_Bytes DS 2 ; Counter for Bytes to TX
_UART_Status
UART_Status DS 2 ; UART Status Register
_TXData
TXData DS 2 ; Buffer for Data to transmit
_RXTXData
RXTXData DS 2 ; Work Register for Transmit/Receive
EVEN
;******************************************************************************
RSEG CODE
;******************************************************************************
;------------------------------------------------------------------------------
URX0_ISR ; UART0 Receive Interrupt Routine
;------------------------------------------------------------------------------
RX1
push R15 ; Save Register
mov.b &RXBUF0,R15 ; RXed character
bit #LineReceived,UART_Status ; ignore if last Buffer has not been processed
jnz End_RX0_ISR ;
; ignore LF
cmp.b #'\n',R15
jeq End_RX0_ISR
; Line Received
cmp.b #'\r',R15
jne RX1_1
bis #LineReceived,UART_Status
bic #LPM3,2(SP) ; clear LPM on Stack
clr R15 ; end received String with '0' Char
jmp RX1_2
RX1_1
; <ESC> -> Clear Buffer
cmp.b #0x1B,R15
jne RX1_2
clr UART_RX_Bytes ; Clear RX Buffer
jmp End_RX0_ISR
RX1_2
; special single char received
cmp.b #'0',R15
jc RX1_3
bis #LineReceived,UART_Status
bic #LPM3,2(SP) ; clear LPM on Stack
RX1_3
; Byte received -> move to Buffer
push R14
mov UART_RX_Bytes,R14
mov.b R15,UART_RX_Buffer(R14)
cmp #(UART_RX_Buffer_Size-1),UART_RX_Bytes
jeq RX1_BufFull ; Buffer full -> Skip inc Pointer
inc UART_RX_Bytes
RX1_BufFull
pop R14
; jmp End_RX0_ISR
End_RX0_ISR
pop R15
reti
;--------------------------------------------------------------
; Extract the number out of the received string
; R12 has to contain the pointer to the start of the string
; The string have to be terminated by a '0' char
; Used registers R6, R8
; R12 contains return value
_GetNumber:
GetNumber
push R6
push R8
mov R12,R8
clr R12
LoopGetNumber
tst.b 0(R8)
jz EndGetNumber
mov.b @R8+,R6
call #Append_NUM
jmp LoopGetNumber
EndGetNumber
pop R8
pop R6
ret
;--------------------------------------------------------------
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Subroutine : Convert character in R6 into a hex number (0..9,a..f)
; and shift it left aligned into R12.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Append_NUM
SUB #030h,R6 ; Convert character in R6 into hex
CMP #10,R6
JLO Append_NUM1
SUB #039,R6
Append_NUM1
RLA R12 ; Shift summary in R12 one digit left
RLA R12
RLA R12
RLA R12
ADD R6,R12 ; place new digit to the rightmost digit
RET
;******************************************************************************
#if !defined(__CROSSWORKS__)
COMMON INTVEC
#else
RSEG INTVEC
KEEP
#endif
ORG UART0RX_VECTOR ;USART0 RX Vector
DW URX0_ISR
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -