实验六 8255并行输入输出
Microsoft Word - 实验6_8255doc-实验六 8255 并行输入输出

实验六 8255并行输入输出一.实验目的(1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示。
(2) 掌握8段数码管的动态刷新显示控制;(3) 分析掌握8255工作方式1时的使用及编程,进一步掌握中断处理程序的编写;(4) 了解掌握8255用于矩阵式键盘扫描方法及软件实现。
二.实验环境1.硬件环境微型计算机(Intel x86系列CPU)一台,清华科教仪器厂TPC-2003A微机接口实验装置一台(外接4*6小键盘/6个数码管);数字记忆示波器一台.2.软件环境(1)Windows XP操作系统,编辑、汇编、链接和调试程序;(2)PC2003A集成开发环境软件一套及实验装置电子版资料三.基本实验1.基本实验内容和要求(1) 8255方式0:简单输入输出:实验电路如图20,8255C口接逻辑电平开关K0~K7,编程A口接LED显示电路L0~L7;C口输入数据,再从A口输出.;开 始设置8255C口输入A口输出从C口输入数据将此数据自A口输出N有键按下吗?Y结 束图6.1 8255简单输入输出图 6.2 8255简单输入输出流程图(2) 编程将A口 L0-L7控制成流水灯,流水间隔时间由软件产生; 流水方向由K0键在线控制,随时可切换;流水间隔时间也可由K4-K7键编码控制,如0000对应停止,0001对应1秒,1111对应15秒,大键盘输入ESC键退出。
(3) 8段共阴极数码管静态显示:按图6.3连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中,左侧LED显示),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
(S0接+5右侧LED显示)。
图6.3 单管静态显示图6.4 双管动态显示(4) 8段数码管动态显示:按图6.4连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0(轮流输出高电平选中左、右LED,动态刷新速率超过30Hz,则又视觉停留效果使人感觉两个LED在同时显示)。
06实验六:8255并行口实验

INC
JNZ
AL
INOUT ;若无,则继续自A口输入,B口输出
化。(当逻辑电平开关某位置于 L 时,对应的发光二极管点
亮;置于 H 时,对应的发光二极管熄灭。) 4、记录实验现象和相关数据。
设置8255为A口输入,
B口输出(90H)。
MOV
AH,0BH ;判断是否有按键
INT
INC JNZ
21H
AL INOUT ;若无,继续A口输入,B口输出
IOPORT EQU IO8255A EQU
START: MOV MOV OUT INOUT: MOV
DX,IO8255CON AL,90H DX,AL DX,IO8255A
;设置8255为A口输入,B口输出
;从A口输入一数据
IN
MOV OUT MOV INT
AL,DX
DX,IO8255B DX,AL AH,0BH 21H ;判断是否有按键 ;从B口输出刚才自A口所输入的数据
制用。本实验主要用到A 口输入和B 口输出,实验中,8255A 工作于基本
输入输出方式(方式 0)。
实验步骤:
1、实验接线: CS0 — 8255CS,PA0~PA7 — 平推开关的输出 K1~K8, PB0~PB7 — 发光二极管的 输入 LED1~LED8。 2、编写相应程序完成软件部分。 3、调试通过后,运行程序时拨动开关,观察发光二极管的变
实验六:8255并行口实验
实验目的要求:
1、了解并行接口芯片8255A的基本特点和使用。
2、掌握控制8255A并行口的基本编程方法。
实验内容:
8255A的A口作为输入口,与逻辑电平开关相连。8255A 的B口作为 输出口,与发光二极管相连。编写程序,使得逻辑电平开关的变化在发 光二极管上显示出来。 8255A 是比较常用的一种并行接口芯片,有三组 8 位的输入输出端 口,通常将 A 端口作为输入用,B 端口作为输出用,C 端口作为辅助控
实验六---8255并行输入输出

实验六---8255并行输入输出东南大学《微机实验及课程设计》实验报告实验六 8255并行输入输出姓名:学号:专业:测控技术与仪器实验室: 516同组人员:评定成绩:一、实验目的1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;2)掌握8段数码管的动态刷新显示控制;二、(1)实验内容(必做)6-1、8段数码管静态显示:编程从键盘输入一位十进制数字(0~9),在数码管上显示出来。
6-2、8段数码管动态显示:在两个数码管上同时显示不同的两位数字或字母,保持不变直至退出。
(如56或7f)(2)实验内容(必做一题,选做一题)6-3 静态显示:用逻辑电平开关预置某个数字(0~9)的ASCII码,将该数据用8255的C口读入,并用A口输出,并在数码管显示出来;如果预置的ASCII 码不是数字(0~9),数码管显示E字母。
6-4 动态显示:在两个数码管上滚动循环显示不同的0~f字符。
(即开始时两个数码管显示01,12,23,34 ··f0,一直循环直至退出)三、实验原理(1)实验预备知识图 八段式LED 数码管的符号和引脚(2) 6-1流程图:NY将对应段码输结6-1源代码:data segmentioport equ 0ec00h-0280hio8255a equ ioport+288h ;8255A口地址io8255b equ ioport+28bh ;8255控制寄存器端口地址led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码mesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$';提示data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255b ;使8255的A口为输出方式mov ax,80hout dx,alsss: mov dx,offset mesg1 ;显示提示信息mov ah,09hint 21hmov ah,01 ;从键盘接收字符int 21hcmp al,'0' ;是否小于0jl exit ;若是则退出cmp al,'9' ;是否大于9jg exit ;若是则退出sub al,30h ;将所得字符的ASCII码减30H mov bx,offset led ;bx为数码表的起始地址xlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,aljmp sss ;转SSSexit: mov ah,4ch ;返回DOSint 21hcode endsend start(3)6-2接线图:6-2源代码:data segmentioport equ 0ec00h-0280hio8255a equ ioport+288hio8255c equ ioport+28ahio8255k equ ioport+28bhled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位bz dw ? ;位码data endsstacks segment stackdb 100 dup(?)stacks endscode segmentassume cs:code,ds:data,ss:stacksstart: mov ax,datamov ds,axmov ax,stacksmov ss,axmov dx,io8255k ;将8255设为A口输出mov al,80hout dx,almov di,offset buffer1 ;设di为显示缓冲区loop2: mov bh,02lll: mov al,0 ;送全灭断码mov dx,io8255a ;自8255A口输出out dx,almov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl为要显示的数pop dimov bh,0mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码mov al,byte ptr [si]mov dx,io8255a ;自8255A的口输出out dx,almov al,byte ptr bz ;使相应的数码管亮mov dx,io8255aout dx,almov cx,3000delay: loop delay ;延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,0ffhmov ah,06int 21hje loop2 ;有键按下则退出mov dx,io8255amov al,0 ;关掉数码管显示out dx,almov ah,4ch ;返回int 21h code ends end start(4)6-3流程图: Y N N Y6-3源代码: data segmentioport equ 0ec00h-0280h ;tpc 卡中设备的io 地址 io8255a equ ioport+288h ;8255A 口地址io8255k equ ioport+28bh ;8255控制寄存器端口地址 io8255c equ ioport+28ah ;8255C 口地址led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh开设置8255控制字,C从C 口输是否属将对应段码将E 对应段是否有结data endsstacks segment stackdb 100 dup (?)stacks endscode segmentassume cs:code,ss:stacks,ds:datamain proc farstart: mov ax,stacksmov ss,axmov ax,datamov ds,axmov dx,io8255k ;设8255为C口输入,A口输出 mov al,8bh ;1000 1011out dx,alinout: mov dx,io8255c ;从C口输入一数据call delayin al,dxcmp al,'0' ;是否小于0jl exit1 ;若是则显示Ecmp al,'9' ;是否大于9jg exit1 ;若是则显示Emov bx,offset led ;bx为数码表的起始地址 sub al,30hxlat ;求出相应的段码mov dx,io8255a ;从8255的A口输出out dx,almov ah,06 ;是否有键输入mov dl,0ffhint 21h ;是则退出jne exitjmp inout ;转inoutexit1: mov al,79hmov dx,io8255aout dx,almov ah,06 ;是否有键输入mov dl,0ffhint 21h ;是则退出jne exitjmp inout ;转inoutexit: mov ah,4ch ;返回DOSint 21hmain endpdelay proc near ;延时子程序mov bx,2000ZZZ: mov cx,0ZZ: loop ZZdec bxjne ZZZretdelay endpcode endsend start6-3接线图:四、实验中遇到的问题及解决方案(1)在实验初始,发现七段数码管的a不亮,排除故障发现是由于8255芯片的PA0不能输出高电平;(2)在各个实验中,连线后发现数码管都没有反应,后来发现,只有在每次运行前运行一下演示实验,再运行自己的程序才出正确结果;(3)在实验6-3中,初始时,数码管显示的数字是开关预置的数字,即若开关置为0000,0001,则数码管显示1,但是实验要求为预置的为ASCⅡ码;检查代码,发现若直接用从C口输入的数据,则就是数值,达到实验要求还需对从C口输入的数据进行减30h的操作;(4)上次实验总未完成部分(在in操作指令前未加延时程序)在这次的课时上实现,上次的实验结果是,若开关预置全1,则屏幕一直显示提示信息;若开关预置非全1,则开始会显示提示信息,片刻后不再提示,说明若不加延时,用in指令输入的会是0ffh,但片刻后,开关预置的数据会输入,程序不再提示;遗憾部分是,用到的延时程序是借用之前实验中的,没有改变CX数据以观察需加延时的最短时间;。
8255控制键盘与显示实验

实验六 8255 控制键盘与显示实验一、实验目的1.掌握8255 输入、输出编程方法。
2.掌握阵列键盘和数码管动态扫描显示的控制方法。
二、实验内容用8255 可编程并行口做一个键盘、显示扫描实验,把按键输入的键值,显示在8255 控制的七段数码管上。
8255 PB 口做键盘输入线,PC 口做显示扫描线,PA 口做显示数据线。
三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明和电路原理图本实验需要用到 CPU 模块(F3 区)、8255 模块(C6 区)、8279 键盘与显示模块(E7 区)。
8255 键盘与显示电路原理图参见图7-1A、图7-1B,及前一实验的图6-1。
CS_8255 接8000H,则8255 状态/命令口地址为8003H,PA 口地址为8000H,PB 口地址为8001H、PC 口地址为8002H。
图7-1A 键盘显示电路1图7-1B 键盘显示电路2五、实验步骤1)系统各跳线器处在初始设置状态,S11E 和S12E 红开关全部打到下方(OFF)。
2)用8 位数据线对应连接8255 模块的JD3C(PA 口)、JD4C(PB 口)、JD5C(PC 口)到8279模块的JD3E、JD2E、JD4E;用导线连接8255 模块的CS_8255 到地。
3)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
4)在键盘上按任一单键,观察数码管的显示,数码管低位显示按键值。
D8255A EQU 8000H ;8255 PA 口地址D8255B EQU 8001H ;8255 PB 口地址D8255C EQU 8002H ;8255 PC 口地址D8255 EQU 8003H ;8255 状态/命令口地址LEDBUF EQU 50H ;显示缓存KEYVAL EQU 60H ;读到的键码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP,#80H ;堆栈指针指到80HMOV DPTR,#D8255MOV A,#90H ;方式0,PB,PC口输出,PA口输入MOVX @DPTR,AMOV LEDBUF,#10H ;预置地址MOV LEDBUF+1,#11H ;低四位显示---MOV LEDBUF+2,#11HMOV LEDBUF+3,#11HMOV LEDBUF+4,#5 ;高四位显示8255MOV LEDBUF+5,#5MOV LEDBUF+6,#2MOV LEDBUF+7,#8KB_DIS:LCALL RD_KB ;读键盘MOV A,#0FFHCJNE A,KEYVAL,TOSHOW ;判读到键SJMP SHOW ;没有则继续读键TOSHOW:MOV LEDBUF,KEYVALSHOW: LCALL DISPLAYSJMP KB_DISRD_KB: ;键盘扫描MOV A,#02H ;扫描第一行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255A MOVX A,@DPTRMOV R1,#00H ;行首键号0CJNE A,#0FFH,KEYCAL ;判键是否按下MOV A,#01H ;扫描第二行MOV DPTR,#D8255CMOVX @DPTR,AMOV DPTR,#D8255AMOVX A,@DPTRMOV R1,#08H ;行首键号8CJNE A,#0FFH,KEYCALSJMP NOKEY ;无键按下KEYCAL: MOV R0,#08H ;计算键码循环8次SHIFT: RRC AJNC TORETINC R1DJNZ R0,SHIFTSJMP NOKEY ;无键按下TORET: MOV KEYVAL,R1RETNOKEY: MOV KEYVAL,#0FFH ;返回无键标志RETDisplay:MOV R7,#8 ;8个数码管MOV R5,#0MOV R0,#LEDBUFDLOOP:MOV A,R5RL A ;JD4E移到PC3、PC4、PC5RL ARL AANL A,#11111011BINC R5MOV DPTR,#D8255CMOVX @DPTR,A ;点亮对应的LEDMOV A,@R0MOV DPTR,#LEDSEGMOVC A,@A+DPTRINC R0MOV DPTR,#D8255BMOVX @DPTR,A ;显示数据LCALL DelayDJNZ R7,DLOOPRETDelay: PUSH R7MOV R7,#200DelayLoop:NOPDJNZ R7,DelayLoopPOP R7RETLEDSEG: DB 3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB 7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB 39H,5EH,79H,71H,00H,40H;C,D,E,F, ,-END六、实验结果及分析当我们载入程序后我们可以看到数码管上显示“8255-- ”。
微机接口实验报告8255并口控制器实验

微机接口实验报告8255并口控制器实验8255并口控制器实验一.实验目的:1,掌控8255的工作方式和应用领域编程;2,掌控8255的典型应用领域电路三相。
二.实验设备pc微机一台,td―pit+实验系统一套。
三.实验内容:编写程序,并使8255的a口味输入b口为输出,顺利完成敲击控制器至数据等的数据传输。
建议:只要敲击控制器,数据灯的现实就可以发生改变。
四.实验原理:并行接口就是以数据的字节为单位与i/o设备或被掌控对象之间传输信息。
cpu和USB之间的数据传输总是循序的。
8255并行控制器具有abc三个并行接口,用+5v但电源供电,能在一下三种方式下工作:方式一:基本输出|出来方式方式二:选道输出|出来方式方式三:双向选项工作方式五.实验步骤:1.证实从pc着急带出的两根扁平电缆已经相连接在实验平台上。
2.相连接实验先例参照右图:3.运行check成功内需,查看i/o空间始地址。
4.利用查出的地址编写程序,然后便于链接。
5.运行程序,拨动开关,看数据灯显示是否正确。
六.编程与调试:1.使用ckeck程序找到ioyo空间始址:dcooh2.编写程序:ioyoequodcoohaaequioyo+0*4bbequioyo+1*4ccequioyo+2*4modeequioyo+1*4stack1seqme ntstackdw256dup(?)stack1endscodeseqmentassumecs:code,ss:stack1stack:movbx,odcoohnext:movdx,bbinal,dxoutdx,almovah,1in t16hjznextmovah,40hint21hcodeendsendsstart3.编程,链接,运转程序七.实验结果:运转程序后,数据灯随着控制器的变化而变化,即为控制器拨打时,数据灯亮,控制器断裂时,数据灯攻灭。
八.实验总结:通过本次实验,对8255并口控制器存有了一定的介绍,掌控了掌控8255的工作方式和应用领域编程,掌控8255的典型应用领域电路三相。
可编程并行IO接口8255实验

实验六可编程并行I/O接口8255实验【知识点训练】8255有 1 个控制口和3个8 位数据口(PA口、PB口和PC口),控制口用于写入控制命令,控制各数据口的工作方式和数据传送方向;数据口用于外设与CPU 进行数据通信,三个I/O口通过控制口设置为输入口或输出口。
PA口和PB 口的8位不可独立使用,PC口可分为两个独立的4位接口。
8255有 2 种工作方式,其中方式0 为基本输入/输出方式,在这种工作方式下,三个端口作为输出口时均具有锁存功能,适用于无条件传送数据的场合。
8255的地址线A0和A1通过锁存器与单片机的A0 、A1 相连,用于决定4个I/O端口地址,当A1A0分别取值00、01、10、11时,对应选择PA 口、PB 口、PC 口和控制口。
8255的使能信号经地址译码器与单片机高位地址线相连,用于选中8255接口。
使用可编程型I/O芯片时要先写控制字,且要写入控制口,数据输入输出使用PA,PB 口。
【实验内容】8255的PA口接有8个拨动开关,PB口接有8个发光二极管,PA口方式0输入,PB 口方式0输出。
编程实现:当开关全为“1”或全为“0”时,8个发光二极管左循环依次点亮或右循环依次点亮;当开关非全“1”或非全“0”时,则将开关状态显示在发光二极管上。
【实验连线】将8255的PA口(PA0 ~ PA7)接至8个开关,PB口(PB0-PB7)接至8个发光二极管。
【实验程序】#include <reg51.h>#include <absacc.h>#define PA8255 XBYTE[0X2000]#define PB8255 XBYTE[0X2001]#define CON8255 XBYTE[0X2003]#define uchar unsigned char#define uint unsigned intvoid delay(uint xms){uint i,j;for ( i=xms; i>0; i-- )for ( j=110; j>0; j-- );}void main(){uchar Switch, i; // Switch为开关变量,i为循环变量CON8255=0X90; //写8255控制字do{Switch=PA8255;if(Switch==0xff) //读入开关状态//如果开关为全“1”{for( i=0; i<8; i++){PB8255=~(0x01<<i); //8个发光二极管左循环依次点亮delay(500);}}else if(Switch==0x00) //如果开关为全“0”{for( i=0; i<8; i++){PB8255=~(0x80>>i); //8个发光二极管右循环依次点亮delay(500);}}elsePB8255=Switch; //发光二极管显示对应开关状态}while(1);}。
8255接口电路设计实验

实验六8255接口电路设计实验实验目的(1)掌握8255的工作方式级应用编程。
(2)掌握8255的典型应用电路接法。
实验设备PC微机一台、TD-PIT实验系统一套。
实验内容(1)基本输入输出实验。
编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就改变。
(2)流水灯显示实验。
编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。
实验原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在一下三种方式下工作:方式0—基本输入/输出方式、方式2—选通输入/输出方式、方式2—双向选通工作方式。
实验说明1、基本输入输出实验本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。
用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程实现输入输出功能。
8255并行接口应用实验接线图程序流程图:部分程序:MOV DX,MY8255_MODE ;初始化8255工作方式MOV AL,82H ;工作方式0,A口输出,B口输入OUT DX,ALMOV DX,MY8255_B ;读B口IN AL,DXMOV DX,MY8255_A ;写A口OUT DX,AL2、流水灯显示实验首先分别向A口和B口写入80H和01H,然后分别将该数左移和右移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。
8255并行应用实验接线图程序流程图:部分程序:DATA SEGMENTLA DB ? ;定义数据变量LB DB ?DATA ENDS……MOV DX,MY8255_MODE ;定义8255工作方式 MOV AL,80H ;工作方式0,A口和B口为输出 OUT DX,ALMOV DX,MY8255_A ;写A口发出的起始数据MOV AL,80HOUT DX,ALMOV LA,ALMOV DX,MY8255_B ;写B口发出的起始数据MOV AL,01HOUT DX,ALMOV LB,ALLOOP1: CALL DALLYMOV AL,LA ;将A口起始数据右移再写入A口 ROR AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数据左移再写入B口 ROL AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,AL用键盘控制实现流水灯的左循环、右循环、间隔闪烁程序:;****************根据查看端口资源修改下列符号值******************* IOY0 EQU 0E400H ;片选IOY0对应的端口始地址;***************************************************************** MY8255_A EQU IOY0+00H*4 ;8255的A口地址MY8255_B EQU IOY0+01H*4 ;8255的B口地址MY8255_C EQU IOY0+02H*4 ;8255的C口地址MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址STACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSDATA SEGMENTLA DB ? ;定义数据变量LB DB ?A0 DB 'shu ru ning de xuan ze:',0DH,0AH,'$'A1 DB 'press 1:zuo yi',0DH,0AH,'$'A2 DB 'press 2:you yi',0DH,0AH,'$'A3 DB 'press 3:jian ge shang shuo',0DH,0AH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE ;定义8255工作方式MOV AL,80H ;工作方式0,A口和B口为输出OUT DX,ALMOV DX,MY8255_A ;写A口发出的起始数据MOV AL,80HOUT DX,ALMOV LA,ALMOV DX,MY8255_B ;写B口发出的起始数据MOV AL,01HOUT DX,ALMOV LB,ALD0: MOV DX,OFFSET A0MOV AH,09HINT 21HMOV DX,OFFSET A1INT 21HMOV DX,OFFSET A2INT 21HMOV DX,OFFSET A3INT 21HMOV AH,1INT 21HCMP AL,'1'JE LOOP1CMP AL,'2'JE LOOP2CMP AL,'3'JE LOOP3JMP D0LOOP1: CALL DALLYMOV AL,LA ;将A口起始数据右移再写入A口 ROL AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数据左移再写入B口 ROL AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALMOV AH,1 ;判断是否有按键按下INT 16HJZ LOOP1JNZ QUIT ;无按键则跳回继续循环,有则退出LOOP2: CALL DALLYMOV AL,LA ;将A口起始数据右移再写入A口 ROR AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数据左移再写入B口 ROR AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALMOV AH,1 ;判断是否有按键按下INT 16HJZ LOOP2 ;无按键则跳回继续循环,有则退出 JNZ QUITLOOP3: CALL DALLYMOV AL,LA ;将A口起始数据右移再写入A口 ROR AL,2MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数据左移再写入B口 ROL AL,2MOV LB,ALMOV DX,MY8255_BOUT DX,ALMOV AH,1 ;判断是否有按键按下INT 16HJZ LOOP3 ;无按键则跳回继续循环,有则退出 JNZ QUITQUIT: MOV AX,4C00H ;结束程序退出INT 21HDALLY PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,3FFHD1: MOV AX,0FFFFHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPCODE ENDSEND START心得:通过本次实验,使自己加深了对8255的了解以及对汇编程序的熟练掌握。
实验六---8255并行输入输出

实验六---8255并行输入输出一、实验目的1.了解并熟悉8255并行输入输出控制器的功能和工作原理;二、实验原理1.8255芯片介绍8255是一种常用的并行输入/输出接口芯片,可用于微处理机系统中的输入/输出控制输出,根据中文名可以看出,8255有三种工作方式即口A、口B和控制口。
8255所有的输入/输出都是双向的,它可以通过输入输出口的命令字来在不同的模式下工作。
在输出模式下,82555可以通过端口A、B控制外围设备的输出操作,在输入模式下,8255可以通过端口A、B实现对外围设备的输入操作。
控制口是用来控制8255写作模式或读作状态字,并对端口进行初始化操作。
8255在不同的模式下有不同的编程方法和操作方法,因此需要在实际应用中选择不同的工作模式。
8255有三个I/O端口A、B、C,每个端口都有8位。
这里解释一下控制端口的意义,地址为0B4H的控制端口是连续读或写8255内部状态寄存器的地址,而后面的一个读或写就表示读或写操作的类型,如果该端口被写入了“控制字”则8255按照控制字工作,否则会在该端口读出输入状态字。
在读或写操作的时候向控制端口写入的二进制数在图3-8中给出了。
表3-2:8255访问口定义地址口分类名称端口A0B0H输出Port A输入ControlCout端口Cin端口2.8255的编程方式方式0:即I/O挂接方式,这种方式下A、B、C三个端口为并行I/O口时,其与MCU的接线和编程方式与单片机内部I/O端口的连接和编程方式相同。
方式1:即输入输出口不一样。
在这种片内Ram中的地址空间0~7地址单元内写入相应的端口或方式的控制字后,该8255工作在相应的方式。
即:方式0:读出的是8位端口A的状态,写操作为将数据送到端口A;方式2:是把C口分配为两部分——高4位为输入,低4位为输出,它与方式1类似。
端口C的所有状态和很多控制功能都由C口寄存器存储。
方式2:“端口C字符型输入输出方式”,在这种方式下,端口C的8个位分成两部分,4个位作为输入的,4个位作为输出的。
8255输入输出实验报告

8255输入输出实验报告
实验目的
本次实验旨在掌握8255芯片的输入输出原理和使用方法,通过实验了解并掌握8255芯片的原理和控制方法,提高实际操作能力。
实验器材
1. 8255芯片
2. 8086单片机
3. 电源
4. 万用表
5. LED灯
6. 按钮开关
实验步骤
1. 连接电路
根据实验原理和电路图,连接相应的电路,包括8255芯片、8086单片机、电源、万用表、LED灯和按钮开关等。
2. 编写程序
根据实验要求,编写相应的程序,包括8255芯片的输入输出控制
程序,以及相关的控制指令。
3. 运行程序
将编写好的程序烧录到8086单片机中,启动程序,进行相应的输入输出操作。
4. 测试结果
通过测试程序的运行结果,验证输入输出是否正确,并进行相应的调试和修改。
实验结果
经过实验,我们成功地掌握了8255芯片的输入输出原理和使用方法,熟悉了8255芯片的控制指令和编写程序的方法,成功地实现了输入输出操作。
本次实验不仅提高了我们的实际操作能力,还增强了我们对硬件电路和控制程序的理解和应用能力。
实验体会
本次实验让我深刻地认识到了硬件电路和控制程序的重要性,同时也让我感受到了实验的乐趣和挑战。
通过实验,我不仅学会了控制8255芯片的方法,还深入了解了单片机和电路原理,提高了自己的实际操作能力和理论知识水平。
结论
通过本次实验,我们掌握了8255芯片的输入输出原理和使用方法,熟悉了8255芯片的控制指令和编写程序的方法,成功地实现了输入输出操作。
本次实验不仅提高了我们的实际操作能力,还增强了我们对硬件电路和控制程序的理解和应用能力。
并行接口8255实验报告

并行接口8255实验一、实验目的1.掌握可编程并行接口电路8255的工作原理及初始化方法2.掌握8255在实际应用中的硬件连接及编程应用二、实验要求根据实验室现有条件,针对实验任务,设计实验方案并进行实现三、实验内容通过使用8255,8253实现一个倒计时设备,具体的方法是,用户逐个打开开关,然后8255定时读取开关状态并输出给二极管,当所有灯都亮起时,输出一个高电平给Gate0,对8253而言,要求每1s查看一次用户是否摁下了所有开关,一旦是这样蜂鸣器就会响起来,然后给8253送一个锁存命令,查看计数器1和计数器0当前的计数值,锁存两个计数值,便于后期的计算和数据处理。
四、实验线路图其中,8255的各个端口分别是:F0H,F2H,F4H,F6H 8253的各个端口分别是:F8H,F9H,FAH,FBH 五、实验程序清单CSEG SEGMENTASSUME CS:CSEGSTART:;初始化8255和8253MOV DX,F6HMOV AL,1001000BOUT DX,ALMOV DX,FBHMOV AL,01110110BOUT DX,ALMOV AL,00110110B;选择8253计数器1MOV DX,F8HMOV AL,0OUT DX,ALMOV AL,10OUT DX,AL;选择8253计数器0MOV DX,FGHMOV AL,0OUT DX,ALMOV AL,10MOV CX,2000H;用CX延时,读取开关状态 NEXT:OUT DX,ALMOV DX,F2HIN DX,AL;输出开关状态,此时亮起灯,如果灯全亮起,蜂鸣器响起MOV DX,F4HOUT DX,ALLOOP NEXT;锁存两个计数器的计数值MOV AL,00110110BMOV DX,F8HOUT DX,ALMOV AL,01110110BMOV DX,F9HOUT DX,ALCSEG ENDSEND START六、实验总结及体会1.实验总结:本次实验中我设计了8086连接8253和8255的相关电路,并且与输出设备相连接,也重新复习了数电的知识,通过学习微机原理和汇编语言这门接近底层的语言我意识到代码与底层的交互是怎样实现的,也有利于我学习其他的高级语言。
8255并行接口实验(精)

六. 编程提示
(1) 通过8255控制发光二极管PB3 PB0 PA5 PA2 对应黄灯,PB1 PA6 PA3 PA0对应红灯,PB2 PA7 PA4 PA1对应绿灯,以模拟交通灯的管理. (2) 程序中设定好8255A的工作方式,三个端口 均工作在方式0处于输出状态。 (3) 各发光二极管共阳极,使其点亮应使对应的 端口输出低电平。
实验一
8255并行接口实验
--------控制交通灯一.验目的掌握通过8255A并行口传输数据的方法, 以控制发光二极管的亮与灭.
二.实验目的
用8255作为输出口,控制十二个发光二极 管熄灭,模拟交通灯管理.
三 .程序框图
四 .实验电路
五 .实验步骤
(1)电路连线如下: 8255A PA0-L12 PA1-L11 PA2-L10 PA3-L9 PA4-L8 PA5-L7 PA6-L6 PA7-L5 PB0-L4 PB1-L3 PB2-L2 PB3-L1 (2)运行实验程序 在系统“P.”状态时,输入32F0,按EXEC键, L1~L12发光二极管模拟交通灯显示。
微机原理实验报告(8255并口实验)

WORD格式深圳大学实验报告课程名称:微型计算机技术实验项目名称:8255并行接口实验学院:信息工程学院专业:电子信息工程指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制一,实验目的1,学习并掌握8255的工作方式及其应用。
2,掌握8255典型应用电路的接法。
3,掌握程序固化及脱机运行程序的方法。
二,实验设备PC机器一台,TD-PITE实验装置一套,导线若干,另外PC与TD-PITE实验装置连接线。
三,实验内容1,基本输入输出实验。
编写程序,使8255的A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。
要求只要开关拨动,数据灯的显示就发生相应改变。
2,流水灯显示实验。
编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。
四实验内容及步骤1.基本输入输出实验本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。
实验接线图如图6所示,按图连接实验线路图。
用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。
图68255基本输入输出失误接线图3.编写实验程序如下面(1)汇编源程序SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVDX,0646H;控制端口地址0646H送DX,因为8255的cs端口接的是I0Y1,而I0Y1对应的编址空间是0640H—067FH,所以这里是0646H。
MOVAL,90H;方式选择控制字送ALOUTDX,AL;方式选择控制字输给8255A的控制端口,完成端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。
AA1:MOVDX,0640H;控制端口A地址0640H送DXINAL,DX;将端口A连接的开关的对应状态送给ALCALLDELAYMOVDX,0642H;控制端口A地址0642H送DXOUTDX,AL;将AL的数据送到8255的端口B,从而使其连接的LED的灯发光JMPAA1DELAY:PUSHCXMOVCX,0F00HAA2:PUSHAXPOPAXLOOPAA2POPCXRETCODEENDSENDSTARTii具体实验步骤如下述:(1)编写实验程序,经编译、连接无误后装入系统(2)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。
实验6 8255并行IO口实验

四、实验内容
1. 将实验的线路连接好后,编程,将 8255的A口作为输入,输入信号由 8个逻辑电平开关提供,B口作为 输出,其内容由发光二极管来显示。
五 、实验程序(ZY1LJ . ASM) 与流程图
开始
延时 置8255工作方式
读8255PA口
置8255PB口
L8255_CMD EQU 2A3H L8255_PA EQU 2A0H L8255_PB EQU 2A1H L8255_PC EQU 2A2H CODE SEGMENT ASSUME CS:CODE,DS:CODE BEGIN: MOV CX,0FFH AA: LOOP AA MOV DX,L8255_CMD MOV AL,9CH ;10011000 OUT DX,AL NOP NOP NOP NOP NOP BB: MOV DX,L8255_PA IN AL,DX MOV DX,L8255_PB OUT DX,AL JMP BB
movdxl8255paaldxmovdxl8255pboutdxaljmpbbcodeendsendbegin1熟悉断点的设置2熟悉寄存器和内存内容的查看与修改3熟悉单步运行和全速的区别及其操作根据程序列出实验中8255的各个端口的地址如果8255的cs改接译码信号280h其它信号不变那么对应的端口地址又是多
CODE ENDS END BEGIN
六、调试
1、熟悉断点的设置 2、熟悉寄存器和内存内容的查看与修改 3、熟悉单步运行和全速的区别及其操作
思考题
根据程序列出实验中8255的各个端口的 地址,如果8255的/CS改接译码信号280H, 其它信号不变,那么对应的端口地址又是多 少?
1. 方式选择控制字
2. 端口C置1/置0控制字 ( A1、A0 =11 )
可编程并行接口8255输入输出实验

可编程并行接口8255输入输出实验一、实验目的了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。
二、实验设备(1)PC机一台;(2)QTH-8086B 16位微机教学实验仪一套。
三、8255有关说明1. 8255A的引脚定义D7~D0:三态双向数据线。
/CS:片选信号线,低电平有效。
/RD:读命令信号,低电平有效。
/WR:写入信号线,低电平有效。
Vcc:+5V电源PA7~PA0:A口输入/输出线。
PB7~PB0:B口输入/输出线PC7~PC0:C口输入/输出线A1、A0:地址线,用来选择8255A内部的4个端口。
RESET:复位引脚,高电平有效2.8255A的工作方式方式0:基本输入输出方式方式1:选通输入输出方式方式2:双向选通输入输出方式。
3.8255A的命令字图1 8255的控制字格式图2 8255的C口按位置位复位命令四、线路连接1.实验原理图图3 可编程并行接口8255电路2.实验内容(1) 流水灯实验:利用8255的A口循环点亮发光二极管。
(2) 交通灯实验:利用8255的A口模拟交通信号灯。
(3) I/O输入输出实验:利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。
3.实验项目1--流水灯实验(1)线路连接该模块的WR、RD分别连到MCU主模块的WR、RD。
该模块的数据(AD0--AD7)、地址线(A0--A7)分别连到MCU主模块的数据(AD0--AD7)、地址线(A0--A7)。
8255模块选通线CE连到MCU主模块的地址A15。
8255的PA0--PA7 连到发光二极管的 L0--L7。
(2)参考程序略4.实验项目2—交通灯实验(1)线路连接该模块的WR、RD分别连到MCU主模块的WR、RD。
该模块的数据(AD0--AD7)、地址线(A0--A7)分别连到MCU主模块的数据(AD0--AD7)、地址线(A0--A7)。
8255模块选通线CE连到MCU主模块的地址A15。
实验六 8255A可编程并行口实验

实验六8255A可编程并行口实验一、实验目的1.掌握并行接口芯片8255A和微机接口的连接方法。
2.掌握并行接口芯片8255A的工作方式及其编程方法。
三、实验内容1.实验原理如实验原理图6-4所示,PA口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PA口读入8位开关量送PB口显示。
拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。
图6-42.实验线路连接(1)8255A芯片PA0~ PA7插孔依次接K1~ K8。
(2)8255A芯片PB0~PB7插孔依次接L1 ~ L8。
系统已定义的I/O地址如下:接口芯片口地址用途8255A口FFD8H EP总线8255B口FFD9H EP地址8255C口FFDAH EP控制8255控制口FFDBH 控制字四、实验软件框图五、实验软件清单PA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHCODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 32E0HH2: MOV DX,PCTLMOV AL,90HOUT DX,ALP2: MOV DX,PAIN AL,DXINC DXOUT DX,ALJMP P2CODE ENDSEND H2六、实验步骤1.按图6-4连好线路。
2.运行实验程序,拨动K1~K8,L1~L8会跟着亮灭。
实验六8255并行口实验(二)A.B.C口输出方波一、实验目的掌握可编程I/O接口芯片8255的接口原理使用,熟悉对8255初始化编程和输入、输出软件设计方法。
二、实验内容在8255 A.B.C口用示波器测出波形。
三、程序流程四、实验步骤编译、装载,连续运行程序,用示波器测量8255 A.B.C口并观察其波形。
关键点:ch0、ch1分接PA口的D1、D0;ch0、ch1分接PB口的D1、D0;ch0、ch1分接PC口的D1、D0五、实验程序PA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHCODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 32C0HH1: MOV DX,PCTLMOV AL,80HOUT DX,ALMOV AL,55HP11: MOV DX,PAOUT DX,ALINC DXOUT DX,ALINC DXOUT DX,ALMOV CX,0800HLOOP $NOT ALJMP P11CODE ENDSEND H1实验六8255A可编程并行口实验(三)交通灯一、实验目的进一步掌握8255A可编程并行口使用方法。
微机原理与接口技术--实验六 并行接口8255应用实验

实验六并行接口8255应用实验一、任务与目的1. 实验任务:(1) 熟悉并行接口8255的结构和编程方法;(2) 掌握并行8255接口连接外设的基本方法。
2. 实验目的:(1). 掌握并行8255可编程接口的设置方法;(2) 熟悉8255连接外设完成并行输入输出的基本方法。
二、原理(条件)1.相关知识:(1) 8255接口地址与状态字的表示与设置方法;(2) 8255连接发光二极管与拨键开关的基本用法;2.实验条件:伟福Lab8000系统。
三、内容步骤1.实验方法:(1)连接实验装置;(2)连接硬件;(3)打开实验装置电源开关;(3)打开VW软件,进行仿真器设置;(3)在VM软件中输入程序、编译并执行。
2.发光二极管显示程序:(1)线路连接:实验装置上8255_CS连接到实验装置的CS0上,8255上PA0-PA7分别连接到8个发光二极管L0-L7上。
图2 8255控制发光二极管显示硬件连接图(2) 输入程序、编译并执行,观察发光二极管变化并分析结果。
MODE EQU 80HPORTA EQU 8000HPORTB EQU 8001HPORTC EQU 8002HCONTROL EQU 8003HCODE SEGMENTASSUME CS:CODESTART: MOV AL,80hMOV DX,8003hOUT DX,ALMOV AL,80HOUTA:MOV DX,PORTAOUT DX,ALCALL DELAYROR AL,1JMP OUTADELAY PROC NEAR ;振荡频率取5MHZ,计算延时要求1S。
PUSH CX ;15tMOV BX, 5000 ;4t ,第五组2.5秒延时DELAY1:MOV CX,40 ;4tDELAY2:LOOP DELAY2 ;17t(转移)/5t(不转移)DEC BX ;2tJNZ DELAY1 ;16t(转移)/4t(不转移)POP CX ;12tRET ;19tDELAY ENDPCODE ENDSEND START3.拨键开关控制发光二极管亮灭程序:(1)线路连接:实验装置上8255_CS连接到实验装置的CS0上,PB0-PB7接8个开关S0-S7、PA0-PA7连接8个发光二极管L0-L7。
最新微机原理实验8255并行口实验PA输入、PB输出

微机原理实验8255并行口实验P A输入、P B输出8255A并行口实验PA输入、PB输出利用LED等显示程序LCD EQU 07FE0HLCDWI EQU LCD+0 ;写命令LCDWD EQU LCD+1 ;写数据LCDRS EQU LCD+2 ;读状态LCDRD EQU LCD+3 ;读数据PA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHcode segmentassume cs:codelin db 0col db 0num db 0dis_num db 0temp0 db 0temp1 db 0count db 0org 1000hstart: MOV DX,PCTLMOV AL,90HOUT DX,ALcall init_lcdmov al,3call delay2mov count,0mov bx,offset tab0mov lin,0mov col,0mov num,16call dis_englishGOON: MOV DX,PAIN AL,DXTEST AL,01HJE GOON1TEST AL,02HJE GOON2TEST AL,04HJZ GOON3TEST AL,08HJE GOON4TEST AL,10HJE GOON5TEST AL,20HJE GOON6TEST AL,40HJE GOON7TEST AL,80HJZ GOON8JMP GOON9GOON1: JMP KEY1GOON2: JMP KEY2GOON3: JMP KEY3GOON4: JMP KEY4GOON5: JMP KEY5GOON6: JMP KEY6GOON7: JMP KEY7GOON8: JMP KEY8GOON9: mov bx,offset tab9 mov lin,1mov col,0mov num,16call dis_englishMOV DX,PBMOV AL,0FFHOUT DX,ALJMP GOONKEY1: MOV DX,PBMOV AL,0FEHOUT DX,ALmov bx,offset tab1mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY2: MOV DX,PBMOV AL,0FDHOUT DX,ALmov bx,offset tab2 mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY3: MOV DX,PBMOV AL,0FBHOUT DX,ALmov bx,offset tab3 mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY4: MOV DX,PBMOV AL,0F7HOUT DX,ALmov bx,offset tab4 mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY5: MOV DX,PBMOV AL,0EFHOUT DX,ALmov bx,offset tab5 mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY6: MOV DX,PBMOV AL,0DFHOUT DX,ALmov bx,offset tab6 mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY7: MOV DX,PBMOV AL,0BFHOUT DX,ALmov bx,offset tab7mov lin,1mov col,0mov num,16call dis_englishJMP GOONKEY8: MOV DX,PBMOV AL,07FHOUT DX,ALmov bx,offset tab8mov lin,1mov col,0mov num,16call dis_englishJMP GOONdis_number procpush axmov al,lin ;以下18条为根据行、列值定位显示英文起始坐标 cmp al,0jnz nu0mov al,80hjmp nu1nu0: cmp al,1jnz nuretmov al,0C0hnu1: add al,colcall send_commov ah,0 ;以下10条为把3位十进制数的个位、十位、百位分离 mov al,dis_nummov bl,10div blmov temp0,ahmov ah,0mov bl,10div blmov temp1,ahadd al,30h ;转为ASC码call send_data ;百位送LCD显示mov al,temp1add al,30h ;转为ASC码call send_data ;十位送LCD显示mov al,temp0add al,30h ;转为ASC码call send_data ;个位送LCD显示pop axnuret: retdis_number endp;--------------------------;在指定的行、列显示英文。
8255接口实验报告

8255接口实验报告8255接口实验报告引言:8255接口是一种常见的数字输入输出设备,它可以连接到计算机的并行接口上。
本实验旨在通过使用8255接口,实现计算机与外部设备之间的数据传输与控制。
一、实验背景计算机与外部设备之间的数据交互是计算机系统中非常重要的一部分。
而8255接口作为一种常见的数字输入输出设备,广泛应用于各种工业控制和数据采集系统中。
了解和掌握8255接口的工作原理和使用方法,对于我们深入理解计算机与外部设备之间的数据传输与控制有着重要的意义。
二、实验目的1. 了解8255接口的基本工作原理;2. 掌握8255接口的连接方法和操作步骤;3. 实现计算机与外部设备之间的数据传输与控制。
三、实验过程1. 连接8255接口首先,将8255接口与计算机的并行接口连接起来。
确保连接的稳固和正确。
2. 编写程序使用C语言编写程序,通过并行接口与8255接口进行通信。
程序中需要包含相关的头文件和函数库,以实现对8255接口的控制和数据传输。
3. 实现数据输入通过编写程序,实现从外部设备向计算机输入数据的功能。
可以通过连接外部开关或传感器等设备,将数据输入到计算机中。
4. 实现数据输出通过编写程序,实现从计算机向外部设备输出数据的功能。
可以通过连接LED灯或其他输出设备,将计算机中的数据输出到外部设备上。
5. 运行程序将编写好的程序加载到计算机中,并运行。
观察计算机与外部设备之间的数据传输和控制情况,检查是否实现了预期的功能。
四、实验结果与分析通过实验,我们成功地实现了计算机与外部设备之间的数据传输与控制。
通过编写程序,我们可以将外部设备上的数据输入到计算机中,并将计算机中的数据输出到外部设备上。
通过观察实验结果,我们可以判断数据传输和控制是否正常。
如果数据传输和控制出现异常,我们可以通过调试程序或检查硬件连接来解决问题。
五、实验总结通过本次实验,我们深入了解了8255接口的工作原理和使用方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学
《微机实验及课程设计》
实验报告
实验六 8255并行输入输出
姓名:学号:
专业:测控技术与仪器实验室: 516 同组人员:评定成绩:
一、实验目的
1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;
2)掌握8段数码管的动态刷新显示控制;
二、(1)实验内容(必做)
6-1、8段数码管静态显示:编程从键盘输入一位十进制数字(0~9),在数码管上显示出来。
6-2、8段数码管动态显示:在两个数码管上同时显示不同的两位数字或字母,保持不变直至退出。
(如56或7f)
(2)实验内容(必做一题,选做一题)
6-3 静态显示:用逻辑电平开关预置某个数字(0~9)的ASCII码,将该数据用8255的C口读入,并用A口输出,并在数码管显示出来;如果预置的ASCII 码不是数字(0~9),数码管显示E字母。
6-4 动态显示:在两个数码管上滚动循环显示不同的0~f字符。
(即开始时两个数码管显示01,12,23,34 ··f0,一直循环直至退出)
三、实验原理
(1)实验预备知识
图八段式LED数码管的符号和引脚
(2) 6-1流程图:
6-1源代码:
data segment
ioport equ 0ec00h-0280h
io8255a equ ioport+288h ;8255A口地址
io8255b equ ioport+28bh ;8255控制寄存器端口地址
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码mesg1 db 0dh,0ah,'Input a num (0--9h):',0dh,0ah,'$';提示data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,io8255b ;使8255的A口为输出方式
mov ax,80h
out dx,al
sss: mov dx,offset mesg1 ;显示提示信息
mov ah,09h
int 21h
mov ah,01 ;从键盘接收字符
int 21h
cmp al,'0' ;是否小于0
jl exit ;若是则退出
cmp al,'9' ;是否大于9
jg exit ;若是则退出
sub al,30h ;将所得字符的ASCII码减30H mov bx,offset led ;bx为数码表的起始地址
xlat ;求出相应的段码
mov dx,io8255a ;从8255的A口输出
out dx,al
jmp sss ;转SSS
exit: mov ah,4ch ;返回DOS
int 21h
code ends
end start
(3)6-2接线图:
6-2源代码:
data segment
ioport equ 0ec00h-0280h
io8255a equ ioport+288h
io8255c equ ioport+28ah
io8255k equ ioport+28bh
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;段码buffer1 db 5,6 ;存放要显示的个位和十位
bz dw ? ;位码
data ends
stacks segment stack
db 100 dup(?)
stacks ends
code segment
assume cs:code,ds:data,ss:stacks
start: mov ax,data
mov ds,ax
mov ax,stacks
mov ss,ax
mov dx,io8255k ;将8255设为A口输出
mov al,80h
out dx,al
mov di,offset buffer1 ;设di为显示缓冲区
loop2: mov bh,02
lll: mov al,0 ;送全灭断码
mov dx,io8255a ;自8255A口输出
out dx,al
mov byte ptr bz,bh
push di
dec di
add di, bz
mov bl,[di] ;bl为要显示的数
pop di
mov bh,0
mov si,offset led ;置led数码表偏移地址为SI add si,bx ;求出对应的led数码
mov al,byte ptr [si]
mov dx,io8255a ;自8255A的口输出
out dx,al
mov al,byte ptr bz ;使相应的数码管亮
mov dx,io8255a
out dx,al
mov cx,3000
delay: loop delay ;延时
mov bh,byte ptr bz
shr bh,1
jnz lll
mov dx,0ffh
mov ah,06
int 21h
je loop2 ;有键按下则退出
mov dx,io8255a
mov al,0 ;关掉数码管显示
out dx,al
mov ah,4ch ;返回
int 21h
code ends
end start
(4
6-3源代码:
data segment
ioport equ 0ec00h-0280h ;tpc卡中设备的io地址io8255a equ ioport+288h ;8255A口地址
io8255k equ ioport+28bh ;8255控制寄存器端口地址io8255c equ ioport+28ah ;8255C口地址
led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh data ends
stacks segment stack
db 100 dup (?)
stacks ends
code segment
assume cs:code,ss:stacks,ds:data
main proc far
start: mov ax,stacks
mov ss,ax
mov ax,data
mov ds,ax
mov dx,io8255k ;设8255为C口输入,A口输出 mov al,8bh ;1000 1011
out dx,al
inout: mov dx,io8255c ;从C口输入一数据
call delay
in al,dx
cmp al,'0' ;是否小于0
jl exit1 ;若是则显示E
cmp al,'9' ;是否大于9
jg exit1 ;若是则显示E
mov bx,offset led ;bx为数码表的起始地址 sub al,30h
xlat ;求出相应的段码
mov dx,io8255a ;从8255的A口输出
out dx,al
mov ah,06 ;是否有键输入
mov dl,0ffh
int 21h ;是则退出
jne exit
jmp inout ;转inout
exit1: mov al,79h
mov dx,io8255a
out dx,al
mov ah,06 ;是否有键输入
mov dl,0ffh
int 21h ;是则退出
jne exit
jmp inout ;转inout
exit: mov ah,4ch ;返回DOS
int 21h
main endp
delay proc near ;延时子程序
mov bx,2000
ZZZ: mov cx,0
ZZ: loop ZZ
dec bx
jne ZZZ
ret
delay endp
code ends
end start
6-3接线图:
四、实验中遇到的问题及解决方案
(1)在实验初始,发现七段数码管的a不亮,排除故障发现是由于8255芯片的PA0不能输出高电平;
(2)在各个实验中,连线后发现数码管都没有反应,后来发现,只有在每次运行前运行一下演示实验,再运行自己的程序才出正确结果;
(3)在实验6-3中,初始时,数码管显示的数字是开关预置的数字,即若开关置为0000,0001,则数码管显示1,但是实验要求为预置的为ASCⅡ码;
检查代码,发现若直接用从C口输入的数据,则就是数值,达到实验要求还需对从C口输入的数据进行减30h的操作;
(4)上次实验总未完成部分(在in操作指令前未加延时程序)在这次的课时上实现,上次的实验结果是,若开关预置全1,则屏幕一直显示提示信息;
若开关预置非全1,则开始会显示提示信息,片刻后不再提示,说明若不加延时,用in指令输入的会是0ffh,但片刻后,开关预置的数据会输入,程序不再提示;遗憾部分是,用到的延时程序是借用之前实验中的,没有改变CX数据以观察需加延时的最短时间;。