利用74HC00设计PIC微控制器
发布时间:2008/6/3 0:00:00 访问次数:562
尽管microchip公司不断为其日益扩大的pic微控制器产品线增加更多功能,但有时设计工程师只需其中一小部分功能。也许设计工程师还需要目前尚不存在的一组特性,或者继承了一种设计但不能升级,或者可能只想进行试验并打破以往传统限制。本文将介绍一些挖掘各种pic产品极限的应用方法,其中一些技巧也适用于其它微控制器,但这里只介绍用于pic的源代码与具体示例。本文还将分析一些方法,它们是关于如何增加另一个异步串口、更容易地处理精度扩展(32位或更高)算法、增强并行从端口以及如何使用一些异步串口常被忽略的特性。
图1:作为异步串行数据的ascii码字母“q”(0x51)。
异步串口
许多pic都具有一个或两个异步串口,但如果它们不够用,那么位拆裂(bit-banging)剩余i/o管脚是一种常用的解决方案,且适用于整个pic系列。但这种方案是软件密集型的,它在保持可靠通信所需的关键时序的同时,将难以进行其它任何操作。另一种选择方案是检测起始位的上升沿,并采用定时器中断来读取数据。这种方法在位拆裂方法的基础上有了很大改进,但仍需要大量的软件开销以处理每一位的中断,而面向任何中断的延迟都可能导致同步问题。
图2:作为同步串行数据的ascii码字母“q”(0x51)。
大多数pic还提供一个串行外围接口(spi)。仅需很小开销,普通的同步spi就可被设计成能够接收标准的异步传输。
一个典型的异步数据流包括一个起始位(总为0)、8个数据位(最低有效位在前)以及一个终止位(总为1)。图1给出了一个接收ascii码字母“q”(16进制为51)的例子,也可采用更少的数据位或者增加一个奇偶校验位或额外的终止位。
spi端口也采用8位数据,但它同步在两个不同管脚上发送和接收字节。数据时钟可消除对起始位或终止位的需要,且最高有效位在前。图2显示由spi端口发送的一些数据,spi端口在每个时钟的下降沿接收数据,在上升沿发送数据。
开始启动
一旦被接收,数据肯定被翻转,但如果spi时钟的下降沿与每一个异步数据位的中心同步,那么数据也可能保持原样。起始位的下降沿提供最初的同步记号,其它同步记号则利用pic的一个spi选项。这里有好几种定时选项,包括使用定时器tmr2等。tmr2计数直到其值等于特殊函数寄存器pr2的值,然后tmr2触发spi时钟并复位为0,接着再继续计数。如果tmr2从大于pr2的值开始计数,则第一个时间间隔将比平常的时钟周期要长,因为它首先要复位到0(如图3所示)。
图3:tmr2在起始位的前沿初始化为 -pr2。
spi端口接管产生同步记号的任务后,它将用所有的8个数据位进行计时而无需其它开销。但它会占用从起始位上升沿到tmr2与spi端口正确初始化这段时间,从而导致中断延迟,如果启用优先级更高的中断,延迟时间将更长。不过不用担心这种中断延迟,因为pic还有另一个秘密武器。许多pic都具有两个或多个捕获/比较/pwm模块,i/o管脚可在下降沿上捕获定时器的值,在起始位的上升沿则将tmr1值存储在一个ccprx特殊函数寄存器中,并产生一次中断。中断服务程序将带有tmr1-ccprx-pr2值的tmr2初始化,以消除掉任何延迟。列表1给出的是一个典型的中断程序。
可选的“if(!ccp1)”行可确认输入管脚是否仍为低,以避免将瞬间毛刺读成串行数据。由于-pr2(未标出)必须大于pr2,所以应仔细选择tmr2的预定标器的值,并使tmr1的预定标器的值与之一样。在上面例子中,dtim2pr2为52。最坏情况下的中断延迟应该小于串行数据速率,例如在9,600波特上,该值大约为104微秒或16mhz pic上416条指令的执行时间。spi中断正好能够隐藏数据并启用下一个字节的ccp1中断,但切记在某些时刻翻转数据位。
尽管设计工程师通常不能控制输入数据的到达时间,且两个接收器必须时刻保持警惕,但设计者通常能交替使用两个发送器。有很多方法可用来处理硬件路由,仅需少数几个逻辑门或晶体管以及一个输出位就可进行这种选择。图4显示采用一个含4个nand门的74hc00的方法。可在“串口1”上“选择”高速发送,在“串口2”上“选择”低速发送,这两种路径的“数据输入”都来自tx管脚。
尽管microchip公司不断为其日益扩大的pic微控制器产品线增加更多功能,但有时设计工程师只需其中一小部分功能。也许设计工程师还需要目前尚不存在的一组特性,或者继承了一种设计但不能升级,或者可能只想进行试验并打破以往传统限制。本文将介绍一些挖掘各种pic产品极限的应用方法,其中一些技巧也适用于其它微控制器,但这里只介绍用于pic的源代码与具体示例。本文还将分析一些方法,它们是关于如何增加另一个异步串口、更容易地处理精度扩展(32位或更高)算法、增强并行从端口以及如何使用一些异步串口常被忽略的特性。
图1:作为异步串行数据的ascii码字母“q”(0x51)。
异步串口
许多pic都具有一个或两个异步串口,但如果它们不够用,那么位拆裂(bit-banging)剩余i/o管脚是一种常用的解决方案,且适用于整个pic系列。但这种方案是软件密集型的,它在保持可靠通信所需的关键时序的同时,将难以进行其它任何操作。另一种选择方案是检测起始位的上升沿,并采用定时器中断来读取数据。这种方法在位拆裂方法的基础上有了很大改进,但仍需要大量的软件开销以处理每一位的中断,而面向任何中断的延迟都可能导致同步问题。
图2:作为同步串行数据的ascii码字母“q”(0x51)。
大多数pic还提供一个串行外围接口(spi)。仅需很小开销,普通的同步spi就可被设计成能够接收标准的异步传输。
一个典型的异步数据流包括一个起始位(总为0)、8个数据位(最低有效位在前)以及一个终止位(总为1)。图1给出了一个接收ascii码字母“q”(16进制为51)的例子,也可采用更少的数据位或者增加一个奇偶校验位或额外的终止位。
spi端口也采用8位数据,但它同步在两个不同管脚上发送和接收字节。数据时钟可消除对起始位或终止位的需要,且最高有效位在前。图2显示由spi端口发送的一些数据,spi端口在每个时钟的下降沿接收数据,在上升沿发送数据。
开始启动
一旦被接收,数据肯定被翻转,但如果spi时钟的下降沿与每一个异步数据位的中心同步,那么数据也可能保持原样。起始位的下降沿提供最初的同步记号,其它同步记号则利用pic的一个spi选项。这里有好几种定时选项,包括使用定时器tmr2等。tmr2计数直到其值等于特殊函数寄存器pr2的值,然后tmr2触发spi时钟并复位为0,接着再继续计数。如果tmr2从大于pr2的值开始计数,则第一个时间间隔将比平常的时钟周期要长,因为它首先要复位到0(如图3所示)。
图3:tmr2在起始位的前沿初始化为 -pr2。
spi端口接管产生同步记号的任务后,它将用所有的8个数据位进行计时而无需其它开销。但它会占用从起始位上升沿到tmr2与spi端口正确初始化这段时间,从而导致中断延迟,如果启用优先级更高的中断,延迟时间将更长。不过不用担心这种中断延迟,因为pic还有另一个秘密武器。许多pic都具有两个或多个捕获/比较/pwm模块,i/o管脚可在下降沿上捕获定时器的值,在起始位的上升沿则将tmr1值存储在一个ccprx特殊函数寄存器中,并产生一次中断。中断服务程序将带有tmr1-ccprx-pr2值的tmr2初始化,以消除掉任何延迟。列表1给出的是一个典型的中断程序。
可选的“if(!ccp1)”行可确认输入管脚是否仍为低,以避免将瞬间毛刺读成串行数据。由于-pr2(未标出)必须大于pr2,所以应仔细选择tmr2的预定标器的值,并使tmr1的预定标器的值与之一样。在上面例子中,dtim2pr2为52。最坏情况下的中断延迟应该小于串行数据速率,例如在9,600波特上,该值大约为104微秒或16mhz pic上416条指令的执行时间。spi中断正好能够隐藏数据并启用下一个字节的ccp1中断,但切记在某些时刻翻转数据位。
尽管设计工程师通常不能控制输入数据的到达时间,且两个接收器必须时刻保持警惕,但设计者通常能交替使用两个发送器。有很多方法可用来处理硬件路由,仅需少数几个逻辑门或晶体管以及一个输出位就可进行这种选择。图4显示采用一个含4个nand门的74hc00的方法。可在“串口1”上“选择”高速发送,在“串口2”上“选择”低速发送,这两种路径的“数据输入”都来自tx管脚。
上一篇:家庭安防系统方案
热门点击
- PWM至线性信号转换电路适于风扇速度控制
- 国内外电站DCS系统的现状和发展
- 人机界面的技术发展史
- 由NE555光控及抗干扰电路及CD4541定
- 富士触摸屏与西门子PLC通讯中的问题及解决方
- 基于uC/OS-Ⅱ的光盘伺服控制系统的设计
- 为微控制器提供4到20mA回路的电路
- 水位自动控制器 二
- 可编程温湿度控制器
- 单相电动机调速方法及其实现
推荐技术资料
- 自制经典的1875功放
- 平时我也经常逛一些音响DIY论坛,发现有很多人喜欢LM... [详细]
深圳服务热线:13751165337 13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)

深圳市碧威特网络技术有限公司
付款方式