北京化工大学北方学院毕业设计(论文)
语言程序本身并不依赖于机器硬件系统,基本上不作修改就可以根据单片机的不同较快地移植过来。所以单片机AT89S52的软件编程采用C语言指令,即常用的单片机C51语言。
3.1.3单片机C51语言概述
C51程序结构与一般C语言没有什么差别。一个C51程序大体上是一个函数定义的集合,在这个集合中有且仅有一个名为main的函数(主函数)。主函数是程序的入口,主函数中的所有语句执行完毕,则程序执行结束。
C51编译器具体支持的数据类型有:位型(bit)、无符号字符型(unsigned char)、有符号字符型(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点型(float)和指针型等。
C51运算符按其在表达式中所起的作用,可分为赋值运算符、算术运算符、增量与减量运算符、关系运算符、逻辑运算符、位运算符、复合赋值运算符、逗号运算符、条件运算符、指针和地址运算符、强制类型转换运算符等。运算符按其在表达式中与运算对象的关系,又可分为单目运算符、双目运算符和三目运算符等。单目运算符只需要有一个运算对象,双目运算符要求有两个运算对象,三目运算符要求有三个运算对象。
C51提供了十分丰富的程序控制语句。C51基本语句有表达式语句、复合语句、条件语句、开关语句、循环语句和返回语句等。
C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可增强可读性和移植性。在本设计中,软件编程就是基于这种模块化结构设计的思想。
第3.2节 程序设计
综上所述,在本系统中,软件编程采用的是传统的单片机C51语言,在程序
26
北京化工大学北方学院毕业设计(论文)
的具体设计中,采用了模块化结构设计的思想。那么具体优点是什么呢?具体来说,有以下几方面:
(1)每个模块的程序结构简单,任务明确,易于编写、调试和修改。 (2)程序可读性好,对程序的修改可局部进行,其他部分可以保持不变,易于功能扩充和版本升级。
(3)易于使用频繁的子程序可以建立子程序,便于多个模块调用; (4)便于分工合作,多个程序员同时进行程序的编写和调试工作,加快软件研制进度。1
3.2.1系统软件设计方案确定
(1)根据系统所要完成的功能,可以设计出如图3.1所示的功能模块。
主程序模块 A D 转换 数 码 转换 数 码 显 示 通 道 转 换 显 示 延 时 消 抖 延 时
图3.1 数字电压表软件设计的模块
从上述流程图中,可以很好地看出本软件设计方案采用了模块化编程的思想,其中最重要的两个模块是数码转换模块和数码显示模块,这正是单片机数据处理所要完成的主要内容。
(2)程序的设计 ①主程序的设计
主程序的内容一般包括:主程序的起始地址、中断服务源程序的起始地址、
1
摘自马忠梅等《单片机的C语言应用程序设计》.
27
北京化工大学北方学院毕业设计(论文)
有关内存单元及相关部件的初始化和一些子程序调用等。根据设计要求,可以设计出如图3.2所示的主程序流程图。
开始 初始化 调用A/D转换子程序 调用显示子程序
图3.2 主程序流程图
从图3.2可以看出,主程序是整个程序的框架,按照流程图采用模块化编程可以大大降低单片机工作的复杂程度,更有利于设计和维护程序。例如,在附录2中,数码转换模块如下:
adval=500*adval/256; qian=adval/1000; bai=adval/100; shi=adval0/10; ge=adval;
② A/D转换子程序的设计
A/D转换程序的功能是采集数据,这在整个系统设计中占有很高的地位。当系统设置好以后,单片机开始扫描转换结束管脚P2.6的输入电平状态:当输入为高电平则转换完成,将转换的数值转换并显示输出;若输入为低电平,则继续
28
北京化工大学北方学院毕业设计(论文)
扫描。程序流程图具体如图3.3所示。
开始 开始模数转换 N 转换是否 完成? Y 取模数转换结果 并化为工程量 显示转换结果 结束
图3.3 A/D转换子程序流程图
③数码转换及显示子程序的设计
由于人们日常习惯使用十进制数,而计算机的键盘输入、输出以及显示常采用二进制编码的十进制数(即BCD码)或ASCII码。因此,在程序设计中经常要进行数码转换。显示子程序用到了四位共阳极数码管的段码表,显示延时、消抖延时子程序采用了双循环语句。
29
北京化工大学北方学院毕业设计(论文)
第3.3节 本章小结
本章主要介绍了系统的软件部分,根据系统设计的目的与需要,采用了常用的单片机C51语言。根据硬件电路的连接方式,按照模块化的编程思想,先固定每一个模块,对每一个模块进行编程,然后再将每一个模块有机地联系到一起,即可可设计出完整的程序,程序详见附录2。在附录2中可以清楚地看出用C51指令编写的每一个模块。例如,延时子程序模块如下:
void delay(unsigned int z) { }
在后续程序中,显示延时子程序与消抖延时子程序直接调用上述延时模块即可。虽然在设计中共有五个档位(包括空挡),但是编程中只要设计出其中一个档位模块程序,其它档位程序的设计迎刃而解。由此可见,用C51语言编程的好处,这是汇编语言所不具备的优点。
unsigned char x,y; for(x=z;x>0;x--);
for(y=110;y>0;y--);
30