| 网站首页 | 电子基础 | 电子应用 | 电子电路图 | 雁过留声 | 软硬件设计 | ET电子商城 | 信息发布 | PDF查询 | 互助社区 | 
您现在的位置: 迷失者电子网 >> 软硬件设计 >> 单片机 >> 文章正文 用户登录 新用户注册
[组图]PIC微控制器设计02           ★★★ 【字体:

PIC微控制器设计02

PIC微控制器设计02
作者:佚名    文章来源:网络    点击数:    更新时间:2008-7-27    


 
 但一般需对输入做较长时间的观察,以确认它保持为低。“中断” 条件是一种向系统发送秘密“蝙蝠信号”并启用特殊配置或测试模式的方法。有些终端能发送各种长度的中断,或者设计工程师可将串口的RX输入缩短为正电压,其确切电平取决于硬件,但它可低到3V。如果是RS-232状态输出(如DTR),则其有效电平为正,且将能提供接收器所需的电压电平。

TX9及TX9D是两个经常被忽略的特殊函数寄存器位,可对TX9设置进行设置,使TX9D作为第9个数据位被发送。额外数据位的一种传统用法是将其作为错误检查的奇偶校验位。如果错误检查对应用很关键,那么只进行简单的奇偶校验还不够,因为错误检查位可能出错。

曾经有一种采用RS-485的系统通过电线在数百英尺的距离上进行通信。该系统采用具有故障自恢复功能的RS-485芯片,即使电线是开路的,它也能保证有效输出。电线开路在半双工通信时经常出现,因为数据在同一对电线的两个方向上传输,每次只有一边能发送,而在间歇期间两边都在侦听,这使电线上没有驱动信号。该系统可靠工作了数年时间,直到客户想采用其它外来的RS-485设备。

图5:在堆栈上进行5+3运算。

这些外来设备没有使用具有故障自恢复功能的器件,系统在PIC的TRMT状态位表明所有的位都被发送后才释放线路。TRMT不对终止位进行计数,因此PIC在另一端收到终止位之前释放线路。这并没有选择修改硬件,而是将PIC配置成发送9个数据位,并使TX9D为高以发送在另一端看起来为终止位的一个额外数据位。这样,这两种系统从此都工作得很好。

如果正在设计一种新系统,合适的终端将非常有用;并且如果硬件允许使用这种终端,则可在发送时使接收器有效。一旦侦听到自己的发送,设计工程师就知道包括终止位在内的所有数据位都已安全地抵达另一端。

参数堆栈

尽管多年以前人们为8位微处理器编写了一些图形函数,但设计工程师还需要32位定点运算。由于存储器有限,所以在进行复杂计算时,复用临时存储空间来存储中间值是很有吸引力的。知道何时能安全地复用特定的临时存储位置将带来更多复杂性。

Forth语言采用参数堆栈与RPN。计算时,先从参数堆栈中弹出参数,然后再将计算结果推入参数堆栈。临时存储空间总是位于参数堆栈的顶部,当从堆栈中弹出一个参数后,该临时存储空间被自动释放并可再被使用。

使用参数堆栈是处理复杂表达式及中间结果的一种便利方法,尤其是当编译器不支持最佳数据大小的时候。如果没有参数堆栈,则“add”函数就可能会将两个参数相加,然后再将结果返回至某一个地方;而有了参数堆栈,则算术函数不需要任何参数,也不用返回任何结果。Add() 函数可能会先从堆栈中弹出两个数,将它们相加后再将结果推入堆栈中。数据可以是32位、24位或任何所需的位数,也不必考虑数据大小,除非需要在堆栈与其它位置之间转移数据。以这种方式使用参数堆栈,要求重新考虑数学运算与函数,而RPN则提供一种简单的解决方案。

图6:Over() 与 Add() 函数。

代数表达式“5+3” 可用RPN编码成“5 3 +”,其程序代码如下:


  Push(5);


  Push(3);


  Add();

代数表达式“(2*3)+(4*7)” 可用RPN表示为“2 3 * 4 7 * +”,其程序代码为:


  Push(2);


  Push(3);


  Multiply();


  Push(4);


  Push(7);


  Multiply();


  Add();

如同Add() 函数一样,Multiply()函数先从参数堆栈中弹出两个参数,将它们相乘,然后再将结果推入堆栈中。

除了支持通常的算术运算,Forth语言还有几种操作堆栈中的值的方法。Dup()函数复制推入栈顶(TOS)的最后值;Over() 函数复制栈顶以下的第二个值;Swap() 函数交换两个栈顶值;Drop() 函数将值推入栈顶。Pick(n) 函数复制栈顶以下第N个值。图6显示Over() 函数如何将两个值保持在栈上并对它们求和。

图7:内部IBF与OBF信号。

当将数字堆砌到堆栈上时,只需调用少数几个函数即可进行复杂运算,而无需参数或返回值。

笔者用这些从Forth及RPN借用来的概念开发出一个精度扩展数学库。有了PIC,函数调用常常编译为单个操作码,可以从ftp://ftp.embedded.com/pub/2005/04rowe下载PicMath.c ,该版本适用于CCS PCM编译器,其配置最小为:

1.将StackDataSize栈数据大小定义为以字节来表示的数据大小(例如32位为4个字节等);


2.分配栈存储空间并将MathPtr初始化为栈的最低地址;


3.MathCarry数据位存储计算后的PIC进位标志;


4.MathDouble配置位在非零时可进行双精度乘、除操作。

PicMath还提供用于无栈运算的函数,该函数利用指针指示源及目的参数,并用计算结果覆盖目的参数。

并行从端口

以往,快速数据传输总是以并行来进行。现在有了每秒数百万位的串行数据速率,串行传输可能是一种更好选择,但除各种串行端口外,很多较大的PIC还提供一个并行从端口(PSP)。当在所有串行端口都用于其它事情后还需要另一个通信通道时,PSP可能相当有用。虽有几条用于片选及读/写8位数据的控制线,但没有标准方法来知道数据何时能读或者PIC是否已处理完写入的最后值,等等。

PIC在内部拥有输入缓冲器满(IBF)及输出缓冲器满(OBF)状态位。IBF表示有人对并行端口进行写操作,而OBF则表示PIC输出的最后值仍在等待被读取。图7显示这些过程是如何进行的。

列表1:CCPR1中断程序。

尽管可以只用现有功能、某些固件以及非常严格的协议来进行通信,但设计工程师可能还需要额外的握手线以再造内部IBF和OBF状态位的等效值。这通常至少需要一个额外的输出管脚与一个额外的输入管脚来监视信号。可用快脉冲来指示发送方与接收方准备就绪。可直接将一个握手输出连接至一个边沿触发中断管脚。一些管脚可根据变化来产生一次中断,但如果它是快脉冲,则读该端口管脚将正好显示当前逻辑电平。

电平激励握手存在使两边失去同步的危险。发送方可能会看到接收方“READY”握手线,发送一个字节,并在接收方响应前再检查“READY”信号。而接收方可能会看到发送方的“READY”握手线,读一个字节,并在发送方响应前再检查“READY”信号,并再一次读同一数据。

PLD或其它外部逻辑器件可产生模仿内部IBF及OBF状态位的外部握手信号。发送方的/WR信号可设置XIBF(外部IBF),并可由接收方的输出握手管脚来清除。发送方通过监视XIBF来确定接收方何时准备就绪。发送方的握手管脚可将XOBF(外部OBF)设置为数据已做好读准备的信号。接收方的/RD信号清除XOBF。发送方不需要监视XOBF,因其内部OBF会复制该信号并产生中断。

处理器能提供满足所有需要的内置硬件支持当然最好,但如果不能,且设计不得不尽快完成,则上述技巧中的一项可能就够用。这些技巧可用于各种处理器,包括16Cxx、16Fxx及18Fxx PIC等。只要了解其潜在优势与局限,它们就能成为您工具箱中的有用选项。


文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    PIC微控制器设计01
    数字电路的仿真与设计02
    数字电路的仿真与设计01
    DSP的最小图像采集处理系统设…
    DSP的最小图像采集处理系统设…
    DSP通用板的设计与应用02
    DSP通用板的设计与应用01
    DSP处理器系统的SOPC技术设计…
    DSP处理器系统的SOPC技术设计…
    DSP的多路音视频采集处理系统…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)