450 likes | 612 Views
第 10 章 单片机应用系统的设计. ● 教学目标 介绍单片机应用程序软件设计步骤 介绍单片机硬件电路设计步骤 介绍单片机应用程序设计的一个实例 ● 学习要求 熟悉单片机硬件和软件设计步骤 掌握单片机硬件和软件的调试方法 了解单片机应用系统模式. 由于单片机的特殊结构,使之具有小巧、低功耗、成本低、控制功能强、易于产品化、抗干扰能力强以及便于实现多机和分布式通信控制等特点,其应用范围十分广泛,如智能家电、智能仪表、计算机外设、工业测控系统等。通过前面的学习,我们懂得了单片机的工作原理和应用基础,本章讲述如何设计及调试单片机应用系统。.
E N D
第10章 单片机应用系统的设计 ● 教学目标介绍单片机应用程序软件设计步骤介绍单片机硬件电路设计步骤 介绍单片机应用程序设计的一个实例 ● 学习要求熟悉单片机硬件和软件设计步骤 掌握单片机硬件和软件的调试方法 了解单片机应用系统模式
由于单片机的特殊结构,使之具有小巧、低功耗、成本低、控制功能强、易于产品化、抗干扰能力强以及便于实现多机和分布式通信控制等特点,其应用范围十分广泛,如智能家电、智能仪表、计算机外设、工业测控系统等。通过前面的学习,我们懂得了单片机的工作原理和应用基础,本章讲述如何设计及调试单片机应用系统。由于单片机的特殊结构,使之具有小巧、低功耗、成本低、控制功能强、易于产品化、抗干扰能力强以及便于实现多机和分布式通信控制等特点,其应用范围十分广泛,如智能家电、智能仪表、计算机外设、工业测控系统等。通过前面的学习,我们懂得了单片机的工作原理和应用基础,本章讲述如何设计及调试单片机应用系统。
10.1系统设计的原则与步骤 10.1.1单片机应用系统分类 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统和典型应用系统等。 一、最小应用系统 最小应用系统是指能维持单片机运行的最简单配置的系统。这种系统成本低廉、结构简单,常构成一些简单的控制系统,如开关状态的输入/输出控制等。 对于片内有ROM/EPROM/FLASH RAM的单片机,构成最小应用系统时,只要将单片机接上时钟电路、复位电路和电源即可,如图10-1(a)所示;对于片内无ROM/EPROM/FLASH RAM的单片机,其最小系统除了外部配置时钟电路、复位电路和电源外,还应在片外扩展EPROM、EEPROM作为程序存储器用,如图10-1(b)所示。
地址 锁存 EPROM XTAL1 P2.7~2.0 XTAL2 8031 RST ALE P0.7~0.0 PSEN EA XTAL1 P0 P1 XTAL2 P2 P3 RST 8051 8751 EA +5V +5V +5V 图10-1 MCS-51单片机最小应用系统 (a) (b)
二 、最小功耗应用系统 最小功耗应用系统是指为了保证正常运行,系统的功率消耗最小。这是单片机应用系统中的一个引人入目的构成方式。在单片机芯片结构设计时,一般为构成最小功耗应用系统提供了必要条件,例如,各种系列的单片机都有CMOS工艺类型,而且在这类单片机中都设置了低功耗运行的WAIT和STOP方式。 设计最小功耗应用系统时,必须使系统内的所有器件、外设都有最小的功耗,而且能充分运用WAIT和STOP方式运行。 最小功耗应用系统常用在一些袖珍式智能仪表、野外工作仪表以及在无源网络、接口中的单片机工作子站。
三、典型应用系统 典型应用系统是指单片机要完成工业测、控功能所必须具备的硬件结构系统。 由于单片机主要用于工业测、控,因此,其典型应用系统应具备用于测、控目的的前向传感器通道、后向伺服控制通道以及基本的人机对话手段。它包括了系统扩展与系统配置两部分内容。 系统扩展是指在单片机中的ROM、RAM及I/O口等片内部件不能满足系统要求时,在片外扩展相应的部分。扩展多少视需要选择。 系统配置是指单片机为满足应用要求时,应配置的基本外部设备,如键盘、显示器等。 单片机的典型应用系统如图10-2所示。整个系统包括基本部分和测、控增强部分以及外设增强部分。
光电隔离 A/D 光电隔离 EPROM I/O 扩 展 单 片 机 RAM I/O 通用 外设 光电隔离 显示器 I/O D/A 键盘 数字量检测 模拟量检测 开关量检测 开关量控制 伺服驱动控制 图10-2 单片机典型应用系统
现在我们知道单片机的应用范围和应用方式,但如何才能研制出一个较完整的单片机产品是我们下一步所关心的问题。简单地说,必须经过以下几步工作:现在我们知道单片机的应用范围和应用方式,但如何才能研制出一个较完整的单片机产品是我们下一步所关心的问题。简单地说,必须经过以下几步工作: ⑴系统硬件电路设计、组装、调试; ⑵系统应用软件的编制、调试; ⑶系统应用软件的链接调试、固化、脱机(脱离开发装置)运行。 下面介绍单片机应用系统软、硬件开发的有关问题。
10.1.2系统设计的原则 单片机应用系统包括其硬件系统和软件系统两大部分,设计时应遵循相应准则。 一、硬件系统设计原则 系统的扩展和配置设计应遵循下列原则: ⑴尽可能选用典型电路,并符合单片机的常规用法。为硬件系统的标准化、模块化打下良好的基础。 ⑵系统的扩展与外围设备配置的水平应充分满足应用系统的功能要求,并留有适当的余地,以便进行二次开发。 ⑶硬件结构应结合应用软件方案一并考察。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。 ⑷整个系统中的相关器件要尽可能做到性能匹配,如选用CMOS芯片单片机构成低功耗系统时,系统中的所有芯片都应该选择低功耗的产品。 ⑸可靠性及抗干扰设计是硬件系统设计不可缺少的一部分,它包括芯片、器件的选择、去耦滤波、印刷电路板布线、通道隔离等。
二、应用软件设计原则 单片机应用系统中的应用软件是根据系统功能要求设计的,应可靠地实现系统的各种功能。应用系统种类繁多,应用软件各不相同,但一个优秀的应用系统的软件应具有下列特点: ⑴软件结构清晰、简洁、流程合理。 ⑵各种功能程序实现模块化、子程序化。这样,既便于调试、链接,又便于移植、修改。 ⑶程序存储区、数据存储区规划合理,既能节约内存容量,又使操作方便。 ⑷运行状态实现标志化管理。各个功能程序运行状态、运行结果以及运行要求都设置状态标志以便查询,程序的转移、运行、控制都可状态标志条件来控制。 ⑸经过调试修改后的程序应进行规范化,除去修改“痕迹”。规范化的程序便于交流、借鉴,也为今后的软件模块化、标准化打下基础。 ⑹实现全面软件抗干扰设计。软件抗干扰是计算机应用系统提高可靠性的有力措施。 ⑺为了提高运行的可靠性,在应用软件中设置自诊断程序,在系统工作运行前先运行自诊断程序,用以检查系统各特征状态参数是否正常。
10.1.3系统设计的步骤 对于一般的应用系统而言,大都要经历如下几个步骤: ⑴提出问题、了解现场、明确指标。 ⑵进行可行性论证,提出初步方案。 ⑶提出各分课题的设计方案。 ⑷设计、调试、修改并完成各分课题的任务。 ⑸将各分课题组成整体应用系统,并对系统进行总体调试、修改、完善。
10.2 系统设计举例 前面讲述了设计一个单片机应用系统的基本方法和步骤,下面以设计一个波形发生器为例来进一步说明。 10.2.1问题的提出 在教学、科研和生产的许多实验场合,需要有临时的信号源如正弦波、方波、三角波和锯齿波等。市场上现成的信号发生器相对较贵(尤其是对于规模较小的单位或经费较少的项目),而且不一定很合适。在这种情况下,往往是实验人员自行设计,比如设计一个能产生一路正弦波、方波、三角波或锯齿波的波形发生器,要求输出波形幅度为0~10V,并可调整;输出波形频率在0~20kHz范围内可调整。
输出 显示器 参考电压 运算放大器 D/A转换器 单片机 P0 图10-3 波形发生器原理框图 键盘 D/A转换器 运算放大器 10.2.2总体方案设计 根据题意,可采用单片机程序产生以上四种波形,并通过一片D/A转换器输出。另外,采用一片D/A转换器来控制前一片D/A转换器的参考电压,从而可以改变输出波形幅值。见图10-3所示。通过外接键盘来设定波形的类型、幅值和频率,并在扩展的七段LED显示器上显示响应的波形的类型、幅值和频率。
以产生正弦波为例,采用定点法来生成波形,即将一个周期的正弦波按360o等分为若干点,计算出各点的正弦函数值,并转化相应的D/A转换器输入数值,这样得到一个正弦函数表。通过程序将该表存于单片机的程序存储器中,利用单片机的定时器来产生定时,每当定时时间到时,查表得到该点对应的输出值,然后通过D/A转换得到该点的对应电压值。如此,周而复始地查表输出,就得到所要的正弦波。由于一个周期正弦波的点数固定,改变定时器的定时值,就改变相邻两点的间隔时间,从而改变正弦波的频率。以产生正弦波为例,采用定点法来生成波形,即将一个周期的正弦波按360o等分为若干点,计算出各点的正弦函数值,并转化相应的D/A转换器输入数值,这样得到一个正弦函数表。通过程序将该表存于单片机的程序存储器中,利用单片机的定时器来产生定时,每当定时时间到时,查表得到该点对应的输出值,然后通过D/A转换得到该点的对应电压值。如此,周而复始地查表输出,就得到所要的正弦波。由于一个周期正弦波的点数固定,改变定时器的定时值,就改变相邻两点的间隔时间,从而改变正弦波的频率。 三角波和锯齿波的产生方法与正弦波类似。方波的产生较简单,只要交替地将最大值和最小值输出给D/A进行转换即可,它们的延续时间为周期的一半。
10.2.3具体电路设计 按照总体方案设计的硬件电路如图10-4所示,它主要包括单片机最小系统、两片D/A转换器组成的波形输出部分、键盘扩展部分和七段LED显示器部分等。 图10-4 波形发生器的硬件电路图
一、单元电路设计 1.单片机最小系统 考虑到电路的简单和成本等因素,选用ATMEL公司的AT89C51单片机作为微处理器,它内含4KB快闪程序存储器,其编程和擦除完全用电实现;其时钟频率为0~24KHz;并且价格低廉,批量价在10元以内。用AT89C51、74HC373加上相应的时钟和复位电路就组成了最小系统,见图10-8中相应部分。 2.波形输出电路 波形输出电路主要由两片8位D/A转换器DAC0832和相应运算放大器组成,见图10-4中相应部分: 其中一片DAC0832(IC4)和两个单运算放大器(IC7和IC8)组成波形的输出部分,它采用双极性输出方式,这样给DA0832输入不同的数码,不难分析其输出电压范围为-Vref~+Vref,见表10-1所示,Vref为该片D/A转换器的参考电压。
输入码 模拟输出电压 MSB LSB 1 1 1 1 1 1 1 1 +(127/128)Vref 1 0 0 0 0 0 0 1 +(1/128)Vref 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -(1/128)Vref 0 0 0 0 0 0 0 1 -(127/128)Vref 0 0 0 0 0 0 0 0 -(128/128)Vref 表10-1 输入数字量与输出电压的关系 另一片DAC0832(IC3)的参考电压接到+5V电源上,它和两个单运算放大器(IC5和IC6)组成的单极性D/A转换电路,其输出电压加到前一片DAC0832的参考电压端Vref。当此片DAC0832输入0~255数字时,输出为0~+5V,从而调节前一片DAC0832的输出电压为-5V~+5V,达到改变输出波形幅值的目的。这两片DAC0832都接成单缓冲器输入方式。
3.键盘扩展电路 输出波形种类、幅值、频率的设定由键盘输入。由于单片机的P1口不作它用,可用它扩展一个4行×4列键盘。键盘的4根行线接到单片机的P1.0~P1.3口线,4根列线接P1.4~P1.7口线。16个按键分别定义为数字0~9和功能键Enter(确认键)、Clear(清除键)、Wave(波形选择键)、Freqency(改变频率键)、Amplitude(改变幅值键)和.(小数点键)。 4.显示电路 当前输出波形的种类、幅值和频率需要显示出来。由于单片机的串行口不作它用,可用它接8片串入并出移位寄存器来扩展8位7段LED显示器, L1~L4用于显示输出波形的频率;L5~L7用于显示输出波形的幅值,L5的小数点接+5V,常亮,则可显示0.0V到10.0V;L8用于显示波形的种类,1表示正弦波,2表示方波,3表示三角波,4表示锯齿波。
二、单元电路调试 对于本波形法发生器,其硬件电路的调试可以按如下步骤进行: ㈠硬件电路的总体检查 在一块电路试验板上,焊接好电路,按实际电路图插好元器件,连好线。在接上电源之前,用万用表粗略检查电路的正确性,尤其是要检查电源和地之间的电阻。对于本波形发生器来讲,电源和地之间的电阻应为1KΩ以上,若太小,应检查电源和地之间是否有短路现象或电源接错现象或有不良元器件。确保电源和地无故障之后,再通电,然后检查各电源+5V、+12V和-12V电压数值的正确性。排除可能出现的故障后,再进行各单元电路调试。 ㈡单元电路调试 ⒈单片机最小系统调试 按照前面设计的单片机最小系统和电源,焊接并插上相应的元器件,连好线,检查正确无误后,接上电源,用示波器测试单片机的时钟波形。若时钟波形和频率正确,则进行下一步检查。 切断电源,空出单片机AT89C51的位置,并在此位置上插入仿真器的40芯仿真头。连好相应线,检查正确无误后,接上电源,然后启动仿真器,检查地址锁存等电路的正确性。
⒉波形输出电路调试 按图10-8电路接线方法,我们可以知道D/A转换器IC3和IC4的地址分别为0FDH和0FEH,向这两个地址分别写入相应的数据后,若电路正确就启动了它们的D/A转换,若这时运放IC6和IC8输出的电压值和表10-1相符,则说明波形输出电路正确。 ⒊键盘扩展电路调试 断开电源,焊接好键盘,并将键盘接到P1口,然后接通电源,用仿真器使AT89C51的P1口输出为0F0H,即将键盘的4根行线P1.0~P1.3置为低电平,4根列线接P1.4~P1.7口线置为高电平。接下来,依次按下各键,并用万用表测量对应P1口的P1.4~P1.7口线,若所测的相应口线为低电平,则表示该键有效。例如,按下键0,则应测的口线P1.4为低电平,说明键0有效。测试所有16个键都有效,则说明该键盘扩展电路正确。 ⒋显示电路调试 断开电源,焊接好相应电路,并插上器件IC9~IC16和L1~L8,然后再接上电源。用仿真器编写一段测试程序(参见后面显示模块软件)让8个7段LED(L1~L8)分别显示数字1、2、3、4、5、6、7、8。再在仿真器上汇编该程序,并执行,若显示的结果一致,则说明显示电路是正确的。
10.2.4应用软件设计 一、各软件模块设计 按照波形发生器的功能,其应用程序必须有初始化、波形产生、键盘管理和显示等几部分,现将各主要软件模块介绍如下: ㈠初始化模块 初始化程序模块主要进行设置定时器、串行口的工作方式,设置波形的类型幅值和频率,并在显示器上显示提示字符12345678等工作。这部分程序如下: MOV TMOD,#02H ;设置定时器0为方式2工作 MOV TL0,#7FH ;置初值 MOV TH0,#7FH CLR TR0 ;不启动 MOV SCON, #00H ;将串行口初始化为方式0 MOV DPTR,#0FFFDH ;IC3的地址送DPTR MOV A,#0FFH MOVX @DPTR,A ;输出波形的幅值初始化为10V MOV DPTR,#0FFFEH ;IC4的地址送DPTR MOV A,#80H MOVX @DPTR,A ;输出设定为0 MOV WAVKD,#01H ;波形类型初始化为1,即正弦波。
㈡波形产生模块 前面讲过,采用定点法产生波形,将所要输出的波形按一个周期分成若干点,正弦波和三角波各72点、按所需频率计算出两点间的时间间隔,用定时器0工作于方式0来定时该时间间隔。每当定时时间到时,查表输出下一个波形数据,如此循环执行即可。锯齿波的产生,只要从00H开始,每隔一定时间加1,在00H到0FFH之间循环输出D/A转换器IC4即可。方波只要每隔每半个周期交替输出00H和0FFH即可。 ⒈正弦波产生程序 由于正弦波的对称性,可将其分为四个相同部分,在这里称为四个象限。只要做第一个象限的数据表即可,第二象限的数据表与第一象限相同,但输出时要反向查表;第三、四象限输出只要将第一象限和第二象限查表得的数据取反即可。产生正弦波的程序流程图见图10-5所示。
开始 查表输出 反向查表取反输出 查表取反输出 反向查表输出 时间到吗? 时间到吗? 时间到吗? 时间到吗? 指向下一个点 指向下一个点 指向下一个点 指向下一个点 第四象限输出完? 第一象限输出完? 第三象限输出完? 第二象限输出完? N N Y Y N N Y Y N N Y Y N N Y Y 图10-5 正弦波产生程序流程图
程序清单如下: SETB TR0 SINWAV:MOV R0,#00H ;查表指针初始化为0 SINLP1: MOV DPTR,#SINTAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A ;输出数据给D/A SINLP2: JNB TF0,SINLP2 ;由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,SINLP1 ;第一象限输出完了吗? SINLP3: MOV DPTR,#SINTAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A
SINLP4: JNB TF0 ,SINLP4 ;由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,SINLP3 ;第二象限输出完了吗? SINLP5: MOV DPTR,#SINTAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A ;输出数据给D/A SINLP6: JNB TF0,SINLP6 ;由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,SINLP6 ;第三象限输出完了吗? SINLP7: MOV DPTR,#SINTAB ;正弦波函数表地址送DPTR MOV A,R0
MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A SINLP8: JNB TF0 ,SINLP8 ;由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,SINLP7 ;第四象限输出完了吗? SJMP SINWAV ;输出下一个周期 SINTAB: DB 7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H DB 0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
开始 反向查表取反输出 查表取反输出 查表输出 反向查表输出 时间到吗? 时间到吗? 时间到吗? 时间到吗? 指向下一个点 指向下一个点 指向下一个点 指向下一个点 第一象限输出完? 第二象限输出完? 第三象限输出完? 第四象限输出完? ⒉三角波产生程序 三角波的产生程序和正弦波类似,其程序流程图见图10-6所示。 N N Y Y N N Y Y N N Y Y N N Y Y 图10-6 三角波产生程序流程图
程序清单如下: SETB TR0 TRIWAV:MOV R0,#00H ;查表指针初始化为0 TRILP1: MOV DPTR,#TRITAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A ;输出数据给D/A TRILP2: JNB TF0,TRILP2 ;由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,TRILP1 ;第一象限输出完了吗? TRILP3: MOV DPTR,#TRITAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A TRILP4: JNB TF0 ,TRILP4 ;由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,TRILP3 ;第二象限输出完了吗?
TRILP5: MOV DPTR,#TRITAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A ;输出数据给D/A TRILP6: JNB TF0,TRILP6 ;由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,TRILP6 ;第三象限输出完了吗? TRILP7: MOV DPTR,#TRITAB ;正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4地址送DPTR MOVX @DPTR,A TRILP8: JNB TF0 ,TRILP8 ;由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,TRILP7 ;第四象限输出完了吗? SJMP TRIWAV ;输出下一个周期 TRITAB: DB 7FH,86H,8DH,94H,9BH,0A2H,0A9H,0B0H,0B7H,0BEH DB 0C5H,0CCH,0D3H,0DAH,0E1H,0E8H,0EFH,0F6H,0FDH
N Y Y N Y 开始 开始 R0=00H 0FFH送D/A 时间到吗? R0送D/A 00H送D/A 时间到吗? 时间到吗? R0加1 ⒊锯齿波产生程序 锯齿波的产生原理前面已讲过,其程序流程图见图10-7所示。 图10-7 锯齿波产生程序流程图 图10-8 方波产生程序流程图
程序清单如下: SETB TR0 SOWWAV:MOV DPTR,#0FFFEH ;IC4地址送DPTR MOV R0,#00H ;波形输出初值为0 SOWLP1: MOV A,R0 MOVX @DPTR,A ;输出数据给D/A SOWLP2: JNB TF0,SOWLP2 ;由定时器控制频率 CLR TF0 INC R0 ;R0加1 SJMP SOWLP1 ⒋方波产生程序 按照前面方法,方波产生程序流程图见图10-8所示。其程序清单如下: SETB TR0 BOXWAV:MOV DPTR,#0FFFEH; IC4地址送DPTR BOXLP1: MOV A,#0FFH ;高脉冲 MOVX @DPTR,A ;输出数据给D/A BOXLP2: JNB TF0,BOXLP2 ;由定时器控制频率 CLR TF0 MOV A,#00H ;低脉冲 MOVX @DPTR,A ;输出数据给D/A BOXLP3: JNB TF0,BOXLP3 ;由定时器控制频率 CLR TF0 SJMP BOXLP1
㈢键盘管理模块 按前面硬件电路设计,可采用“行扫描”方法对键盘进行管理,首先对键盘进行“全盘扫描”,判断是否有键按下。若有键按下则对键盘进行“逐行扫描”,进行键译码,并将该键的键码读出来,然后按各命令键转到相应的程序进行处理。本波形发生器系统软件将键盘管理分成三部分: ⒈键盘全盘扫描部分 键盘的全盘扫描部分主要是判断是否有键按下,其工作原理参见第8章的8.1节。该子程序清单如下:
SCANKEY: MOV A,#0F0H MOV P1,A ;P1口行线置为全0,列线置为全1 MOV A,P1 ;读P1口 ANL A,#0F0H ;列信号在高4位 XRL A,#0F0H ;判断有键合上否? JZ SCANKEY ;无键合上再扫描检查 LCALL DELAY ;有键合上,调延时子程序去抖动 MOV A,#0F0H MOV P1,A ;P1口行线置为全0,列线置为全1 MOV A,P1 ;读P1口 ANL A,#0F0H ;列信号在高4位 XRL A,#0F0H ;判断有键合上否? JZ SCANKEY ;无键合上再扫描检查 RET
⒉ 键盘逐行扫描部分 判断有键按下后,下一步是将判断具体是哪一个键按下,并将其键码读出。不难得到其他按键的特征码: 按照上述原理,本逐行扫描程序先逐行扫描获取合上键的行信号和列信号,并组合成特征码,然后按此特征码查表识别该合上键的含义。程序如下:
RDKEY:MOV LINECOD,#0FEH ;第一行线置位为低电 平,为扫描作准备 KEYB1: MOVX A,LINCOD ;逐行扫描 MOV P1,A MOV A,P1 ;读列信号 ANL A,#0F0H ;列信号再高4位 MOV ROWCOD,A ;列信号暂存ROWCOD CJNE A,#0F0H, KEYB2 ;该行有键合上,转键译码 MOV A,LINECOD RL A ;为扫描下一行做准备 MOV LINECOD,A XRL A,#0EFH ;检查是否各行都扫描了一次 JNZ KEYB1 ;未扫描完一次继续 SJMP KEYRT ;退出
KEYB2:MOV A,LINECOD ANL A,#0FH ;行信号在低4位 ORL A,ROWCOD ;行、列信号拼装 CPL A ;取反获得特征码 MOV KEYCH,A ;特征码暂存KEYCH MOV KEYBCD,#00H ;查表得键值的初值 MOV DPTR,#KEYTBL ;置查表起始地址 KEYB3:CLR A MOVC A,@A+DPTR ;查表,得特征码 CJNE A,KEYCH,NEQ ;查表得的特征码和按键特征码不等? AJMP EQQ ;相等,表示查到,转EQQ NEQ: INC KEYBCD ;不等,表示未查到,为再查作准备 INC DPTR AJMP KEYB3 EQQ: LCALL DEYAY ;延时,等待键释放 MOV A,#0F0H ;判断键是否释放 MOV P1,A MOV A,P1 ANL A,#0F0H XRL A,#0F0H JNZ EQQ ;如果没有释放按键则等待释放 KEYRT:RET ;已经释放,返回键值在KEYBCD中 KEYTBL: DB 81H,82H,42H,22H,84H,44H,24H,88H DB 48H,28H,18H,14H,12H,11H,21H,41H
开始 键值>0FH? 退出 键值<0AH? 散转 波形选择处理 频率改变处理 幅值改变处理 ⒊按键处理部分 由上面键盘逐行扫描得到按键的键值后,要进行相应的处理:由于本键盘只有16个键,所以键值最大为0FH,故首先要判断所得键值是否合法,若所得键值大于0FH,则为非法,应重新读键;由于本键盘是用于选择波形、输入幅值和频率的,0~9数字键是按了功能键WAVE、AMPLITUDE和FREQUENCY后才能输入,所以在判断按键合法后,若为数字键则丢弃重读,若为功能键则转入相应的程序进行处理。这部分程序流程见图10-9所示。 Y N Y N 图10-9 按键处理程序流程图
这部分程序清单如下: KEYPC: MOV A,KEYBCD ;键值送A CLR C SUBB A,#10H JNC KEYBG1 ;键值大于0FH,转重新读键 SJMP KEYSL1 KEYBG1:LJMP RRDKEY KEYSL1:MOV A,KEYBCD CLR C SUBB A,#0AH JNC KEYBG2 ;键值大于09H,为功能键 LJMP RRDKEY ;键值小于0AH,转重新读键 KEYBG2:RL A MOV DPTR,#FCTJMP;散转 JMP @A+DPTR ;转各功能键分支 FCTJMP:AJMP WAVSL ;A:代表波形选择处理 AJMP AMPSL ;B:代表幅值设定处理 AJMP FRQSL ;C:代表频率设定处理 AJMP ENTNB ;D:代表数据确定处理 AJMP CLRNB ;E:代表数据清除处理 AJMP DOTNB ;F:代表小数点输入处理
㈣显示模块 显示程序模块主要用于初始化显示、键入数据的显示,其中初始化显示程序在显示电路的调试部分已给出,这里不再重复。下面就键入数据的显示程序作一说明: 本显示器由8个7段LED组成。其中,L1~L4四位用于显示频率;L5~L7三位用于显示幅值,L6的小数点常亮,显示范围是00.0V~99.9V,满足本波形发生器的幅值要求;L8用于显示波形类型,1为正弦波,2为方波,3为三角波,4为锯齿波。 输入数据通过查表转换为对应显示码,然后存于单片机内存30H~37H中。由于采用单片机的串口外接串入并出移位寄存器驱动显示,越早写入串口的数据移到离单片机越远的显示器。这样显示码的存储顺序应和显示器的次序刚好相反,即L8的显示码存于30H中,L7~L5的显示码存于31H~33H中,L4~L1的显示码存于34H~37H中。显示时,将30H~37H中的显示码依次取出,写入单片机的串口中即可。程序清单如下:
DISP8: MOV R0,#30H ;显示指针初始化为指向第1个数 MOV SCON, #00H ;将串行口初始化为方式0 DISP80: MOV A,@R0 ;显示码送A MOV SBUF,A ;由串行口发送到7段LED上显示 DISP81: JNB TI,DISP81 ;等待本次串行输出完成 ACALL DLAY1 ;延时一段时间 CLR TI ;清发送中断标志 INC R0 ;准备查下一个数 CJNE R0,#38H,LOOP ;8个数已输出显示完?未显示完,则继续 RET ;已显示完,则退出 ㈤软件总流程图 对于一个复杂的软件,一定要有一个软件总流程图,以便反映各个软件子模块间的内在联系,表达各个子模块的功能。根据对软件任务的讨论,得到波形发生器的软件总流程图如图10-10所示。
开始 初始化 提示符显示 键盘全盘扫描 有键按下? 逐行扫描读键 有效键? 散转 幅值改变处理 波形选择处理 频率改变处理 散转 正弦波输出 方波输出 三角波输出 锯齿波输出 键盘全盘扫描 键盘全盘扫描 键盘全盘扫描 键盘全盘扫描 有键按下? 有键按下? 有键按下? 有键按下? N Y N Y N N N N Y Y Y Y
二、各软件模块调试 首先,将源程序进行汇编,若汇编未通过,则汇编程序会提示出错类型,比如操作码错、缺少操作数、跳转出范围、符号未定义、缺少“,”等常见错误。经过修改后再进行汇编,若这时提示汇编成功,保存目标文件,则说明源程序的指令使用没有错误。但并不表示程序没有错误,还必须经过仿真调试,仿真通过才说明程序设计正确。 接下来要进行实物仿真调试,在用户电路板上插好仿真头,接好通信电缆,接通电源,运行仿真软件。在进行实物仿真之前,要选择正确的仿真头、通信口、通信协议和波特率等,并设置用户程序空间和数据空间所处的位置(用户板上或仿真器上)。然后,装入前面的提示符显示程序,汇编并执行,若在用户板上的8个七段LED显示器上显示的结果是“123456768”,则说明提提示符程序设计完全正确。其它软件模块的调试方法类似。
10.2.5系统整体调试 一、系统整体调试 在系统的硬件和软件分别调试成功后,可以进行系统的整体调试。先用仿真器进行调试,插好仿真头,接通电源,启动仿真器,将本波形发生器的系统软件装入仿真器中,并运行,调试系统的整体配合的正确性,直到满意为止。 二、系统试运行及性能测试 将调试好程序的目标代码,通过编程器写入AT89C51中,并将AT89C51插入用户板上,接通电源,显示器上应显示“12345678”这8个数字。然后通过键盘选择不同的波形、幅值和频率,用示波器观察到的输出信号应和所设定的若一致,则说明系统运行正常。 经过一段时间的考机试运行后,可以对系统的性能进行测试。对于本波形发生器来说,用示波器和万用表就可以测试其性能指标。按前面所述设计的波形发生器,能产生一路正弦波、三角波、锯齿波或方波信号,其幅度可在0~10V内变化,频率可调整,大致为方波频率为0~100KHz,锯齿波频率为0~200KHz,正弦波和三角波的频率为0~1.5KHz。
小 结 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统和典型应用系统等,其中最常见的是典型应用系统。 采用单片机解决实际应用时,一般要经历如下几个步骤: ⑴提出问题、了解现场、明确指标。 ⑵进行可行性论证,提出初步方案。 ⑶提出各分课题的设计方案。 ⑷设计、调试、修改并完成各分课题的任务。 ⑸将各分课题组成整体应用系统,并对系统进行总体调试、修改、完善。 而研制出一个较完整的单片机产品一般要经过以下几步工作: ⑴系统硬件电路设计、组装、调试; ⑵系统应用软件的编制、调试; ⑶系统应用软件的链接调试、固化、脱机(脱离开发装置)运行。
思考题与习题十 1.构成一个单片机应用系统大体要经过哪些步骤? 2.所谓单片机应用系统的开发,其基本含义是什么? 3.单片机应用系统的一般开发过程是怎样的? 4.单片机开发系统包含哪些基本部分? 5.常用的单片机开发系统有哪些类型?各有什么特点? 6.就你使用过的单片机开发系统,说说其结构原理和操作特点。 7.按照本章所举例的方法,将该波形发生器的软件设计完成。