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

📄 serial.asm

📁 本次设计的RS232 to USB转换器
💻 ASM
字号:
;;Established date:                  2005/09/01

;;********************************************************************
;;transmit data from HT82M99E to RS232 device
SBR_USBToCOM:
		SET            F_TimerInterruptEnable
		SNZ            INTC.3
		CLR            F_TimerInterruptEnable
		CLR            INTC.3
		
		MOV            A,R_FIFOBAK0                     
		MOV            R_OutputReportDataSize,A           
		MOV            A,OFFSET R_FIFOBAK1
		MOV            MP0,A
L_USBToCOM:
		MOV            R0,A
		CALL           SBR_TransmitToRS232Device
		INC            MP0
		SDZ            R_OutputReportDataSize
		JMP            L_USBToCOM
		MOV            A,0FFFH
		MOV            R_OutputReportDataSize,A
		SZ             F_TimerInterruptEnable
		SET            INTC.3
		RET
;;********************************************************************
;;receive data from RS232 TO HT82M99E
ISR_Timer:
		SZ             F_Polling
		JMP            L_ReceiveFromRS232Device

		SZ             P_RXD
		RETI
		SZ             P_RXD                            
		RETI
		MOV            R_AccTimer,A
;mov   a,02H                                            ;;test code(test baudrate)
;xorm  a,pa                                             ;;
		CLR            TMR1C.4
		CLR            INTC.6                           
		SET            F_Polling
		CLR            INTC.1                           
		MOV            A,C_ReBaudRate9600L
		MOV            TMR1L,A
		MOV            A,C_ReBaudRate9600H
		MOV            TMR1H,A
		MOV            A,C_DataBits
		MOV            R_ReDataBits,A

		MOV            A,R_AccTimer
		SET            TMR1C.4
		RETI
;;********************************************************************
SBR_TransmitToRS232Device:                              
		MOV            R_TransmitData,A
		MOV            A,C_DataBits                     
		MOV            R_TrDataBits,A
		MOV            A,11111011B
		ANDM           A,PB                             
		CALL           SBR_BaudRateDelay

L_TransmitToRS232DeviceLoop:		
		SDZ            R_TrDataBits
		JMP            L_TransmitData
		JMP            L_TransmitStopBit
L_TransmitData:
		RRC            R_TransmitData
		SNZ            C
		JMP            L_Transmit0
L_Transmit1:
		MOV            A,00000100B
		ORM            A,PB
		CALL           SBR_BaudRateDelay
		JMP            L_TransmitToRS232DeviceLoop  
L_Transmit0:     
		MOV            A,11111011B
		ANDM           A,PB    
		CALL           SBR_BaudRateDelay
		JMP            L_TransmitToRS232DeviceLoop 

L_TransmitStopBit:
		MOV            A,00000100B
		ORM            A,PB
		CALL           SBR_BaudRateDelay
		RET
;;********************************************************************
SBR_BaudRateDelay:
		MOV            A,R_TrBaudRateH
		MOV            R_TEMP2,A
		MOV            A,R_TrBaudRateL
L_BaudRateDelayLoop:
		SUB            A,7H
		MOV            R_TEMP1,A
		SDZ            R_TEMP1
		JMP            $-1
		MOV            A,0FFH
		SDZ            R_TEMP2
		JMP            L_BaudRateDelayLoop
		RET
;;********************************************************************
L_ReceiveFromRS232Device:
		MOV            R_AccTimer,A
		MOV            A,STATUS
		MOV            R_StatusTimer,A
		SDZ            R_ReDataBits
		JMP            L_ReceiveData
;		JMP            L_ReceiveStopBit
L_ReceiveStopBit:
mov  a,02h                                            ;;test code(test baudrate)
xorm a,pa                                             ;;
		SET            INTC.1                         
		MOV            A,MP0
		MOV            R_MP0Timer,A

		MOV            A,R_ReBufferAddress
		MOV            MP0,A
		INC            R_ReBufferAddress
		MOV            A,OFFSET R_ReceiveBuffer
		ADD            A,C_ReceiveBufferSize
		SUB            A,R_ReBufferAddress
		SZ             C
		JMP  		   L_WriteDataToBufferRe
		MOV            A,OFFSET R_ReceiveBuffer
		MOV            R_ReBufferAddress,A
		MOV            A,01H
		ORM            A,PA                            
  
L_WriteDataToBufferRe:
		MOV            A,R_ReceiveData
		MOV            R0,A
		CLR            F_Polling
		CLR            TMR1C.4
		CLR            INTC.6
		MOV            A,C_PollingL
		MOV            TMR1L,A
		MOV            A,C_PollingH
		MOV            TMR1H,A
		
		MOV            A,R_MP0Timer
		MOV            MP0,A
		MOV            A,R_StatusTimer
		MOV            STATUS,A
		MOV            A,R_AccTimer
		SET            TMR1C.4
		RETI    
L_ReceiveData:
		CLR            C
		SZ             P_RXD
		SET            C
		RRC            R_ReceiveData
;mov  a,02h                                           ;;test code(test baudrate)
;xorm a,pa                                            ;;
		MOV            A,R_StatusTimer
		MOV            STATUS,A
		MOV            A,R_AccTimer
		RETI
;;********************************************************************
SBR_AddBufferAddress:
		INC            MP0
		MOV            A,MP0
		AND            A,7FH
		MOV            R_TrBufferAddress,A
		MOV            A,OFFSET R_ReceiveBuffer
		ADD            A,C_ReceiveBufferSize
		SUB            A,R_TrBufferAddress
		MOV            A,OFFSET R_ReceiveBuffer
		SZ             C
		MOV            A,R_TrBufferAddress

		MOV            R_TrBufferAddress,A
		MOV            MP0,A
		RET           
;;********************************************************************
SBR_ClearFIFOBAK:
		CLR            R_FIFOBAK0
		CLR            R_FIFOBAK1
		CLR            R_FIFOBAK2
		CLR            R_FIFOBAK3
		CLR            R_FIFOBAK4
		CLR            R_FIFOBAK5
		CLR            R_FIFOBAK6
		CLR            R_FIFOBAK7
		RET
;;********************************************************************

⌨️ 快捷键说明

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