第12章微机应用系统设计与实现1.教学目的和要求:了解微机应用系统的概念掌握微机应用系统设计的原则与步骤学会设计简单的微机应用系统2.教学重点:微机应用系统设计3.掌握难点:微机应用系统设计5.教学方法:课堂讲授6.教学内容摘要:12.1概述12.1微机应用系统概述微型计算机不但在理、工、农、文教、卫生、国防科学等方面已得到广泛的应用,而且在办公自动化及家庭生活中也已逐渐得到推广和应用。12.1.1微机应用的意义既可以是对计算机的硬件作相当大的增加(如检测通道、执行通道及相应的接口),也可以是在原有软件(操作系统,监控程序)的支持下设计出完全满足用户需要的应用软件。也就是说,“应用”必须是通过硬件和软件或硬件或软件的增减,来满足用户的需要。12.1.2微机应用系统的一般类型微机的应用一般可分成三种类型。1.检测控制型2.数据处理型3.混合型12.2系统设计的原则与步骤12.2.1微机应用系统的一般构成微机应用系统由硬件系统(计算机+控制电路)和软件系统(系统软件+应用软件)两大部分构成。1.应用系统的硬件组成1)微机2)常规外围设备(1)输入设备:主要用于程序和数据的输入,常见的有纸带阅读机、键盘、鼠标器和光笔等。(2)输出设备:主要用于程序处理后的信息或数据的输出。它把处理过的各种信息和数据,以(3)外存贮器:主要用来存贮程序及有关的数据,如磁带机、磁盘(硬盘和软盘)、光盘等。图12.1微机应用系统硬件的一般组成3)外部接口设备4)操作控制台及监视报警设备2.应用系统的软件构成1)用户程序2)常用子程序库12.2.2应用系统的设计原则和要求1.操作性能要好2.通用性好,便于扩展3.可靠性高4.设计周期短、价格便宜5.对环境的适应性要好12.2.3微机应用系统设计的基本内容和步骤1.系统引入微机的必要性——成本控制2.需求分析——确定系统的功能3.选择基本微机系统——硬件系统设计4.确定整个应用系统的硬件结构——硬件系统设计5.确定软件框架及流程——软件系统设计6.硬件和软件的具体设计——系统实现7.软、硬件联调——系统调试8.实验室模拟运行——离线仿真9.现场调试、试运行10.验收或鉴定——系统性能评估12.2.4系统集成12.3微机应用系统设计实例12.3.1微机信号发生器【例12-1】利用微机制作信号发生器。通过在微型计算机中扩展A/D、D/A通道和信号变换设备,形成多种信号发生器的硬件环境。通过软件编程使用DAC0832产生不同波形,然后利用ADC0809采集这个波形并以图形方式在显示器上显示。本例以产生锯齿波为例,说明系统分析设计的全过程。当然,若在软件设计上稍做修改,也可以产生方波、三角波信号等。1.硬件设计设计提示:D/A转换送出的模拟量信号,再用A/D将其取回并转换成数字量数据。对于D/A和A/D转换器的工作原理,可参考D/A和A/D章节部分,这里不做说明。以图形方输入接口输出接口外存储器微处理机输入通道输出通道监视及报警设备信号变换电路信号变换电路控制监测对象常规外围设备BUS操作控制台外部接口及设备式显示各种波形,必须熟悉和掌握微型计算机显示器的图形编程方法,具体可用BIOS的INT10H调用来实现。根据上述分析,依据前面介绍的设计原则和设计步骤,分析设计系统的硬件连接。参考电路如图12.4所示。其中:(1)D/A电路采用双缓冲工作方式,用CS片选信号确定输入寄存器和DAC寄存器的端口地址,进行两次写操作便可以完成数据传送和转换。第一次CS有效,完成将数据线上的数据锁存到输入寄存器;第二次有效,完成将输入寄存器中的数据锁存到DAC寄存器实现D/A转换。D/A电路用通用双运放LM358实现电流到电压的转换。D/A输出为双极性,电压输出范围是-5~+5V,电压输出与数字量的应关系如表12-1所示。表12-1电压输出与数字量的对应关系(2)A/D电路将START端和ALE端相连,从而可同时锁存通道地址并开始A/D采样转换。其输入控制信号为CS和IOW,故启动A/D转换只要能发出CS和IOW信号即可。如:MOVDX,2A0H;ADC0809的端口地址OUTDX,AL;启动A/D采用中断法读取A/D转换结果,即用A/D转换结束信号EOC作为中断请求信号,提出中断申请,在中断服务程序中,使用下面的指令读取A/D转换的结果:MOVDX,2A0HINAL,DX可使用微型计算机的中断IRQ3(串行口2不用),A/D芯片的EOC信号接总线的IRQ3。ADC0809采集通道用IN0,电压输出范围是0~+5V,端口地址为2A0H。(3)8254用通道0对CPU主频进行分频(8086CPU主频为4MHz,分频后产生ADC0809所需的500kHz时钟)。8254通道0的地址为2B0H,8254控制寄存器的地址为2B3H。(4)地址译码器完成各个接口芯片的地址选择,可采用74LS128译码器,也可用逻辑门电路来实现线选译码。在选择各个端口地址时一定不能与IBM-PC系统中的I/O端口地址冲突。本例选择的地址范围为290H~2B7H。其中的290H~29lH分配给DAC0832,2A0H~2A7H分配给ADC0809,2B0H~2B3H分配给8254。数字量电压输出00H-5V80H0VFFH+5V图12.4例12-l的参考电路2.软件设计(以锯齿波信号为例)D/A数据端送出的锯齿波数据由80H(0V)开始,每次增1,顺序递增到0FFH(+5V),输出1个锯齿波。重复此过程,可以连续输出多个锯齿波。显示器应初始化成图形方式,再显示锯齿波图形。A/D采集来的锯齿波图形放置到一个数据缓冲区中,同时画出该锯齿波的图形点。数据缓冲区满时,将第一个锯齿波数据从数据缓冲区去掉,同时将对应的图形点抹掉。将数据缓冲区中其余锯齿波数据顺序前移一个位置,并将其余锯齿波图形点的显示也顺序前移一个位置,这样可得到一个向前移动的锯齿波图形显示,使得演示的波形更加直观。lsbD10DI1DI2DI3DI4DI5DI6msbD17VrefWR1WR2ILEIOUT1IOUT2RfbXferCSVcc20+57654161514138218D0D1D2D3D4D5D6D7IOW+-101112329171+-156LM358LM35810k15k15k15k71&&174LS0474LS002174LS0434131210911874LS00Y0Y1Y2Y3Y4Y5Y6Y7ABCE1E2E315141312111097&&&43126374LS0074LS002A0H~2A7HD0D1D2D3D4D5D6D7CSRDWRA0A1GATE2CLK2OUT2GATE1CLK1OUT1GATE0CLK0OUT02B0H~2B7H876543212122231920IORIOWA0A1161817141513119104M+5msb2-12-22-32-42-52-62-7lsb2-8EOCADD-AADD-BADD-CSTARTALEENABLECLOCKIN-0IN-1IN-2IN-3IN-4IN-5IN-6IN-7ref(-)ref(+)10262728123451612212019188151417725242374LS08312A0A3A4A5A6A8A7A9IOWIORIRQ3A0A1A274LS138DAC083250PIN123456290H297H~8254ADC08096229…图12.5锯齿波主程序流程图图12.6中断服务程序流程图3.锯齿波参考程序;系统主程序DATASEGMENTX0EQU155Y0EQU155;坐标系原点坐标(X0,Y0)MESSDB‘pressanykeytoreturntodos.’,0DH,0AH;提示信息TMCTLEQU2B3H;8254控制口地址TMROEQU2B0H;8254通道0地址INPREQU290H;DAC0832输入寄存器地址DACREQU29lH;DAC0832DAC寄存器地址开始对8254初始化,产生500Hz时钟对中断IRQ3进行初始化:保护现场,置新的中断向量,开放中断采集数据缓冲区首地址→SI调用屏幕图形初始化子程序,初始化屏幕,并画X、Y坐标系及刻度80H→锯齿波数据值D/A数据端口发送锯齿波数据锯齿波数据+1是否到顶端?80H→锯齿波数据值开中断启动A/D转换器,采集数据主程序暂停,等待触发中断关中断A/D采集数据→采集数据缓冲区缓冲区满否?调画点子程序,画出采集的锯齿波数刷新显示,缓冲区数据顺序前移有键按下否?D/A结束,恢复原中断向量和屏蔽字结束YNYNNY开始保护现场读入A/D转换数据发出中断结束命令恢复现场中断返回DAINDB?;DAC0832的D/A数据INT3SDW?;IRQ3的中断向量段地址保存单元INT3ODW?;IRQ3的中断向量偏移地址保存单元IMRDB?;中断屏蔽字保存单元ADDREQU2A0H;ADC0809的片选地址ADDADB?;ADC0809的采集数据COUNTDW0;ADC0809的采集数据个数BUFFDB240DUP(?);采集数据缓冲区(240个数据)DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSWRICHMACROCHAR,WH,COLOR;写字符定调用(CHAR为字符,WH为位置,COLOR为颜色)MOVAH,02H;置光标位置功能调用MOVDX,WH;光标位置为WHMOVBH,00HINT10H;显示功能调用MOVAH,09H;写字符功能调用MOVAL,CHAR;显示字符送ALMOVBL,COLOR;置字符颜色MOVCX,l;字符长度为1INT10HWRICHENDMCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXCLI;关中断MOVDX,TMCTLMOVAL,00110110BOUTDX,AL;8254初始化MOVDX,TMROMOVAL,08H;计数低位字节,计数初值为8OUTDX,ALMOVAL,00H;计数高位字节置0OUTDX,ALMOVAL,0BHMOVAH,35HINT21H;取IRQ3的中断向量并保存在INT3OMOVINT3S,ES;和INT3S单元MOVINT3O,BXPUSHDSMOVDX,OFFSETADINTMOVBX,SEGADINTMOVDS,BXMOVAL,0BHMOVAH,25HINT21H;设置新的IRQ3中断向量POPDSINAL,21HMOVIMR,AL;保存中断屏蔽字ANDAL,11110111BOUT21H,AL;开放IRQ3中断MOVSI,OFFSETBUFFCALLINIT;屏幕图形初始化MOVDAIN,80H;锯齿波初值80H送DAINBEGIN:MOVAL,DAINMOVDX,INPROUTDX,AL;锯齿波值送DAC0832输入寄存器MOVDX,DACROUTDX,AL;锯齿波值送DAC0832DAC寄存器INCDAINJNZQQQMOVDAIN,80HQQQ:STI;开中断MOVDX,ADDROUTDX,AL;启动一次A/D转换HLT;等待中断CLIINCCOUNT;采集数据个数+1MOVAL,ADDA;取A/D采集数据MOVBX,COUNTMOVBYTEPTR[SI+BX],AL;将A/D采集数据送数据缓冲区CMPCOUNT,240JBDRAW;以下程序为采集数据缓冲区满的处理,在显示器上抹掉缓冲区中第一个数据的显示;将缓冲区中2~240位置的数据顺序向前移动一个位置MOVBX,1;从采集数据缓冲区的;第一个数据处开始处理BUFDR:MOVAL,00;点的颜色为黑色CALLDPT;从显示器上抹掉第一个点MOVAL,BYTEPTR[SI+BX+l]MOVBYTEPTR[SI+BX],AL;将采集数据缓冲区的数据MOVAL,0FFH;顺序前移一个位置,并置点的CALLDPT;颜色为白色,调用画点子程序INCBXCMPBX,240JNEBUFDRMOVCOUNT,2