⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.asm

📁 .ifnz I2C_SUPPORT ************************************************************** Function : fPro
💻 ASM
字号:
.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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -