天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234

技術支持

16C5X模擬串口

更新時間: 2019-03-26

*******************************************************************
; Plug in Libraries for the by 12 architecture *
; Written and Tested using MPASM V1.40 *
;********************************************************************
; Filename: SWUART12.ASM *
; Date: 05 November 1997 *
; File Version: 1.00 *
;********************************************************************
; Functions: *
; *
; OpenUART *
; getcUART *
; putcUART *
;********************************************************************
; Revision History: *
; V1.00 - Beta release of Peripheral Libraries *

;********************************************************************
; Notes: *
; - Change these parameters as needed and reassemble the library *
;
title "Software UART for by 12 Architecture.
list p=pic16c5x
#include
;
#define UARTPORT PORTA
#define TXPIN 3
#define RXPIN 2
#define TRISMASK 0x04
;
MODE equ 1 ; If ( X_MODE==1) Then transmit LSB first
Nbit equ 1 ; if (X_Nbit==1) # of data bits ( Transmission )
; is 8 else 7
STOPBITS equ 0 ; if Sbit2 = 0 then 1 Stop Bit else 2 Stop Bits
CLOCKSPEED equ 10
BAUDRATE equ 9600
;
; *******************************************************************
;

if UARTPORT < 5 || UARTPORT > 7
messg "Invalid port value"
endif
if RXPIN > 7
messg "Invalid rxpin value"
endif

if TXPIN > 7
messg "Invalid txpin value"
endif

; both Rx and Tx pins must be on the same port
portmask = ((0x01 << RXPIN) | TRISMASK) & ~(0x01 << TXPIN)
;
;
LSB equ 0
MSB equ 7

;***************** Communication Parameters **************************
;
ifndef MODE
MODE equ 1 ; If ( X_MODE==1) Then transmit LSB first
; if ( X_MODE==0) Then transmit MSB first ( CODEC like )
endif
ifndef Nbit
Nbit equ 1 ; if (X_Nbit==1) # of data bits ( Transmission ) is 8 else 7
endif
;
ifndef STOPBITS
STOPBITS equ 0 ; if Sbit2 = 0 then 1 Stop Bit else 2 Stop Bits
endif
ifndef CLOCKSPEED
error "CLOCKSPEED not defined"
endif
ifndef BAUDRATE
error "BAUDRATE not defined"
endif

;
;
if (CLOCKSPEED != 4 && CLOCKSPEED != 8 && CLOCKSPEED != 10 && CLOCKSPEED != 20)
error "Clockspeed not supported. Should be one of (4, 8, 10 or 20 Mhz)"
endif
if (BAUDRATE != 1200 && BAUDRATE != 2400 && BAUDRATE != 4800 && BAUDRATE != 9600)
error "Baudrate not supported. Baudrate should be one of (1200, 2400, 4800, 9600)"
endif

if CLOCKSPEED == 4
if BAUDRATE == 19200
error "Baudrate and clock speed incompatable"
endif
if BAUDRATE == 9600
BAUD_1 equ .34 ; 3+3X = CLKOUT/Baud (9600 baud, 4Mhz)
BAUD_4 equ .42 ; 3+3X = 1.25*CLKOUT/Baud
BAUD_X equ .31 ; 11+3X = CLKOUT/Baud
BAUD_Y equ .32 ; 9 +3X = CLKOUT/Baud
endif
if BAUDRATE == 4800
BAUD_1 equ .68 ; 3+3X = CLKOUT/Baud (9600 baud, 4Mhz)
BAUD_4 equ .86 ; 3+3X = 1.25*CLKOUT/Baud
BAUD_X equ .66 ; 11+3X = CLKOUT/Baud
BAUD_Y equ .66 ; 9 +3X = CLKOUT/Baud
endif
if BAUDRATE == 2400
BAUD_1 equ .138 ; 3+3X = CLKOUT/Baud (9600 baud, 4Mhz)
BAUD_4 equ .173 ; 3+3X = 1.25*CLKOUT/Baud
BAUD_X equ .135 ; 11+3X = CLKOUT/Baud
BAUD_Y equ .136 ; 9 +3X = CLKOUT/Baud
endif
if BAUDRATE == 1200
error "Baudrate and clock speed incompatable"
endif
endif
if CLOCKSPEED == 8 

if BAUDRATE == 19200
error "Baudrate and clock speed incompatable"
endi

; rest of the byte, saves it in RcvReg, *
; and sets the carry bit. *
;*****************************************************************
getcUART
clrf RcvReg ; Clear RcvReg
bcf STATUS,C ; Clear the carry bit (assume nothing rx'd)
btfsc UARTPORT,RXPIN ; check for a Start Bit

retlw 0 ; no char received.. return null.
Delay4 ; delay for 1

IF Nbit
movlw 8 ; 8 Data bits
ELSE
movlw 7 ; 7 data bits
ENDIF
;
movwf Count
R_next bcf STATUS,C
IF MODE
rrf RcvReg,f ; to set if MSB first or LSB first
ELSE
rlf RcvReg,f
ENDIF
btfsc UARTPORT, RXPIN
;
IF MODE
IF Nbit
bsf RcvReg,MSB ; Conditional Assembly
ELSE
bsf RcvReg,MSB-1

ENDIF
ELSE
bsf RcvReg,LSB
ENDIF
;
DelayY
decfsz Count,f
goto R_next
bsf STATUS,C
retlw 0x01
;
;
;*****************************************************************
; Function Name: putcUART *
; Return Value: none *
; Parameters: byte to send, in the W register *
; RAM Usage: 0 *
; ROM Usage: *

; Description: Sends the contents of the W register out *
; the TX_PIN. *
;*****************************************************************
;
putcUART
movwf XmtReg
IF Nbit
movlw 8
ELSE
movlw 7
ENDIF
movwf Count
;
IF MODE
ELSE
IF Nbit
ELSE
rlf XmtReg,f
ENDIF
ENDIF
;
bcf UARTPORT, TXPIN ; Send Start Bit
Delay1 ; 52 uS (19200 baud)
X_next bcf STATUS,C
;
IF MODE
rrf XmtReg,f ; Conditional Assembly

ELSE ; to set if MSB first or LSB first
rlf XmtReg,f
ENDIF
;
btfsc STATUS,C
bsf UARTPORT,TXPIN
btfss STATUS,C
bcf UARTPORT, TXPIN
DelayX
decfsz Count,f
goto X_next
bsf UARTPORT, TXPIN ; Send Stop Bit


404
返回首頁 |  返回上一頁
联系我们: 陇南市| 开平市| 新宁县| 阜城县| 阳原县| 上杭县| 襄樊市| 石狮市| 前郭尔| 福州市| 佛学| 新营市| 香格里拉县| 贵溪市| 手游| 当雄县| 郓城县| 若尔盖县| 迁西县| 凌海市| 安平县| 盐山县| 绥化市| 仪陇县| 彭州市| 桐柏县| 浙江省| 精河县| 永胜县| 樟树市| 铜鼓县| 吐鲁番市| 游戏| 安达市| 五寨县| 巴南区| 建瓯市| 德令哈市| 平安县| 宁安市| 来安县|