基于循环队列的嵌入式无线呼叫系统*

2010-11-27 01:46申庆华肖洪祥
网络安全与数据管理 2010年19期
关键词:子程序存储器号码

申庆华,肖洪祥

(桂林理工大学 信息科学与工程学院,广西 桂林 541004)

无线呼叫系统广泛应用于服务行业中(如宾馆、饭店、酒吧、咖啡厅、医院等),服务人员可以同时为众多个房间、服务对象提供服务。但如何解决先后呼叫的响应,按呼叫时间的先后显示多个呼叫号码,提高工作效率方面还有待提高。本文介绍的呼叫系统,为了尽量降低成本,只有收、发和提示等模块,但设计电路功能完备,程序设计独特,充分考虑呼叫的先后顺序,在收端存下接收的号码形成一个有序的队列,显示时按先后顺序显示,让服务人员依次响应,以提升服务水平与服务对象满意度。

1 系统总体设计

无线呼叫系统由发射、接收、提示三部分组成,系统框图如图1所示。

1.1 发射与接收

发射与接收选用CC1100模块。发射部分因整体较小,单片机采用体积小、价格低的AT89C2051。接收部分采用性能可靠、价格低、程序设计成熟的MCS51单片机[1]。用于存储号码的外部数据存储器RAM选用6264,它是一个很稳定的存储器。显示芯片选用CH451,既方便又可以大量节约单片机资源,级联使用来驱动五排数码管。

图1 系统框图

发射部分由用户自己设定地址(同时也是呼叫的号码),可设为 1~255(即最多 255个呼叫器),不设 0号,0号在程序中作为比较号码用。

1.2 无线传输

由于有众多呼叫号码,为避免碰撞,采用时分复用作为通信方式。此通信方式可靠性高、速度快,用在本系统中可方便快捷地传输数据。只需要把255个呼叫数据放入255个时隙中,CC1100模块就能轻松地实现无线传输。

2 硬件电路原理

硬件电路图分别如图2、图3所示。

图2 发射部分

发射部分的拨码开关用来设定地址(即呼叫号码),从1~255;按键起呼叫作用,当接收部分接收到呼叫的号码时,会返回确认信息,使LED灯亮。

接收部分的MCS51单片机用于控制,从CC1100接收到的号码按顺序存储在6264存储器中,从地址00H~FEH,依次存放成循环队列。因为程序中有比较呼叫号码是否相同的设计,所以呼叫号码会与原来存储的号码相比较,发现是重号时将其丢弃,这样,号码不会多存,而存下来的号码都是按呼叫的先后顺序存放的,显示时也按队列先后顺序显示,使服务人员能及时有序地依次为服务对象提供服务。

5个CH451显示芯片级联使用,驱动五排数码管,顺序显示先后呼叫的号码。MCS51单片机的P1.0脚连确认按键,当有按键按下时,第一排数码管的号码被清除,再将存在外部数据存储器中的号码清0,剩下的4排号码前移,再从6264存储器中读一个号码来显示,当没有号码时则不显示;再有按键按下时再清除一个号码,如此循环。

MCS51的P3.7口连蜂鸣器,当接收到呼叫时,如果不是重号就鸣响提示。74LS373为地址锁存器。

3 程序设计

由于程序流程较复杂,程序设计参考了参考文献[2]中的某些观点。

3.1 程序流程

主程序流程图如图4所示。主程序开始后先判断是否有应答按键,如果有,则转入显示与移位子程序,没有就检查是否有呼叫,若没有就跳回到判断是否应答,如此循环;当有呼叫时,先比较呼叫号码是否为0号(因为在系统中0是做比较判断的号码),是0号就要丢弃,如果不是0号,则蜂鸣提示,再与外部数据存储器所存的号码比较,判断呼叫的号码是否与存放的号码相同,若相同则丢弃,不同则存在队尾,如此循环构成队列。

当呼叫的号码不是重号,则送显示。由于最多显示5个号码,所以设R1为显示计数器,当显示的号码多于5个时不再显示。

显示与移位子程序流程图如图5所示。调用显示与移位子程序时先屏蔽呼叫中断,以防止在子程序中有呼叫而改变R1的值产生混乱。判断R1是否为0可以判断外部数据存储器是否还有号码,没有就不需显示移位;若有号码,就清除第一排显示的号码,同时将相应外部数据存储器地址中存储的号码清0。然后把下面的号码上移,在显示上移时,如果发现读取的存储号码为0,表明已到队尾,则停止读号码,但需把显示定位器R2减 1,回到上一地址,同时 R1减 1,以便有新号码时直接显示;如果读取的存储号码不为0,则循环 5次,这样就按呼叫顺序显示了号码。

图4 主程序流程图

图5 显示与移位子程序流程图

3.2 队列的采用

队列说明如图6所示。图6(a)中间的箭头表示数据的存储和循环方向,呼叫号码就从地址00H开始存放,依地址顺序循环存储;左边箭头表示队尾指针R0的循环;右边箭头表示队头指针(同时也是显示定位指针)R2的循环。图6(b)表示当存下一个号码后队尾指针R0将指向下一个地址,可见队尾指针并不是指向队尾,而是队尾的下一位。图6(c)表示当有按键按下响应时,将队头指针R2原来指向的地址数据清0,再指向队头,此时,显示的号码从这里开始显示。FFH处先置0可防止死循环。

图6 队列说明图

3.3 主要程序编写

比较是否重号:设新呼叫的号码存入0H。

本文提出的队列方法结合嵌入式微控制器应用于呼叫系统中,很好地解决了多呼叫顺序响应、多号码排序显示的问题。若要提升系统性能,可选用更好的嵌入式处理器。本设计经过适当修改可应用于类似系统中,具有较高的实用价值。

[1]HYDE R著.汇编语言编程艺术[M].陈曙晖,译.北京:清华大学出版社,2005.

[2]王志英.嵌入式系统原理与设计[M].北京:高等教育出版社,2007.

猜你喜欢
子程序存储器号码
静态随机存储器在轨自检算法
说号码 知颜色
一个号码,一个故事
猜出新号码
任意2~k点存储器结构傅里叶处理器
浅谈子程序在数控车编程中的应用
子程序在数控车加工槽中的应用探索
存储器——安格尔(墨西哥)▲
这个号码很吉祥
西门子840D系统JOG模式下PLC调用并执行NC程序