当前位置:文档之家› 接口实验 报告

接口实验 报告

计算机原理及接口技术实验报告实验一 8253计数器/定时器实验一、实验目的:1.学会通过62芯总线、驱动器、译码器等,在PC/XT机外扩展新的芯片。

2.掌握8253定时器编程原理,用示波器观察不同模式下的波形。

二、实验内容:用8253构成一个方波发生器或分频器。

1.按下图连接硬件线路:2.编程将定时器0设为模式3(方波),定时器1设为模式2(分频),定时器0的输出脉冲作为定时器1的时钟输入。

在示波器中,观察定时器0和1的输出波形及其关系。

三、程序框图:8253控制端口地址为203H 定时器0地址为200H 定时器1地址为201H注:CLK0连接由8MHZ时钟分频得到的250KHZ,则定时器l输出OUT1约为50HZ。

四、实验源代码:TIM_CTL EQU 0EC3HTIMER0 EQU 0EC0HTIMER1 EQU 0EC1HMODE03 EQU 36HMODE12 EQU 74HCODE SEGMENTASSUME CS:CODESTART: MOV DX,TIM_CTLMOV AL,MODE03OUT DX,ALMOV AX,01F4HMOV DX,TIMER0OUT DX,ALMOV AL,AHOUT DX,ALMOV DX,TIM_CTLMOV AL,MODE12OUT DX,ALMOV AX,000AHMOV DX,TIMER1OUT DX,ALMOV AL,AHOUT DX,ALMOV AH,4CHINT 21HCODE ENDS五.画出OUT0、OUT1的输出波形。

六.改变定时器0计数值为奇数(01F5)时,画出其输出波形。

七.总结模式2、模式3的工作特点。

方式2——分频器(速度波发生器)有如下三个特点:正常计数过程:写入控制字后的时钟上沿输出OUT变高,写入计数初值后,计数器开始减1计数,减到1时OUT变成低电平,减到0时OUT又变成高电平,同时初值自动重新装入,并重复前一过程;门控信号的影响:在计数器工作期间,当GATE变为低电平时终止计数,而当GATE又恢复为高电平后,计数器重新装入原计数初值并重新开始计数。

新的计数初值的影响:如果工作期间对计数器写入新的计数初值:GA TE一直为高电平:新的初值下次有效,则写入新的初值后,遇到GATE上升沿,新的初值立即有效方式3与方式2的不同之处:OUT输出的是方波。

说明:(1)工作在方式3 ,引脚OUT输出的不是一个时钟周期的负脉冲,而是占空比为1:1或近似1:1的方波;当计数初值为偶数时,输出在前一半的计数过程中为高电平,在后一半的计数过程中为低电平。

(输出脉冲占空比为50%)(2)由于方式3输出的波形是方波,并且具有自动重装计数初值的功能,因此,8253一旦计数开始,就会在输出端OUT输出连续不断的方波。

实验二 8255A并行口实验<一>一、实验目的:1.掌握8255A编程原理。

2.了解键盘结构,学会读取按键的方法。

二、实验内容:用8255来控制一个小键盘的识别。

1.线路图如下:注:在实验台上8255A的CS端接218—21F插孔,PA0一PA7,PB0一PB2与其旁边的插孔短接。

8255A的端口A地址为218H端口B地址为219H端口C地址为21AH控制口地址为21BH2.编写程序,使得在小键盘按键后,微机屏幕上有相应字符显示出来.三、编程指南:1.通过采用行扫描法或行反转法,识别键盘上的闭合键。

行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止.行反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式。

程序使CPU通过输出端口往各行线上全部送低电平,然后读入列线值,如果此时有某一键被按下,则必定会使某一列线值为0。

然后,程序再对两个并行端口进行方式设置,使行线上工作在输入方式,列线工作在输出方式,并且将刚才读得的列线值从列线所接的并行端口输出,再读行线上的输入值,那么,在闭合键所在的行线上的值必定为0。

这样,当一个键被按下时,必定可以读得一对唯一的行值和列值,在我们提供的程序中就采用行反转法来识别键盘按键。

2.在程序设计时,将各个键对应的代码(列值,行值)放在一个表中。

程序通过查表来确定具体按下的为哪一个键。

四、程序清单PA55 EQU 218H ;8255A的A口地址PB55 EQU 219H ;8255A的B口地址P55CTL EQU 21BH ;8255A的控制口地址DA TA SEGMENTTABIE DW 0101H,0102H,0104H,0108H,0110H,0120H,0140H,0180H DW 0201H,0202H,0204H,0208H,0210H,0220H,0240H,0280HDW 0401H,0402H,0404H,0408H,0410H,0420H,0440H,0480H CHAR DB ‘CDEFBA9845673210 RPMG’;字符码表MES DB ‘PLAY ANY KEY IN THE SMALL KEYBOARD!’,0AH,0DHDB ‘IT WILL BE ON THE SCREEN! END WITH R’,0AH,0DH,’$’DA TA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AX ;DS指向数据段MOV DX,OFFSET MESMOV AH,09 ;显示提示信息INT 21 HKY:CALL KEY ;调键盘扫描子程序,健入字符的ASCII码在DL中CMP DL,‘R’;键入的字符不是结束字符JNZ KY ‘R’,则转KY继续MOV AX,4C00H ;返回DOSINT 21 HRETMAIN ENDPKEY PROC NEAR ;键盘扫描子程序,键人字符的ASCII码送DL中KST:MOV AL,82HMOV DX,P55CTL ;设置8255A的控制字,均OUT DX,AL 工作于方式0,端口A为输出,B为输入WAIT1:MOV AL,00MOV DX,PA55 ;端口A输出全0OUT DX,ALMOV DX,PB55 ;从端口B读入列值IN AL,DXCMP AL,0FFH ;若为0FFH,则说明无键JZ WAIT1 按下,转W AIT1PUSH AX ;入栈保存列值PUSH AXMOV CX,1000HDL Y:LOOP DL Y ;延时去抖动MOV DX,P55CTLMOV AL,90H ;设置8255A的控制字,均OUT DX,AL 工作于方式0,端口A为输入,B为输出MOV DX,PB55POP AX ;从端口B输出列值OUT DX,ALMOV DX,PA55 ;从端口A读进行值IN AL,DXPOP BX ;列值送AH中MOV AH,BLNOT AX ;行、列值取反MOV SI,OFFSET TABLE ;扫描码表首址MOV DI,OFFSET CHAR ;字符码表首址MOV CX,24 ;小键盘共3×8=24健TT:CMP AX,[SI];扫描码相符则转NNJZ NNDEC CX ;计数值减1JZ KST ;已全部比较完,仍不相符则转KSTADD SI,2 ;修改指针INC DIJMP TT ;继续比较NN:MOV DL,[DI]MOV AH,02 ;显示该扫描码对应字符INT 21 HPUSH DX ;字符ASCII码入栈保存MOV AL,82HMOV DX,P55CTL ;设置8255A控制字,均工OUT DX,AL 作于方式0,端口A为输出,B为输人WAIT2:MOV AL,00MOV DX,PA55 ;端口A输出全0OUT DX,ALMOV DX,PB55 ;从端口B读进列值IN AL,DXCMP AL,0FFH ;有键按下则转WAIT2等待释放JNZ WAIT2POP DX ;退栈RETKEY ENDPCODE ENDSEND START五、实验程序流程图六、用行扫描法编写实验程序,并进行调试。

MY8255_A EQU 9C60HMY8255_B EQU 9C61HMY8255_C EQU 9C62HMY8255_MODE EQU 9C63HDATA SEGMENTDTABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV SI,3000HMOV AL,00HMOV [SI],ALMOV [SI+1],ALMOV [SI+2],ALMOV [SI+3],ALMOV DI,3003HMOV DX,MY8255_MODEMOV AL,81HOUT DX,ALBEGIN: CALL DISCALL CLEARCALL CCSCANJNZ INK1CALL BREAKJMP BEGININK1: CALL DISCALL DALLYCALL DALLYCALL CLEARCALL CCSCANJNZ INK2JMP BEGININK2: MOV CH,0FEHKERR: JMP BEGINCCSCAN: MOV AL,00HMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXNOT ALAND AL,03HRETCLEAR: MOV DX,MY8255_BMOV AL,00HOUT DX,ALRETDIS: PUSH AXMOV SI,3000HMOV DL,0F7HAGAIN: PUSH DXMOV DX,MY8255_AOUT DX,ALMOV AL,[SI]MOV BX,OFFSET DTABLEAND AX,00FFHADD BX,AXMOV AL,[BX]MOV DX,MY8255_BOUT DX,ALCALL DALLYINC SIPOP DXMOV AL,DLTEST AL,01HJZ OUT1ROR AL,1MOV DL,ALJMP AGAINOUT1: POP AXDALLY: PUSH CXMOV CX,00FFHT1: MOV AX,00FFHT2: DEC AXJNZ T2LOOP T1POP CXRETPUTBUF: MOV SI,DIMOV [SI],ALDEC DICMP DI,2FFFHJNZ GOBACKMOV DI,3003H GOBACK: RETBREAK PROC NEARMOV AH,06HMOV CL,00H COLUM: MOV AL,CHMOV DX,MY8255_AOUT DX,ALMOV DX,MY8255_CIN AL,DXTEST AL,01HJNZ LONEMOV AL,00HJMP KCODELONE: TEST AL,02HJNZ NEXTMOV AL,04HKCODE: ADD AL,CLCALL PUTBUFPUSH AXKON: CALL DISCALL CLEARCALL CCSCANJNZ KONPOP AXNEXT: INC CLMOV AL,CHTEST AL,08HJZ KERRROL AL,1MOV CH,ALJMP COLUMMOV AL,DLRETMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN:RETBREAK ENDPCODE ENDSEND START七、实验心得体会8255控制小键盘实验使我了解了8255的基本输入输出的应用,使用通用的可编程并行接口,不但电路得到简化,相应的程序也可以得到简化,了解了8255A端口、B端口、C 端口的基本作用,使我对编程程序更加熟悉。

相关主题