您当前的位置:五五电子网电子知识电工技术电工文摘如何利用软件实现PI16F5X单片机异步串行口 正文
如何利用软件实现PI16F5X单片机异步串行口

如何利用软件实现PI16F5X单片机异步串行口

点击数:7266 次   录入时间:03-04 12:00:14   整理:http://www.55dianzi.com   电工文摘

      1. 概述


       PIC16F5X微控制器为Microchip公司生产的一系列低成本、高性能、8 位、全静态和基于闪存的CMOS 单片机。本文将详细介绍如何使用PIC16F5X实现异步串行I/O口。


       系统设计中通常需要完成片对片的数据串口通信,虽然PIC16F5X系列微控制器没有片上串行口,但是可以通过软件模拟串口实现通信,即一个I/O口作为输入,用于接收数据,另一个I/O口作为输出,用于发射数据。当考虑到批量应用时,通过软件模拟实现的串行I/O口成本更低。
 
       2. 实现原理
   

       文中通过两个程序模拟全双工RS-232通信和半双工通信。半双工通信时,使用8MHz作为输入时钟,波特率可以达到19200;全双工通信时,8MHz晶振时波特率可达到9600,20MHz晶振时可达到19200。通讯数据格式为一个或两个停止位、7个或8个数据位、没有奇偶位,可以通过LSb或MSb发送或接收。输入时钟越高时,分辨率相应会越好。用户须根据通信改变头文件;软件不提供握手协议,用户使用XON/XOFF可合并软件握手;对于硬件握手,使用RTS和CTS作为另外的两个数字I/O口即可。
   

       串口发送和接收的流程图分别如图1和图2所示,在传输过程中,起始位通过传送数据位DX发送数据,DX=0时持续B秒;当DX置1或清0时,每隔B秒则相应回应数据位一次。
 

                                         图1  发送流程图

                                          图2  接收流程图
     2.1 串口发送原理


     DX输出脚用于发送数据,串口发送源程序如下所示:
;**************************************************************************
                          Transmitter
**************************************************************************;
     Xmtr   movlw   8
       movwf   XCount
       bcf      Port_A,DX
X_next call      Delay
       rrf      XmtReg 
       btfsc    STATUS,CARRY
       bsf      Port_A,DX
       btfss    STATUS,CARRY
       bcf      Port_A,DX
       decfsz   Count
       goto     X_next
X_Stop call      Delay
       bsf      Port_A,DX
x_Over  goto     X_Over


       在用户程序中,用户须下载数据并发送到XmtReg,然后使X_flag置1,检测数据是否为继续发送状态;同时,当X_flag置1时改变XmtReg值将使传送的数据发生错误。


       2.2 串口接收原理


       DR脚用于接收数据。用户须经常确保R_done标志位是否接收完毕。如果继续接收,则R_flag置1保持不变;当接收完毕时,R_done置1。当检测到下一个起始位时,R_done清0。同时,用户须经常核对R_done标志位的值,当该位置1时,接收数据存储在寄存器RcvReg中;当检测到一个新的起始位时,该寄存器清0,即当(R)_done置1时,接收数据存储在寄存器RcvReg中,其它寄存器数据从RcvReg中进行复制;当检测到下一个起始位时,则清除R_done标志位。


       用户可以改变代码实现接收,如果接收的速度很大时,可发送XOFF信号,为接收到更多的数据,须发送XON信号。串口接收源程序如下所示:
;**********************************************************************
                            Receiver
***********************************************************************;
Rcvr     btfsc    Port_A, DR
         Goto    Rcvr
         movlw  8
         clrf     RcvReg
R_next   call     Delay
         bcf     STATUS,CARRY
         rrf      RcvReg
         btfsc    Port_A,DR
         bsf      RcvREG,MSB
         call     Delay
         decfsz   Rcount
         goto     R_next
R_Over   goto     R_Over
   
       3. 软件调试


       为更好地模拟串口通信,排除用户电路故障,检测硬件运行状态或者检查有问题的单片机系统,本文采用PICE-II进行仿真调试。该仿真器具有单步、断点、读出、修改等操作,可以随时观看中间结果而不改变运行中原有数据的性能和结果,更显著的特点是采用硬件断点,不会引起错误、采用CPLD大规模集成电路设计、4K向前实时跟踪程序的运行、可以随时观察程序存储器、内部RAM以及特殊功能存储器的内容。


       该仿真主机采用专用的时钟芯片,可以提供30kHz~40MHz之间任意频率的仿真时钟。在该程序中,当需改变波特率时只要改变仿真时钟即可,无需更换目标板晶振等,即很大程序上省去了更换晶振的麻烦。在模拟半双工通信时,文中选择波特率19200,该系统工作时钟频率可设置为8MHz,也可以根据用户需要选择频率。时设置如图3所示。

                                                图3  时钟设置
       文中采用了实时跟踪技术,具有很强的排除错误能力,可提供4K实时跟踪查看窗口。程序全速运时,即可进行实时跟踪。当程序遇到断点或人为停止时,可以通过窗口观察前4K运行的指令、发送的数据是否完毕,同时可判断程序设计的思路是否正确、程序有没有跑飞、在哪里出现了问题,以便快速检查错误的根源。实时跟踪的窗口如图4所示。
 

                                               图4     跟踪窗口


      在程序运行过程中,当不需要查看全部数据存储器的值,只须查看与程序运行有关的特殊功能寄存器或是用户定义的变量值时,可打开“观察变量窗口” ,在“增加SFR” 下拉列表可以查看特殊的功能寄存器,也可以对寄存器的值进行修改;在“增加Symbol” 下拉列表中可增加用户定义的变量。以本文的源程序为例,可以看到TMR0、PORTA、PORTB的值,也可以看到自定义变量DR、DX、XmtReg、RcvReg的值,从而可以更好地控制接收和发送是否完毕。

      观察变量窗口如图5所示。

[1] [2]  下一页


本文关键字:如何  单片机  软件  电工文摘电工技术 - 电工文摘