《微机原理与接口技术实验报告下》指导教师:陆勤姓名:程少锋学号:139074366班级:物联网131班实验三8253、8255、8259综合实验1.8253计数器实验要求:计数器1方式0计数,计满3个数产生中断,中断5次后结束。实验线路见图6-6:图6-68253计数器实验电路图实验程序:INTPORT1EQU0FF80H;8259A的偶地址入口INTPORT2EQU0FF81H;8259A的偶地址入口INTQ3EQUINTREEUP3;INTREEUP3地址TCONTR0EQU0043H;8253端口地址TCON1EQU0041H;8253端口地址PAEQU0FF20H;字位口PBEQU0FF21H;字形口PCEQU0FF22H;键入口codesegmentassumecs:codeORG12D0H;源地址START:JMPSTART0;跳转到START0BUFDB?,?,?,?,?,?;六字节缓冲区intcntdb?;一字节的缓冲区data1db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6hdb0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;七段码定义START0:CLD;置方向位CALLBUF1;调用子程序BUF1CALLWRINTVER;WRITEINTRRUPTMOVAL,13H;写ICW1,边沿触发,单片,需要ICW4MOVDX,INTPORT1OUTDX,ALMOVAL,08H;ICW2,中断类型号高5位MOVDX,INTPORT2OUTDX,ALMOVAL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统OUTDX,ALMOVAL,0F7HOUTDX,ALMOVintcnt,01H;TIME=1MOVDX,TCONTR0;指向控制口MOVAL,51H;8253控制字,通道1,方式0,只读/写低字节,BCD码计数OUTDX,AL;送控制字MOVDX,TCON1;指向控制口MOVAL,03;计数值低字节OUTDX,AL;送控制字MOVDX,0FF23H;指向8255A控制口MOVAL,80;A口方式0,输出,C口上半部输出,B口方式0,输出,C口下半部输出OUTDX,AL;送控制字STI;开中断WATING:CALLDISP;DISP825359JMPWATINGWRINTVER:MOVAX,0HMOVES,AXMOVDI,002CH;目的地址LEAAX,INTQ3;INTQ3的偏移地址STOSW;存字MOVAX,0000h;清零STOSWRET;中断返回INTREEUP3:pushax;入栈pushbxpushcxpushdxMOVDX,TCON1;指向控制口MOVAL,03;计数值低字节OUTDX,ALMOVAL,INTCNTCALLCONVERSMOVBX,OFFSETBUFMOVAL,10HMOVCX,05H;置循环数INTRE0:MOV[BX],AL;将Al中的值存在[BX]中INCBX;BX加1LOOPINTRE0;循环ADDINTCNT,01H;循环数是五次CMPINTCNT,06HJNAINTRE2CALLBUF2;DISP:goodINTRE1:CALLDISPJMPINTRE1CONVERS:ANDAL,0FH;显示次数MOVBX,offsetbufMOV[BX+5],ALRETINTRE2:MOVAL,20HMOVDX,INTPORT1OUTDX,ALpopdxpopcxpopbxpopaxIRET;软中断返回DISP:MOVAL,0FFH;00HMOVDX,PA;清零OUTDX,ALMOVCL,0DFH;20HMOVBX,OFFSETBUFDIS1:MOVDX,PCOUTDX,ALMOVAL,[BX]MOVAH,00HPUSHBXMOVBX,OFFSETDATA1ADDBX,AXMOVAL,[BX]POPBXMOVDX,PBOUTDX,ALMOVAL,CLMOVDX,PAOUTDX,ALPUSHCXDIS2:MOVCX,00A0HLOOP$POPCXCMPCL,0FEH;01HJZLX1INCBXRORCL,1;SHRCL,1JMPDIS1LX1:MOVAL,0FFHMOVDX,PBOUTDX,ALRETBUF1:MOVBUF,08HMOVBUF+1,02HMOVBUF+2,05HMOVBUF+3,03HMOVBUF+4,05HMOVBUF+5,09HRETBUF2:MOVBUF,09HMOVBUF+1,00HMOVBUF+2,00HMOVBUF+3,0dHMOVBUF+4,10HMOVBUF+5,10HRETCODEENDSENDSTART思考:如果计数器0方式0计数,计满5个数产生中断,中断3次后结束。硬件软件如何修改?硬件修改:将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。程序修改:将程序对应部分做如下修改1、TCON1EQU0041H改为TCON1EQU0040H2、将8253控制字由MOVAL,51H改为MOVAL,11H3、计数值低字节将MOVAL,02改为MOVAL,044、将CMPINTCNT,06H改为CMPINTCNT,04H;2、8253定时器实验要求:用8253定时器1通道定时,每隔1秒使PA口的指示灯的状态右移一位。主程序反复游走显示8253-A。8253定时器实验线路见图6-7:图6-78253计数器实验电路图实验程序:CODESEGMENT;ASSUMECS:CODEINTPORT1EQU0FF80H;8259A的偶地址入口INTPORT2EQU0FF81H;8259A的奇地址入口INTQ3EQUINTREEUP3TCONTR0EQU0043H;8253端口地址TCON1EQU0041H;8253端口地址IOCONPTEQU0FF2BH;8255A的端口地址IOBPTEQU0FF29H;8255A的端口地址IOAPTEQU0FF28H;8255A的端口地址PAEQU0FF20H;字位口PBEQU0FF21H;字形口PCEQU0FF22H;键入口ORG12D0H;源地址START:JMPSTART0BUFDB?,?,?,?,?,?;6字节缓冲区intcntdb?;1字节缓冲区WEIKONGDB?;1字节缓冲区data1db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6hdb0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FHSTART0:CLD;置方向位CALLBUF1CALLWRINTVER;WRITEINTRRUPTMOVAL,13H;写ICW1,边沿触发,单片,需要ICW4MOVDX,INTPORT1OUTDX,ALMOVAL,08H;ICW2,中断类型号高5位MOVDX,INTPORT2OUTDX,ALMOVAL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统OUTDX,ALMOVAL,0F7HOUTDX,ALMOVintcnt,50;软件计数50(1秒=20ms*50)MOVDX,TCONTR0MOVAL,74H;通道1,先读/写低字节,再读/写高字节,方式2,二进制数OUTDX,ALMOVDX,TCON1;计数器1定时20msMOVAX,40000OUTDX,ALMOVAL,AH;读入计数值的高字节OUTDX,ALMOVDX,0FF2BHMOVAL,82H;A口方式0,输出,C口上半部输出,B口方式0,输入,C口下半部输出OUTDX,ALMOVWEIKONG,0FEH;初始PA0对应位亮MOVAL,WEIKONGMOVDX,0FF29HOUTDX,ALSTI;开中断WATING:CALLDISP;DISP8253-AJMPWATINGWRINTVER:MOVAX,0HMOVES,AXMOVDI,002CH;目的地址LEAAX,INTQ3;INTQ3的偏移地址STOSWMOVAX,0000hSTOSWRETINTREEUP3:DECINTCNT;INTCNT减1JNZINTRE2MOVINTCNT,50ROLWEIKONG,1MOVDX,IOAPTMOVAL,WEIKONGOUTDX,ALINTRE2:MOVAL,20HMOVDX,INTPORT1OUTDX,ALIRET;软中断返回DISP:MOVAL,0FFH;00HMOVDX,PAOUTDX,ALMOVCL,0DFH;20HMOVBX,OFFSETBUFDIS1:MOVDX,PCOUTDX,ALMOVAL,[BX]MOVAH,00HPUSHBXMOVBX,OFFSETDATA1ADDBX,AXMOVAL,[BX]POPBXMOVDX,PBOUTDX,ALMOVAL,CLMOVDX,PAOUTDX,ALPUSHCXDIS2:MOVCX,0000HLOOP$POPCXCMPCL,0FEH;01HJZLX1;相等转LX1INCBXRORCL,1;循环右移一位,指示灯又移变亮JMPDIS1LX1:MOVAL,0FFH;指示灯全灭MOVDX,PBOUTDX,ALRETBUF1:MOVBUF,08HMOVBUF+1,02HMOVBUF+2,05HMOVBUF+3,03HMOVBUF+4,17HMOVBUF+5,0AHRETCODEENDSENDSTART思考:硬件修改:将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。接在PB口的线与接在PA口的线互换。软件修改:按照下面对相应部分修改1、TCON1EQU0041H改为TCON1EQU0040H2、将MOVAL,74H改为MOVAL,34H;3、将MOVAL,82H改为MOVAL,90H4、将MOVWEIKONG,0FEH改为MOVWEIKONG,07FH5、将MOVINTCNT,50改为MOVINTCNT,1006、将MOVAL,WEIKONG改为MOVAL,WEIKONG7、将ROLWEIKONG,1改为RORWEIKONG,18、将RORCL,1改为ROLCL,19、将MOVBUF+5,0AH改为MOVBUF+5,0BH五、本次实验总结实验过程中把学过的计算机编译原理以及操作系统的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。实验五A/D转换实验一、实验目的了解模/数转换基本原理,掌握ADC0809的使用方法;掌握定时数据采集程序的编制方法。二、实验内容1、A/D转换实验利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。(1)实验接线图ADC0809接线见图6-9图6-9ADC0809接线图(2)编程指南ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:MOVDX,ADPORT;ADC0809端口地址OUTDX,AL;发CS和WR信号并送通道地址用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果。MOVDX,ADPORT;ADC0809端口地址INAL,DX循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。(3)实验程序框图A/D转换流程见图6-10图6-10A/D转换流程(4)实验步骤①将0809CS4插孔连到译码输出FF80H插孔。②将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T。③运行实验程序,系统上显示“0809XX”。“XX”表示输入模拟量转换后的数字量。④调节电位器Wl,显示器上会不断显示新的转换结果。模拟量和数字量对应关系的典型值为:0V→00H+2.