首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 电视机电路
基于单片机分时系统的设计
来源:本站整理  作者:佚名  2011-01-19 08:31:41



      一、单片机分时系统的设计

      单片机系统往往是一个嵌入式的控制系统,因此目前绝大部分的单片机系统还是一实时系统。能够真正体现分时系统的设计思想的往往是那些多路重复检测控制系统。即便是在这些多路重复检测控制系统中,它的实时性也是非常重要的。也就是说,在单片机系统中应用了分时系统设计思想,但其及时性应首先进行考虑。

      1.对单片机分时系统硬件设计的建议

      随着单片机性能的提高,单片机系统设计中的一些硬件功能软件化是大势所趋。但同时,一日千里的芯片技术也为低成本的硬件完成高性能的功能提供可能。让一种功能到底是通过硬件实现还是通过软件来实现不能一概而论,只能是通过系统设计让整个系统的性能价格比最高才是每个单片机系统设计者孜孜追求的目标。

      在单片机分时系统的硬件设计中,由于对系统的及时性的要求不能降低,而大多数单片机的处理速度相对而言是较慢的。因此,在接口硬件的设计上应采用一些能将信息量保持的器件,如触发器、锁存器。同时要求这些器件应该是三态门输出,因为是多路分时系统,当CPU没有访问到时,器件输出呈现高阻,以利于总线对其他器件的访问。还有,一些用软件比较费时的操作应转给硬件完成。如LED动态显示,没有必要一定用intel 8155或intel 8255硬件接口让软件时时为显示数字而煞费苦心,完全可以用intel 8279或MAX7218及MAX7219这些可编程外围器件来完成,使显示既漂亮又简单。当然,到底哪些功能留给硬件完成,哪些功能留给软件完成,应根据系统的不同而具体设计。总之,应总体考虑,追求最高的性能价格比。

        2.单片机分时系统的软件设计

      为了合理实现单片机分时系统,还须有完善的调度机制。完善的调度机制主要由调度指针和调度表组成。系统的调度分成两级,一是“路”的调度,相当于指示程序横向进行:从第一路的某一作业到第二路的某一作业,从第二路的某一作业再到第三路的某一作业……从最后一路回到第一路,循环往复。“路”调度的调度指针变化规律是固定不变的,算法简单,即递增一或递减一,循环到头后,再返回到起始。相对应的“路”调度指针还应构造“路”调度表。“路”调度表每一项表示各“路”程序入口地址及跳转指令。以MCS-51单片机为例,采用AJMP addr11作为每一项的内容,则调度表的每一表项占2个字节;当程序较长超过2K字节,则采用LJMP addr16作为每一项内容,占3个字节。所设计的单片机系统共有多少“路”,该调度表就有多少项数。二是作业调度,即相当于指示程序纵向进行:从某一路的第一作业指向该路第二作业,第二作业指向第四作业……也有从第六作业指回第三作业的等等。因稍复杂任务的流向都不可能是单方向性的,从上一作业流到下一作业都要根据系统的检测或运算结果来决定,因此作业调度指针的变化是随机决定的。作业调度表的构成形式与“路”调度表相同,每一项表示各作业模块的程序入口地址及跳转指令。作业调度表指示出各作业执行的一般先后次序,表项数等于一路任务的最大作业数。为了分清每路的任务进程,单片机系统要控制多少路就必须有多少个作业调度指针及相应作业调度表。以上两级指针都为1个字节的整数变量。调度指针与调度表的联系是通过指令JMP @A+DPTR实现的。DPTR中是调度表的首地址。累加器A中的内容是调度指针的整数倍,若表项内容是AJMP addr11,则A的值为调度指针乘2;若表项内容是LJMP addr16,则A的值为调度指针乘3。


      除了以上主程序的调度设计外,各个作业中共同的功能应放在中断中实现,主要是放在定时器中断。如计时功能应放在定时器定时中断中实现,定时参数的选 择应考虑到系统各个作业中各种计时的要求,定时频率一般为最小计时频率的整数倍。任何软件延时都是不允许的。 实现分时控制的关键是在于合理地将系统的功能分解成各个作业模块。作业模块分得越细系统的实时性就越好。虽然单片机的时钟频率较低,在实际应用中当各个作 业模块被细分成各个“动作”及简单的运算后,分时系统的实时性是能得到保证的。缺点就是各“路”的控制处理程序被分割得支离破碎,模块化得不到保证 。

       二、应用实例

        1 .系统硬件及工作原理

   宾馆用的视频点播系统VOD(Video On Demand)中,从各个机定盒送出的上行信号用DTMF码通过电话线传输到机房的主控制柜中的上行信号采集卡中。为了能同时接受多个用户的点播操作,上 行信号采集卡必须有接受多路电话传输信息的功能,为此,笔者设计了8路电话采集卡,可同时接受8路用户的点播操作,系统硬件框图如图1所示。

        每路大致的主程序是:检测到振铃信号后(即为振铃检测脚变低并保持8ms以上),继电器吸合,同时马上给机定盒回一接通信号——#键(保持 400ms)。然后等待机定盒发送点播信息:客房号、点播的节目号,共4位DTMF码;若1s内无DTMF码收到(收到表示为解码芯片的DV脚变高)表示 操作有误,继电器断开,状态位复原,作业指针回0。收齐4位DTMF码后将其整理并带上该路的标志,转化成3字节送到串行发送缓冲区,在定时器中断服务程 序中发送。等待视频服务器回送应答信息,根据应答信息不同向机定盒回送不同的信息;若超时无应答也向机定盒回送一码(发码时间都为100ms)。最后,继 电器断开,状态标志复原,缓冲区清0,作业指针也回到0。一个过程完成。

      2.作业流程

  为了能实现8路分时工作,最主要的工作是将这一过程细分成一个个作业。笔者通过设计把它分成8个作业,各作业的流程如图2所示。 以上每一作业返回后,“路”指针自动加1,到8后回到0,以保证分时工作合理。

      3.几点技巧

  8路电话信息采集卡的编程中,为了使程序更精练,笔者应用以下3个技巧:

   ① 因为这8路的工作是相同的,程序可以共用,只须再构造1“路”地址表,每一表项含有本路的输入锁存器地址、输出锁存器地址、DTMF码存放RAM地址、计 时单元地址。这样可以省掉“路”调度表,因为各路相同作业的入口地址是相同的。根据“路”指针的不同,带入该“路”的地址表项,即可用相同的程序对8路分 别控制操作。

  ② 定时器中断设置成4ms一次,这是因为电话振铃是25Hz,检测脚保持低电平的时间为10ms,它是最低的计时值。当振铃检测脚低电平保持时间少于8ms 时可认为是干扰。每一路都有自己的计时单元,每次定时器中断后,在定时服务自程序中各路计时单元自动加1。在上一次作业中将计时单元请0,下一次作业读出 计时单元的值,延时值即为该值乘以4ms。这样任何延时都不占用CPU机时。

  ③ 串行数据的发送和接收是8路共有的操作,采用共同的模块。数据的链接是通过开辟缓冲区实现的,有发送缓冲区和接收缓冲区,采用4800baud的波特率。 一般程序的串行数据发送时,都须要检测TI位的变化来判断1字节数据发送是否完成,由此决定可否发下一字节数据。应用到分时系统是行不通的,这要占用 CPU机时,因为采用4800baud的波特率,则每一字节的发送时间少于4ms。当发送缓冲区有数据时,可在定时器中断服务自程序中发送。每一次定时中 断中发送1字节数据,当下一次定时中断来时,上一字节数据必定已发送完毕,可发送下一字节数据。无须检测TI位,也不占用CPU机时。数据接收采用串行中 断,接收到的数据存放到接收缓冲区供各路查询。

      结论

  将分时操作系统的思想引入单片机系统,提出了一个针对多路检测控制的单片机系统软件编程。大大减低了系统的设计成本,提高了系统的性能价格比,并在实际应用中获得成功。

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:34,218.75000 毫秒