实验六---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并行输入输出实验一、实验目的与要求了解8255A的内部结构、工作原理;掌握对8255A的初始化编程方法。
二、实验设备STAR系列实验仪一套、PC机一台三、实验内容1、选通输入实验:B口有8个发光二极管PBi(i=0~7),要求K3K2K1=000时LED1亮~K3K2K1=111时LED8亮,预置开关K为一组状态后按下BUTTON产生一负脉冲信号输入到PC4上,用LEDi(i=1~8)亮来显示K的状态。
2、选通输出实验:A口有8个发光二极管PAi(i=0~7),显示LED0亮,然后每按一次BUTTON使LED循环下移一位亮。
四、实验原理图1、2、五、实验步骤1区:单脉冲(2)运行程序(3)预置开关K为一组状态后上下拨动单脉冲开关,拨动两次,产生一个“”,观察B 口灯是否对应开关的状态相应亮,拨动开关K设置下一组开关状态,上下拨动单脉冲开关,拨动两次,产生一个“”,继续检查B口灯是否对应开关的状态相应亮。
2区:单脉冲(3)此时发现LED0亮,每上下拨动单脉冲开关,拨动两次,产生一个“”,观察LED是否循环下移一位亮。
六、流程图1、2、七、程序代码1、DATA SEGMENTTAB DB 11111110B,11111101B,11111011B,11110111B DB 11101111B,11011111B,10111111B,01111111B DATA ENDSSTCK SEGMENT STACKSTA DB 50 DUP(?)STCK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STCKSTART: MOV AX,DATAMOV DS,AXCALL Init8255 ;8255初始化子程序SCAN: MOV DX,0F002H;C口IN AL,DXAND AL,00100000BJZ SCAN ;判断IBFA是否为1 MOV DX,0F000H ;A口IN AL,DXAND AL,7 ;保留K1,K2,K3的数字 LEA BX,TABXLATMOV DX,0F001H ;B口OUT DX,ALJMP SCANInit8255 PROCMOV DX,0F003HMOV AL,0B0HOUT DX,ALRETInit8255 ENDPCODE ENDSEND START2、STCK SEGMENT STACKSTA DB 50 DUP(?)STCK ENDSCODE SEGMENTASSUME CS:CODE,SS:STCKSTART: MOV DX,0F003HMOV AL,0A0HOUT DX,ALMOV DX,0F000HMOV AL,0FEH ;使LED0亮OUT DX,ALLOP: MOV BL,AL ;保护AL中内容LOP1: MOV DX,0F002HIN AL,DXAND AL,80HJZ LOP1 ;/OBFA是否为1CALL DELAY ;延时MOV AL,BLROL AL,1MOV DX,0F000HOUT DX,ALJMP LOPDELAY PROCPUSH AXPUSH CXMOV CX,0FFFFHLOOP $MOV CX,0FFFFHLOOP $POP CXPOP AXRETDELAY ENDPCODE ENDSEND START八、遇到问题1、一开始编的程序没有查询IBFA的状态,用的是无条件传送,预置K的状态,不拨单脉冲开关,灯也能对应显示。
可编程并行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并行输入输出控制器的功能和工作原理;二、实验原理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并行接口实验学院:信息工程学院专业:电子信息工程指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制一,实验目的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 芯片编程来实现输入输出功能。
2. 流水灯显示实验:使8255 的A 口和B 口均为输出,数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示,D15~D8 与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。
实验接线图如下图所示。
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的219口为输出口,218为输入口,从218口将K0~K7作为一个字读入,再从219口输出这一反码字节。
三、实验算法
先初始化8255,将219口设置为输出口,218为输入口;再通过输入指令从8255的218口读入数据;最后通过输出指令将数据从8255的219口输出,在灯上显示出来。
四、实验电路图
电路图如下所示:
五、程序清单
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,21BH ;初始化8255
MOV AL,90H
OUT DX,AL
BG: MOV DX,218H ;从8255的218口(即A口)读入数据
IN AL,DX ;数据存放到AL里
MOV DX,219H ;从8255的219口(即B口)输出数据
OUT DX,AL
JMP BG ;无限循环输入输出
CODE ENDS
END START
六、实验现象、结果与分析
随意扳动K0~K7,218口接收输入的数据,219口输出相应的数据到L0~L7,使对应指示灯亮。
七、实验体会
通过本实验了解8255的工作特性,初步知道了怎么用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数据以观察需加延时的最短时间;。