您现在正在浏览:首页 > 职教文章 > 职教论文 > 基于消息机制的C51单片机程序设计

基于消息机制的C51单片机程序设计

日期: 2011/6/6 浏览: 4 来源: 学海网收集整理 作者: 佚名

基于消息机制的 C51 单片机程序设计

周锐鹏1 ,张乐年1 ,许小红2

(11 南京航空航天大学 机电学院 ,江苏 南京 210016 ;

21 济南卷烟厂 ,山东 济南 250000)

摘  要 :介绍了将 windows 系统中消息机制的概念推广到单片机的 C51 编程中 ,通过实例说

明了这种方法可以解决多事件的实时响应和耗时事件处理的矛盾 ,极大地提高了代码的可重

用性 ,并避免了代码重入危机。

关键词 :单片机 ;消息处理 ;多事件 ;实时控制

中图分类号 : TP36812   文献标识码 :A   文章编号 :167125276 (2003) 0420066202

Research on Message Technology of C51 Single2chip Computer Program Designing

ZHOU Rui2peng1 ,ZHAN G Le2nian1 ,XU Xiao2hong2

(11College of Mechanical and Electrical Engineering ,

Nanjing University of Aeronautics and Astronautics , J S Nanjing , 210016 , China)

Abstract :This paper introduces windows system of message concept that has been applied to programming of

single2chip computer. This method may resolve the contradiction between multi2event of real2time response

and the cost time event handling. This method may greatly improve the position quality of code and averts the

code reentrance faults.

Key words :single2chip computer ;message processing ;multi2event ;real2time control

0  概述

在传统的单片机开发过程中 ,通常要使用顺序

编程的方法。这样做的好处是 :程序易于理解 ,编

程方法灵活 ;但这也存在着明显的缺点 :a) 受单片

机本身资源的限制 ,在处理有多种事件发生的情况

时 ,中断资源严重不足 ;b) 在开发由多人负责的大

项目时 ,无法保证编程风格和程序结构的一致性 ,

协调维护和售后服务较为困难 ,代码无法重用 ,存

在大量的重复劳动。而这里提出的方法可以较好

的解决这一缺点 ,可以借鉴。Windows 编程的原理

在单片机编程中引入消息机制的概念 ,将事件产生

的标志作为消息 ,而事件处理则放在消息循环中进

行。这样一方面减少了事件处理服务程序的长度 ,

提高了响应事件的速度 ,另一方面又加快了事件的

处理过程 ,很好地解决了单片机资源和事件处理耗

时之间的矛盾。同时 ,这种方法还有效地提高了代

码的重复利用率。

1  基于消息的单片机编程方法

和 windows 多任务操作系统相比 ,单片机是一个

单任务系统 ,不能同时运行多个程序 ,资源也十分有

限。因此 ,单片机系统不能像 windows 那样建立庞大

的消息机制 ,将消息分发给各个程序并行处理。在基

于消息的单片机编程中 ,采取了一种简化的方式。消

息可以这样来定义 ,当某个事件发生时 ,事件处理程

序(如中断服务程序)设置相应的标志 ,不同的标志即

代表不同的消息 ,而主程序所进行的消息机制就是不

断的判断这些标志 ,以决定启动哪一个处理函数(即

消息发送给特定的消息处理函数) 。采用这种结构可

以合理的利用有限的系统资源 ,将数据的实时采集和

耗时的数据处理有机的结合起来 ,采用这种结构还可

以实现对外部中断的分时复用。

2  实例分析

硬件原理简图如图 1 所示。

收稿日期 :2003204202

·电工技术与自动化·     周锐鹏 等 ,基于消息机制的 C51 单片机程序设计

·66    · http :// ZZHD. chinajournal. net. cn  E2mail :ZZHD @chinajournal. net. cn  《机械制造与自动化》

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

图 1  系统简图

  图 1 是我最近开发出来的智能系统的简化框

图 ,该系统通过电话线能实现自动留言和远程控

制。实际上整个系统就是一个单片机 ,它实现的功

能就是对电话的语音及按键进行消息处理 ,还可以

通过串行口与上位 PC 机通信。RJ 为电话插座 ;音

频解码芯片和单片机 P0 口的低 4 位相连 ,读取用

户的电话按键 ,解码结束 ,该芯片产生一个低电平

通知单片机读取解码值。内部计数器 0 对电话铃

声进行计数 ,超过该计数值没人接电话则通过 P26

自动摘机。语音芯片用于放音和录音 ,共分为 4

段 ,其中第 1 段存放提示语音 ,其余 3 段用于留言 ;

P2 口的低 4 位用于控制一些继电器 ;串行口用于

和上位 PC 机进行通讯。

程序代码为 :

先初始化 89C51 芯片 ;

void init (void)

{ TMOD = 0X25 ;   TH1 = 0XFD ;

 TL1 = 0XFD ;    TH0 = 0xff ;

 TL0 = 0xfb ;    PCON = 0X00 ;

 IT0 = 1 ;     TR1 = 1 ;

 TR0 = 1 ;     ET0 = 1 ;

 ET1 = 0 ;     EX0 = 1 ;

 ES = 1 ;      TI = 0 ;

 SCON = 0X50 ;   EA = 1 ;

}

对消息事件的中断响应及处理

void counter0 (void) interrupt 1 using 1

{  TH0 = 0xff ;

 TL0 = 0xfc ;/ 3 铃声响过 4 次后没人接电话 ,则自动摘机 3 /

 status = status| 0x0080 ;

}

void exterior(void) interrupt 0 using 2

{P1 = 0xff ;

 telnum = P1 ;/ 3 读取电话按键 3 /

 telnum = telnum &0x0f ;

 switch(telnum) {对消息进行处理操作}}

void receive(void) interrupt 4 using 3

{  ES = 0 ;RI = 0 ;

 / 3 读取上位 PC 机的指令 3 /

 receive temp = SBUF ;

 (进行消息处理) }

上、下位机的通信

void send(uchar temp)

{  ES = 0 ;

 TI = 0 ;/ 3 向上位 PC 机发送信息 3 /

 SBUF = temp ;

 while( ! TI) ;

 TI = 0 ;

 ES = 1 ;}

void record(uchar way)

void play(uchar x)

主程序的实现过程(在主程序中实现循环检测及消息处理)

main()

{status = 0 ;

 telnum = 0 ;number = 2 ;

 init () ;

 loop :

if ( (status &0x0001) = = 1) {  record(number) ;/ 3 记录留言 3 / }

if ( (status &0x0002) = = 2) {  play(number) ;/ 3 播放留言 3 / }

1

1(消息处理)

1

if ( (status &0x8000) = = 0x8000) {  调用相应的处理函数 status =

status &0x7fff ;}

goto loop ;}

3  结  论

从上面的程序可以看出基于消息机制编程可

以使程序结构比较简单、清晰、合理。其实质就是

各种中断处理程序或子程序负责处理消息 ,主程序

循环检测这些消息 ,如果某个消息为 1 ,则调用相

应的处理程序 ,处理完成之后该消息被清除等待新

消息。上面程序中的 status 是一个 16 位的正整型

数 ,可以区分 16 种标志 ,如果不够 ,可以把 status

定义成 32 位的长整型数。

如果系统要求某个消息具有较快的响应速度 ,

可以多定义几个该消息的标志位。例如 ,可以定义

status 的第 0 第 5 第 10 第 15 位是某消息的标志

位 ,在主程序的一个循环周期中该消息被检测了 4

次 ,加快了该消息的响应速度。

当然这种编程方法也有它的局限性。首先 ,它

不适宜用于实时性要求比较高的场合。例如 :系统

严格要求每 50 毫秒向上位机发送一帧数据 ,就比

较适宜用定时中断来发送。其次 ,它要求某消息或

事件发生时 ,最好以中断的方式通知单片机 ,这就

(下转第 71 页)

·电工技术与自动化·     周锐鹏 等 ,基于消息机制的 C51 单片机程序设计

Machine B uilding & A utomation , A ug 2003 , ( 4) : 66267 , 71 ·67    ·

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

图 2  文字素材配合图

图 3  同一图面中出现三种图形

对象更形象更具体。同学感到图文并茂 ,削减了对

机械设计学习的乏味性。00 机、营双专科班的同

学在进行机械设计课程设计时使用了该软件 ,同学

们反映 :这次课程设计改变了以往传统的设计模

式 ,使设计者在发挥自己的设计才能时 ,又能感性

地看到设计方案的可行性。在分析运动演示后给

出的位移、速度、加速度曲线后能对整个机构的运

动状态作出评判。如果有错误 ,也可方便地通过计

算机进行调整 ,结合图解法和计算机辅助设计可以

得到事半功倍的效果。

参考文献 :

[1 ] 茆  琦 1 机械设计课程课件制作的相关问题讨论[J ]1 苏州市

职业大学学报 ,2001 ,(1) 1

[2 ] 吕慧瑛 ,朱海若 ,蒋  潍 1 多媒体技术应用于机械原理的学习

辅导[J ]1 苏州市职业大学学报 ,2002 ,(2) 1

[3 ] 马兴国 ,等 1 机械原理电脑陈列柜[ M ]1 北京 :高等教育出版

社 ,19981

[ 4 ] 冯志创作室 1Visual basic 6. 0 中文版应用和开发[ M]1 北京 :科

学出版社 ,19992011

[5 ] 袁海东 1Authorware 教程[ M]1 北京 :电子工业出版社 ,2000 -

011

(上接第 65 页)

网络数据库技术 : 应用 ADO/ ODBC/ SQL 访

问数据库可以实现数据的调用、查询、修改。

4  总  结

通过利用网络技术 ,研究开发化工机械产品检

验工艺 ,必将大大缩短检验工艺的设计周期 ,真正

使互相合作的动态联盟企业在生产前就能得到检

验工艺这一指导性文件 ,从而保证产品质量 ,提高

化机企业的经济效益和竞争力。

参考文献 :

[1 ] 王绍胜 1 压力容器制造的检验工艺[ M]1 石油工业技术监督 ,

2000212

[2 ] 张根保 ,王时龙 ,徐宗俊 1 先进制造技术[ M]1 重庆 :重庆大学

出版社 ,19961

[3 ] 杨  皓 ,等 1 ASP 步步高[ M ]1 北京 :机械工业出版社 ,20012

041

(上接第 67 页)

限制了它的适用范围。最后 ,有可能加重中断处理

程序的负担 ,因为大多数消息是以中断的方式通知

单片机的。

参考文献 :

[1 ] 徐爱钧 ,朱清祥 1 单片机高级语言 C51 的编程与实践[J ]1 计

算机应用研究 ,1997 ,(2) 1

[2 ] 刘红玲 1 微机接口实用技术教程[ M ]1 北京 :电子工业出版

社 ,20032031

[3 ] 赖麒文 18051 单片机 C 语言彻底研究[ M ]1 北京 :科学出版

社 ,20002081

[4 ] 王照平 ,郭士勇 1 基于消息循环的单片机编程方法[J ]1 电子

技术 ,20012111

[5 ] 周金萍 ,徐丙立等 1Windows 系统编程[ M ]1 北京 :人民出版

社 ,20022071

·电工技术与自动化·     吕慧瑛 等 ,“机械设计课程多媒体辅助教学”软件的开发及应用

Machine B uilding & A utomation , A ug 2003 , ( 4) : 68271 ·71    ·

? 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net


基于消息机制的C51单片机程序设计.pdf

返回顶部