黄冈职业技术学院(论文)
4 系统软件设计
4.1 系统软件设计方案
51单片机系列的编程语言常用的有两种,一种是汇编语言,一种是C语言。 汇编语言,是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:(1)能够直接访问与硬件相关的存储器或I/O端口;(2)能够不受编译器的限制,对生成的二进制代码进行完全的控制;(3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;(4)能够根据特定的应用对代码做最佳的优化,提高运行速度;(5)能够最大限度地发挥硬件的功能。同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点:(1)编写的代码非常难懂,不好维护;(2)很容易产生bug,难于调试;(3)只能针对特定的体系结构和处理器进行优化;(4)开发效率很低,时间长且单调。
C语言,是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。它具有如下优点:(1)简洁紧凑、灵活方便;(2)运算符丰富;(3)数据结构丰富;(4)C是结构式语言;(5)C语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,可以直接对硬件进行操作;(7)生成目标代码质量高,程序执行效率高;(8)C语言适用范围大,可移植性好。
汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,函数发生器系统的软件部分由C语言设计编程实现。
4.2 系统软件流程图
系统软件是由若干子程序构成,包括主程序、显示子程序、各模式子程序等等。主程序的流程图如图4-1所示
26
黄冈职业技术学院(论文)
开 始输入参数 通过计算计算 相应参数 D/A转化 是 波形输出 是否有键按 下 否 图4-1 主程序流程图
2.键盘输入的流程图如图4-2
读键值 否 是否有键按 下 是 把数据的地址存 到寄存器中 按键输入的键值存 到当前寄存器所存 的地址中 图4-2 键盘输入流图
4.3 信号产生程序
本设计将各种波形的数据固定在单片机的程序存储器里,通过改变这些数据的输出速度来改变信号的频率,然后通过改变D/A转换器的参考点要来改变信号的峰峰值,电路较为简单,成本较低。
27
黄冈职业技术学院(论文)
4.3.1 正弦波产生
方法一:首先在单片机的存储器中存入正弦波的点数,通过输出的两点间的延时来实现调频的功能。我们通过两个机器周期的语句作为调频的最小时间单位,通过循环次数来控制时间,假设波形点数为n,输入频率为f,每个频段的最小分辨率为x。
方法二:直接输入计算式方法。 程序如下:
zhengxianbo() { }
int x,y; while(1)
{ for(x=0;x<128;x++) { y=59*sin(2*3.1415926*x/128)+128; DA0832A = y; } }
4.3.2 三角波产生
1.产生三角波的原理
设个自变量i让它不断地自加1,直到加到255时,t=i ,对t进行不断地自减一直到减到t=0,然后再不断地重复上述过程进而产生三角波。 2.程序流程图见图4-3
28
黄冈职业技术学院(论文)
图4-3 三角波流程图
void sanjiaobo() { }
uchar i = 1,temp=0x00; while(1) {
DA0832A=temp; temp+=i;
if(temp==0xc0||temp==0x00) i=0-i; }
4.3.2 方波产生
1.产生方波的原理
设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后在重复上述过程。假设延时为T。 2.方波流程图见图4-4
29
黄冈职业技术学院(论文)
图4-4 方波流程图
3.程序
fangbo() { }
uchar i; CS=1; while(1) {
if(i<0x7f)
DA0832A=0x00; if(i>=0x7f)
DA0832A=0xff; i++;
if(i==0xff) i=0; }
4.3.4 锯齿波的产生
1.产生锯齿波的原理
锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,
30