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

📄 usart 通过232通讯例程.txt

📁 C51的红外控制源程序
💻 TXT
字号:
 
  
232 

RS232通信方式是常用的单片机与PC通信的方式,PIC16F87X系列芯片可以通过SCI(串行通信接口)来实现与PC的通信。以下我们将通过ICDDEMO演示实验板上的RS232通信电路来调试与PC的通信,其电路如下图所示:


其中TX和RX分别为PIC16F877的发送和接收引脚,由于PC的串口输出的是12V电压,因此要实现PIC芯片和PC的通信,还需要进行电平转换,该板使用的电平转换芯片是MAX232。在调试之前请将PC与ICDDEMO演示实验板用9芯串行电缆连接好并锁紧,并且将DIP6(S10)的第2、4开关拨至“ON”的位置上。调试时PC用的上位机程序可以采用WINDOWS带的超级终端(启动方式:开始-)程序-)附件-)通讯-)超级终端),或者使用网上很容易找到的串口调试软件。

1、 串行通信的波特率设置:

要启动串口通讯首先要选择合适的波特率,PIC的SCI接口有一个8位的波特率发生器,它根据SPBRG寄存器的值来决定周期;另外在异步通信的方式下波特率还和BRGH位的状态有关,当BRGH=1时是高速方式。

异步方式下波特率的计算公式为:波特率=Fosc/[64(X+1)](低速方式)或波特率=Fosc/[16(X+1)](高速方式)。其中Fosc是芯片振荡频率,X是SPBRG寄存器的值。通过这个公式我们可以计算出在特定波特率下,需要写入SPBRG寄存器的初始值。例如如果我们采取高速的方式使用9600的波特率,那么当芯片振荡频率是4MHz时,SPBRG=4000000/(9600*16)-1=25(实际是25.042,取最接近的整数值)。

2、 异步方式下的数据发送:

异步发送时,如果TSR和TXREG都为空,那么当数据写入TXREG之后会马上被转移到TSR寄存器。这时TXREG为空,TXIF=1,表明可以再往TXREG中写数据。注意此时发送并未完成,如果要知道数据是否发送完成则需要查询TRMT位。

3、 异步方式下数据的接收:

异步接收时,当接收到停止位时如果RCREG是空的,RSR就会将数据转移至RCREG,传送完成后,置RCIF为1。RCIF是只读位,当RCREG的数据被读出后将由硬件清0。

RCREG寄存器实际上是2级的FIFO(先进先出)存储器,如果RSR中接收到了第3个数据的停止位,而RCREG寄存器2级都是满的,那么将会导致数据溢出,硬件将置OERR为1。请注意必须清除OERR位之后才能重新接收数据,用户可以通过对CREN清0的方式来清除OERR位。

4、 异步通信的数据格式:

在异步工作方式下,串行通信接口采用的是标准不归零(NRZ)格式,即1位起始位、8位或9位的数据位和1位停止位。最常用的是8位数据的格式。



RCDATA EQU 30H 
RCFLAG EQU 31H
RCOneSIGN EQU 0
RCWrong EQU 5
#INCLUDE <P16877.INC>
org 0
nop
goto start
org 4
intentr
goto intsever
;____________________________
org 9
start
clrf RCFLAG 
clrf RCDATA
InitUart
bsf STATUS,RP0
bcf RCFLAG,RCOneSIGN
movlw b'10111111' ;TX=output
movwf TRISC
movlw b'10100110'
movwf TXSTA
movlw 19h 
movwf SPBRG ;9600,high speed mode
bsf STATUS,RP0
movlw b'00100000'
movwf PIE1
movlw b'11000000'
movwf INTCON
bcf STATUS,RP0
movlw b'10010000'
movwf RCSTA
main
btfsc RCFLAG,RCOneSIGN
goto TXLoop
;btfss RCFLAG,RCWrong
goto main
TXLoop
bcf STATUS,RP0
movf RCDATA,w
movwf TXREG
bsf STATUS,RP0
btfss TXSTA,TRMT
goto $-2 
bcf STATUS,RP0
bcf RCFLAG,RCOneSIGN
goto main
;*****************************
intsever
movf STATUS,w
btfsc STATUS,RP0
bcf STATUS,RP0
movwf RCFLAG
btfsc RCSTA,OERR
goto RCerror 
movf RCREG,w
movwf RCDATA 
bsf RCFLAG,RCOneSIGN
retfie
RCerror
bcf STATUS,RP0
bcf RCSTA,CREN 
movf RCREG,w
movf RCREG,w
movlw b'10010000'
movwf RCSTA
btfsc RCFLAG,RCWrong
bsf STATUS,RP0
clrf RCFLAG
retfie
;----------------
end



 

⌨️ 快捷键说明

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