uart.asm

来自「.ifnz I2C_SUPPORT ********************」· 汇编 代码 · 共 114 行

ASM
114
字号
.ifnz UART_SUPPORT

		sta		rIntFlag
		bbr		INT_TIMER_A_bit,rIntFlag,lGoCheckTimerB

		;;**************************
		;;Run UART service start
		;;**************************

		;;rUartCnt  0  ,  1   ,  2  ,   0  ,  1   ,  2  , ....  
		;;         idle  recv   tran  idle  recv   tran  

		bbr		0,rUartTranCnt,lUartSendEnd
		bbr		1,rUartTranCnt,lUartSendEnd

		lda		rUartSendLen
		beq		lUartSendEnd

lUartSendBit:
		ror		rTxdRegister+1
		ror		rTxdRegister
		bcc		lUartSendLow
		;;STB=1
		smb		UART_TXD_bit,UART_PORT
		bra		lUartSendOk

lUartSendLow:
		;;STB=0
		rmb		UART_TXD_bit,UART_PORT

lUartSendOk:
		dec		rUartSendLen			;;decrease len
		stz		rUartTranCnt

lUartSendEnd:
		inc		rUartTranCnt

.if 1
		;;check receiver flage
		bbs		7,rUartRecvFlag,lAreadyGetStart

		;;check the pin=high -> exit
		bbs		UART_RXD_bit,UART_PORT,lUartFunExit

		lda		#9						;;find 0 -> start
		sta		rUartRecvLen

		;;receiver delay count = 0
		stz		rUartRecvCnt

		;;start bit detect
		smb		7,rUartRecvFlag
		bra		lUartFunExit

lAreadyGetStart:
		bbr		0,rUartRecvCnt,lUartSkipRecv
		bbr		1,rUartRecvCnt,lUartSkipRecv

		;;clear counter
		stz		rUartRecvCnt

lUartRecvBit:
		bbr		UART_RXD_bit,UART_PORT,lUartRecvLow
		;;B=1
		sec
		bra		lUartRecvOk

lUartRecvLow:
		;;B=0
		clc

lUartRecvOk:
		ror		rRxdRegister+1
		ror		rRxdRegister

		;;check the length
		dec		rUartRecvLen
		bne		lUartSkipRecv

		rmb		7,rUartRecvFlag

		;;keep data
		ldx		RxdPointW

		;;remove stop bit
		rol		rRxdRegister
		lda		rRxdRegister+1
		rol		a
		sta		RxdBuffer,x

		inx
		cpx		RxdPointR				;; if write point+1 == read point
										;; keep the point
										;; last receiver data will be overwrite
										;; when the buffer overflow
		beq		lUartFunExit
		stx		RxdPointW

lUartSkipRecv:
		inc		rUartRecvCnt

lUartFunExit:
.endif
       
		;;**************************
		;;Run UART service end
		;;**************************

lGoCheckTimerB:
		bbs		INT_TIMER_B_bit,rIntFlag,lGoRunTimerB
		jmp		lIrqExit

lGoRunTimerB:
.endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?