| 本刊网络补充版(www.dpj.com.cn)中,介绍了简单的C语言参考源程序。此段程序实现1200b/s全双工串行通信,1位起始位,8位数据位,无校验位,1位停止位,没有帧错误等判别。编译环境为HITECH-PICC编译器V8.00PL4或更高版。 在网络补充版的程序中,关键部分是TMR0的中断服务。TMR0每隔278μs左右中断一次,TMR0的中断响应即为软件UART接收和发送全双工通信过程的实现。通过Hitech-PICC高效的代码编译后,约有150条单字指令代码,整个中断服务平均用约35个指令周期,即实现一路软件UART在4 MHz工作频率下占用MCU约12%的运行带宽。理论上,只要保证MCU留有足够的运行带宽给其它任务,在此中断服务程序内把接收和发送的代码再复制一份或多份(数据结构独立),即可实现多路软件UART。当然,如果每路的波特率不同,采样频率必须是最高波特率的三倍。不同波特率的采样点间隔独立调整。 此法最大的好处是软硬件配置极其灵活:接收发送的引脚可以任意定义;采样定时可以用不同的定时器实现;利用同一个定时采样可以方便地实现多路软件UART等。缺点是:不管有无数据通信,始终占用MCU运行带宽;串行通信的波特率不能太高,4 MHz工作的PIC单片机一般能实现2400bps的全双工通信。当然,可以通过提高MCU的振荡频率来实现高波特率通信,当PIC单片机工作在20 MHz时,实现9600b/s绰绰有余。 2 起始位中断捕捉、定时采样法 实现此法的硬件条件是PIC单片机有外部脉冲下降沿中断触发功能,在中档以上PIC单片机中有RB0/INT外部中断脚,CCP1/CCP2脉冲沿捕捉脚,PORTB的第4/5/6/7电平变化中断脚等都可以满足。另外需配备一个定时器,以定时中断方式对接收码元正确采样,或发送串行数据流。其关键的异步接收工作原理简介如图4所示。
|