1微型计算机技术课程设计指导教师:程世旭刘元超学生班级:计科10606班学生姓名:古莹学号:200603256班内序号:4课设日期:2009年9月14日~2009年9月27日2目录一.设计目的二.实验平台和所用器材三.设计内容四.设计原理五.程序流程图六.调试分析七.原理图设计八.程序清单九.收获、体会和建议一设计目的31.通过本设计,使学生综合运用《微型计算机技术》、《汇编语言程序设计》以及电子技术等课程的内容,为以后从事计算机检测与控制工作奠定一定的基础。2.主要掌握并行I/O接口芯片8253、8255A、ADC0809及中断控制芯片8259A等可编程器件的使用,掌握译码器74LS138的使用。3.学会用汇编语言编写一个较完整的实用程序。4.掌握微型计算机技术应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等步骤。二实验平台和所用器材本实验是在windowsXP操作系统上实现的,程序的开发环境是用实验室的课设平台,所用到的器材如下:①一块实验面包版(内含时钟电路)。②可编程芯片8253、8255A、ADC0809和译码器芯片74LS138、74LS245各一片。③可调电位器4.7KΩ一个、发光二极管8个、74LS06芯片2个。④导线若干。⑤示波器、万用表、常用工具等。三设计内容采用ADC0809设计一个单通道模拟电压采集电路,要求对所接通道的变化的模拟电压值进行采集,采集来的数字量一路送至发光二极管指示,一路送至计算机显示到屏幕上,每行显示5个数据,采集完100个数据后停止采集过程,采集过程中按下ESC键也可中断采集过程。首先要求我们定义出选择菜单,给出显示界面。1.8255的自检测这部分要求我们初始化8255,为了能够正确的看出8255已经初始化,当8255初始化后向B口送数据0FH到发光二管上显示,如果能够正确显示就说明8255已经被初始化。并且可以说明74LS245,8255,74LS06能够正常工作,并且他们的连线都正确。1.8253的自检测这部分要求我们初始化8253,8253初始化后可以通过示波器观察输出的波形是否满足要求。3.进行A/D转换这部分是本次课设的关键部分,在做此之前,必须保证8255和8253都被正确的初始化,通过8255的C口控制ADC0809对模拟数据的采集,然后从A口读取转换后的数据,一路送发光二极管显示,一路送显示器上显示,模拟量由电位器得到。2.退出系统如果用户需要结束程序,从菜单上选择此菜单即可退出程序.四设计原理1、使用Protues或Protel设计出正确电路原理图,设计原理如下:a.4.7KΩ电位器一端接+5V,一端接地,调节电位器得到变化的模拟电压,该电压接至ADC0809的某一通道输入端(如IN0),ADC0809的时钟为500KHz,由8253对面包板上时钟1MHz或2MHz分频后得到,8253的端口地址:300H~303H。4b.编程启动ADC0809转换(ADC0809完成一次转换的时间大约为120μs),将ADC0809的EOC引脚信号作为中断信号,若转换结束则进入中断服务程序。在中断服务程序中读入模数转换结果,一路送至发光二极管显示,一路送至计算机显示到屏幕上。c.8255A用做CPU和ADC0809间的接口芯片,ADC0809的控制信号(如OE、ALE、START等)可由8255A的PC口提供,模数转换后的数字量可经8255A的PA口读入,经8255A的PB口输出到发光二极管。8255A端口地址:304H~307H。d.译码电路由74LS138提供。74LS245用于总线和8255A之间的数据的双向传输和隔离。MFPTPCI总线驱动板逻辑结构如图所示芯片简介(1)74LS245的功能表74LS245数据总路线缓冲器74LS245的功能表PCI9052/9054PCIBusISABusCPLD5(2)ADC0809简介引脚信号提供一个8通道的多路开关和寻址逻辑IN0~IN7:8个模拟电压输入端ADDA、ADDB、ADDC:3个地址输入线ALE:地址锁存允许信号ALE的上升沿用于锁存3个地址输入的状态,然后由译码器从8个模拟输入中选择一个模拟输入端进行A/D转换。ADC0809的外部特性ADC0809的数字输出D0~D7OEDATA100s2s+8T(最大)200ns(最小)ADDA/B/CFSDAAAA/C/EOCStart6ADC0809内部锁存转换后的数字量具有三态数字量输出端D0~D7配合输出允许信号OE当输出允许信号OE为高电平有效时,将三态锁存缓冲器的数字量从D0~D7输出注:其它的芯片查阅微型计算机技术的书。(3)8255A与ADC0809的连接(4)8253定时/计数器对8253进行编程,定时100ms后,产生中断,该定时信号(OUT0)送入到系统预留给用户的IRQ2(或IRQ10)引脚产生中断,在中断服务子程序中,启动一次ADC0809模数转换,ADC0809采用查询方式工作。IRQ10中断向量号为72H8253的时钟(CLK0)取自MFID实验平台。2、编写程序初始化8255和8253(1)初始化8255:8255有四个寄存器,地址为300h-303h,分别为A口,B口,C口,和控制口,首先要向C口写入控制字,控制字格式如下:工作方式控制D7D6D5D4D3D2D1D0特征位1A组方式选择端口A输入/输出C口高四位输入/输出B组方式选择端口B输入/输出端口C低四位输入/输出C端口置位/复位控制D7D6D5D4D3D2D1D0特征位0任意位选择置位/复位0为复位,1为置位可用如下代码初始化8255:MOVDX,307H;给8055控制口,初始化8255MOVAL,98H;AL=10010000,写8255控制字,A口输入,B口输出,C口高/低四位输出OUTDX,AL(2)初始化825378253控制字格式如下:D7D6D5D4D3D2D1D0计数器选择读写格式工作方式计数方式MOVDX,303H;给8053控制字口MOVAL,00010100B;计数器0工作在方式2,只低八位,用二进制OUTDX,ALMOVDX,300H;给计数器0初值2MOVAL,2OUTDX,AL3、编写中断服务子程序首先要设置好中断向量,这里是调用72H号中断,在里面写入A/D转换的中断服务子程序地址,所以要保存原来72H中断向量表里面的内容,最后在程序完成时要恢复72H里的内容,在执行这些操作的时候是不容许中断的,所以要关中断,操作完成后要开中断,可以用以下指令来完成:MOVAX,3572H;获取原中断向量INT21HMOVINT0A_OFF,BX;保存x中断向量MOVBX,ESMOVINT0A_SEG,BXCLI;关中断MOVAX,2572HMOVDX,SEGLEDLIGHT;设置新的中断向量PUSHDSMOVDS,DXMOVDX,OFFSETLEDLIGHTINT21HPOPDSSTI;开中断要想启动0809进行转换,首先必须有一个start信号,该信号为:数据采集之后,恢复中断向量,部分程序如下:MOVAX,2572H;恢复中断向量MOVDX,INT0A_SEGPUSHDSMOVDS,DXMOVDX,INT0A_OFFINT21HPOPDSINAL,0A1H;屏蔽IRQ10ORAL,04HOUT0A1H,AL8MOVAX,4C00H;程序退出INT21HLEDLIGHTPROCFAR;中断服务程序PUSHSIPUSHAXPUSHDXCLI;关中断MOVDX,307HMOVAL,5H;AL=00000101使PC2口为高,读取转换结果到PA口OUTDX,ALMOVDX,304;从A口读取数据INAL,DXPUSHAX;先保存数据SHOW:ANDAL,0F0H;显示高四位MOVCL,04SHRAL,CLCMPAL,9JAHEXADDAL,30HJMPNEXTHEX:ADDAL,37HNEXT:MOVDL,ALMOVAH,2;输出显示高四位INT21HPOPAXANDAL,0FH;显示低四位CMPAL,9JAHEX1ADDAL,30HJMPNEXT1HEX1:ADDAL,37HNEXT1:MOVDL,AL;输出数据MOVAH,02HINT21HMOVDL,13;输入回车换行符MOVAH,2INT21HMOVDL,10MOVAH,2INT21HMOVAH,09HMOVDX,OFFSETERRORINT21H9NEXT2:MOVAL,62H;发中断结束命令MOVDX,0A0HOUTDX,AL;向从片8259发EOI命令OUT020H,AL;向主片8259发EOI命令STI;开中断POPDXPOPAXPOPSIIRET五.程序流程图六.调试分析进入主菜单后选择1进行8255的初始化,这时候会发现在实验板上的一半灯亮,一半灭;选择2后进入8253的初始化,可以用示波器观察输出的波形,选择3后进入A/D转换,将转换来的数据一路送二极管显示,一路送显示器。10七.原理图设计八.程序清单;在本程序中,8253的地址是H-303H,8355A的地址是H-307H,和KS4电路图对应DATASEGMENTINT0A_OFFDW(?)INT0A_SEGDW(?)COUNTDB(5)SUMDB(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATADELAYPROCPUSHCXPUSHBXMOVBX,0FFFHLOOP2:MOVCX,0FFFFHLOOP1:LOOPLOOP1DECBXJNZLOOP211POPBXPOPCXRETDELAYENDPDISPPROCpushaxshow:andal,0f0h;显示高位shral,4cmpal,9jahexaddal,30hjmpnexthex:addal,37hnext:movdl,almovah,2int21Hpopaxandal,0fh;显示低位cmpal,9jahex1addal,30hjmpnext1hex1:addal,37hnext1:movdl,al;输出信号movah,2int21hmovah,2;输出空格movdl,0int21h;INCSUM;MOVAL,SUM;CMPAL,100;JZPROENDDECCOUNTMOVAL,COUNTCMPAL,0JNZDISPENDMOVCOUNT,5movdl,13;向屏幕送回车符movah,212int21hmovdl,10;向屏幕送换行符movah,2int21hDISPEND:RET;PROEND:;MOVAX,4C00H;INT21HDISPENDPSTART:MOVAX,DATAMOVDS,AXMOVDX,307H;初始化MOVAL,80HOUTDX,ALMOVDX,305H;LED灯熄灭MOVAL,0FFHOUTDX,ALMOVAX,3572H;获取原中断向量INT21HMOVINT0A_OFF,BX;保存原中断向量MOVBX,ESMOVINT0A_SEG,BXCLI;关中断MOVAX,2572HMOVDX,SEGLEDLIGHT;设置新的中断向量PUSHDSMOVDS,DXMOVDX,OFFSETLEDLIGHTINT21HPOPDSSTI;开中断INAL,0A1H;打开IRQ10ANDAL,0FBHOUT0A1H,ALINAL,21H;打开IRQ2ANDAL,0FBHOUT21H,ALMOVDX,303H;对实验板上的MHZ信号进行分频,为ADC0809提供转换时钟信号CLOCKMOVAL,00010100B13OUTDX,ALMOVDX,300HMOVAL,2OUTDX,AL;这条指令可去掉,因为在电路中ADDA/ADDB/ADDC都已接地,固定使用通道begin:;movdx,307h;初始化状态字,A口输出,;moval,80h;outdx,al;movdx,304h;送通道号至A口;moval,0;outdx,almovdx,307hmoval,3h;00