8255扩展
- 格式:doc
- 大小:25.00 KB
- 文档页数:2
并行I/O 口8255扩展实验
一、实验目的
了解8255芯片的结构及编程方法,学习模拟交通灯控制的实现方法。
二、实验内容
用
8255
1. 因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化情况和规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西绿灯通车,南北红灯。
过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。
再转状态3,南北绿灯通车,东西红灯。
过一段时间转状态4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯,最后循环至状态1
四、实验程序框图
五、实验原理图
①8255 PC0—PC7、PB0—PB3依次接发光二极管L1—L12。
②以连续方式从0630H开始执行程序,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南北路口的红灯亮,东西路口方向通车。
延时一段时间后东西路口的绿灯熄灭,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,之后重复以上过程。
附:实验位置图。
实验七8255 并行I/O扩展实验一、实验要求利用8255 可编程并行口芯片,实现输入、输出实验,实验中用8255PA 口作读取开关状态输入,8255PB 口作控制发光二极管输出。
二、实验目的1、了解8255 芯片结构及编程方法。
2、了解8255 输入、输出实验方法。
三、实验电路及连线1、Proteus 实验电路2、硬件验证实验硬件连接表四、实验说明1、8255A 芯片简介:8255A 可编程外围接口芯片是INTEL 公司生产的通用并行接口芯片,它具有A、B、C 三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:方式0:基本输入/ 输出方式方式l:选通输入/ 输出方式方式2:双向选通工作方式2、使8255A 端口A 工作在方式0 并作为输入口,读取Kl-K8 个开关量,PB 口工作在方式0作为输出口。
五、实验程序流程图六、实验步骤1、Proteus 仿真a.在Proteus 中打开设计文档8255_STM.DSN;b.建立实验程序并编译,仿真;c.如不能正常工作,打开调试窗口进行调试。
参考程序:CODE SEGMENTASSUME CS:CODEIOCON EQU 8006HIOA EQU 8000HIOB EQU 8002HIOC EQU 8004H START:MOV AL,90HMOV DX,IOCONOUT DX,ALNOPSTART1:NOPNOPMOV AL,0MOV DX,IOAIN AL,DXNOPNOPMOV DX,IOBOUT DX,ALJMP START1 CODE ENDSEND START2、实验板验证a.通过USB 线连接实验箱b.按连接表连接电路c.运行PROTEUS 仿真,检查验证结果。
实验五用8255扩展I/0口一.实验目的1.掌握8255扩展I/O口的接口技术。
2.掌握控制应用程序的设计方法。
二.实验原理设计一块8255扩展实验板,其原理线路如图6—1所示。
A口、B口分别接有8个发光二极管指示灯。
从8255A口、B口输出控制字,可控制指示灯的点亮/熄灭,某口线输出“0/1”,可控制该口线的指示灯“亮/灭”。
由接口线路可确定8255的口地址。
A口:8000H B口:8001H C口:8002H 控制口:8003H图1 8255扩展线路原理图三.实验内容与步骤1.通过仿真插头把8255扩展板接在仿真器上。
2.编制使指示灯左/右循环点亮/熄灭的控制程序。
3.键入程序,将仿真器设置在仿真工作方式,运行程序并观察结果。
4.修改程序,控制指示灯以不同形式点亮/熄灭。
四.实验预习要求1.看懂扩展线路原理图,读懂参考程序。
2.写出实验内容要求的修改程序。
五.思考题1.实验中8255工作于何种方式?控制字怎样确定?2.实验程序中延时程序段的作用是什么?去掉延时程序段运行结果有何变化?3.8255的口地址是否唯一?怎样确定口地址?六.实验报告要求1.按顺序写出实验步骤和工作内容。
2.写出实验中所遇到的问题极其解决方法或解决思路。
3.写出实验思考题答案。
七.参考程序0000 1 ORG 0000H0000 802E 2 SJMP MAIN30030 4 ORG 0030H0030 908003 5 MAIN: MOV DPTR,#8003H 0033 7480 6 MOV A,#80H 0035 F0 7 MOVX @DPTR,A 0036 7401 8 MOV A,#01H 0038 FD 9 MOV R5,A0039 ED 10 L1: MOV A,R5003A 908000 11 MOV DPTR,#8000H 003D F0 12 MOVX @DPTR,A 003E A3 13 INC DPTR003F F0 14 MOVX @DPTR,A 0040 7FFF 15 MOV R7,#0FFH 0042 7EFF 16 L2: MOV R6,#0FFH 0044 DEFE 17 L3: DJNZ R6,L3 0046 DFFA 18 DJNZ R7,L2 0048 ED 19 MOV A,R50049 23 20 RL A004A FD 21 MOV R5,A004B 80EC 22 SJMP L1。
8255扩展并口芯片8255并口扩展实验一、实验目的熟悉并口扩展芯片8255的内部结构,学会使用8255扩展并口。
二、实验设备及器件IBMPC机一台DP-51PROC单片机综合仿真实验仪一台8255PACK 模块(选配件)一套三、实验内容通过片外总线方式访问并口扩展芯片8255,并使它的PA口闪烁点亮8个LED。
四、实验要求理解掌握并口扩展芯片8255的原理和该芯片的编程方法,学会使用并口扩展芯片8255进行8位并行接口的扩展。
五、实验步骤1.将8255PACK模块(选配件)插入PARK2区;2.使用导线连接A7区的P2_IO1、P2_IO2、P2_IO5和P2_CS分别至A2区的A8、A9、P10和A15;3.使用排线连接8255PACK模块上的J1接口(PA口)至D1区的J52接口;4.运行编写好的程序,观察8个LED的点亮情况。
六、实验预习要求认真预习本节实验内容,按照实验的要求提前做好实验准备工作,认真阅读8255的数据手册。
七、实验参考程序2.C51程序://---------------------------------------------------------//网站://---------------------------------------------------------#include#include#include#define_Nop()_nop_()#definePACXBYTE[0x7fff]#definePAXBYTE[0x7cff]typedefunsignedcharbyte;sbitRST=P1^0;voidini_cpu(void) {RST=1;_nop_();_nop_();_nop_();_nop_();_nop_();RST=0;PAC=0x80;}voiddelay(void){bytem,n;for(m=0;m<255;m++)for(n=0;n<255;n++);}voidmain(void){ini_cpu();while(1){PA=0x00;delay();PA=0xff;delay();}}//---------------------------------------------------------//网站://---------------------------------------------------------#include#include#defineucharunsignedchar#defineuintunsignedint#definePAXBYTE[0X0000]#definePBXBYTE[0x0001]#definePCXBYTE[0X0002]#defineCOMXBYTE[0X0003]ucharcodeDSY_CODE[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA4,0XC0,0XC0,0X80,0XC0,0X80,0XF9,0X80,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};ucharcodeDSY_index[]={0x10,0x02,0x04,0x08,0x10,0x20,0x40,0x80};voiddelayms(uintms){uchari;while(ms--)for(i=0;i<120;i++);}voidmain(){uchari,j,k;COM=0x80;while(1){{for(j=0;j<40;j++){for(k=0;k<8;k++){PB=DSY_index[k]; PA=DSY_CODE[k+i]; delayms(5);}}i=(i+1)%15;}}。
MCS-51单片机的系统扩展技术(四)4.2 利用8255A可编程并行接口芯片扩展I/O口8255A是INTEL公司生产的一种通用可编程并行I/O接口芯片。
它有3个并行端口,分别称为PA、PB、PC口,其中PC口又分为高4位口和低4位口两部份。
它们都可以通过软件编程来设置各I/O口的工作方式。
一、8255A的内部结构和引脚功能图17是8255A的内部结构框图,图18是8255A的引脚排图,该芯片主要由以下几部份组成:图17 8255的内部结构框图(1)并行端口PA、PB、PC 这三个端口都为8位,都可被编程为输入或输出两种方式,但它们在结构和功能上有差异。
PA口有一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器,可编程为输入/输出或双向寄存器;PB口有一个8位输入/输出锁存/缓冲器和一个8位数据输入缓冲器(不锁存),可编程为输入或输出,但不能双向输入/输出;PC 口有一个8位数据输出锁存/缓冲器和一个8位数据输入缓冲器,可分为两个4位口使用。
它除了作为输入输出口外,还可作为PA、PB口工作于选通方式时的状态控制信号。
(2)总线接口电路该电路主要用于实现8255A与单片机芯片的信号连接。
它由两部份组成:①数据总线缓冲器 数据总线缓冲器为8位双向三态缓冲器,可以直接与MCS-51系统总线相连。
MCS-51进行I/O 操作的有关数据、控制字和状态信息都是过该缓冲器进行传送。
图18 8255引脚图②读/写控制逻辑 这部份主要是与读写有关的控制信号,主要包括:CS :片选输入信号,低电平有效(8255A 被选中)RD :读信号,输入,低电平有效(允许CPU 从8255A 读取数据或状态信息)WR :写信号,输入,低电平有效(允许CPU 将控制字或数据写入8255A )RESET :复位信号,输入,高电平有效(8255A 被复位,所有控制寄存器被清0,所有端口被置输入方式);A1、A0:端口选择信号,输入。
实验九、8255可编程并行I/O扩展接口实验一、实验目的1.熟悉8255并行接口芯片的基本工作原理及应用2.掌握单片机与8255的接口电路设计和编程二、实验设备1.仿真器2.8255可编程并行I/O扩展接口模块3.单片机最小系统模块4.发光二极管阵列模块三、实验要求连接单片机最小系统、8255扩展接口、数码管动态扫描显示模块、矩阵式键盘模块组成的电路,要求在键盘按下时,8位LED动态显示器上最低位显示相应的字符,以前的各位字符向高位推进1位。
请参看实验二的相关内容。
四、实验原理8255是一个具有3个8位的8位并行口,并且可编程为多种工作模式的接口芯片。
由于每个端口上具有输入/输出的缓冲和锁存功能,因此可用于扩展单片机有限的I/O口,作为单片机和外围器件的中间接口电路。
3.1引脚说明8255共40个引脚,采用了双列直插的封装,主要引脚功能如下:◆D7—D0:三态双向数据线,与单片机数据总线连接;◆CS:片选信号,低电平有效;◆RD:读出信号线,低电平有效;◆WR:写入信号线,低电平有效;◆PA7—PA0:A口输入/输出线;◆PB7—PB0:B口输入/输出线;◆PC7—PC0:C口输入/输出线;◆RESET:芯片复位信号线;◆A1—A0:地址线,用来指定8255内部端口。
3.2内部结构和工作方式(1)端口A、B、C端口A为8位数据传送,数据输入或输出时均受到锁存。
端口B为8位数据传送,数据输入时不受锁存,而数据输出时受到锁存。
端口C 为8位数据传送,数据输入时不受锁存,而数据输出时受到锁存。
(2)8255接口工作状态选择表9-1(3)8255的基本工作方式8255可编程并行I/O 扩展芯片是通过在控制端口中设置控制字来决定它的工作方式的。
8255有以下三种基本工作方式:⏹ 方式0——基本输入/输出方式。
⏹ 方式1——选通输入/输出方式。
⏹ 方式2——双向传送方式。
8255A 的端口A 可以工作在三种工作方式中的任何一种,端口B 只能工作在方式0或方式1,端口C 则常常配合端口A 和端口B 工作,为这两个端口的输入/输出传送提供控制信号和状态信号。
桂林电子科技大学微机单片机接口设计报告指导老师:吴兆华学生:史海玲学号:092011110桂林电子科技大学机电工程学院《微机综合设计》设计报告一、设计题目 (1)二、设计内容与要求 (1)三、设计目的意义 (1)四、系统硬件电路图 (1)五、程序流程图与源程序 (2)5.1 程序流程图 (2)5.2 源程序 (3)六、系统功能分析与说明 (3)6.1 总体功能实现说明 (3)6.2 元器件的选择及功能介绍 (3)6.2.1 元器件的选择 (3)6.2.2 元器件的功能介绍 (4)七、设计体会 (8)八、参考文献 (9)《8255并行口扩展控制》设计报告一、设计题目8255并行口扩展控制二、设计内容与要求用8051单片机控制实现8255的PB口输出数据等于PA口输入数据三、设计目的意义1、通过8255并行口扩展控制,进一步熟悉和掌握单片机的结构及工作原理,加深对单片机理论知识的理解;2、掌握单片机内部功能模块的应用;3、掌握单片机的接口及相关外围芯片的特性、使用与控制方法;4、掌握单片机的编程方法,调试方法;5、掌握单片机应用系统的构建和使用,为以后设计和实现单片机应用系统打下良好的基础。
四、系统硬件电路图(1) 8255并行口扩展控制硬件电路原理图如下:图1:电路原理图(2)8255并行口扩展控制硬件电路仿真图:图2:电路仿真图(3) PCB图如下:图3:PCB图五、程序流程图与源程序5.1 程序流程图5.2 源程序ORG 0000H ;程序入口MOV DPTR,#7FFFH ;送控制口地址MOV A,#90H ;送8255状态字至控制口MOVX @DPTR,ALOOP:MOV DPTR,#7CFFH ;送PA口地址MOVX A,@DPTR ;读PA口状态MOV DPTR,#7DFFH ;送PB口地址MOVX @DPTR,A ;把PA口状态送至PB口JMP LOOP ;循环END六、系统功能分析与说明6.1 总体功能实现说明本次设计单片机采用89S51,它是一种低功耗、高性能的8位CMOS微控制器。
单片机用8255A扩展I/O口图中,P0口为地址/数据复用口,数据通过P0口直接传送,地址的低8位通过74LS373锁存,系统的读/写控制及复位信号与8255A的读/写及控制端对应相连,系统地址总线的A1、A0(P0。
1、P0.0)直接与8255A的地址线A1、A0对应相连,利用高8位地址线的P2。
7作为选通信号,直接与8255A的片选端相连,A口接8个发光二极管作为输出,B口接1只8位拨码开关作为输入,C口空置.8255A地址设置表单片机引脚P27 P26 P25 P24 P23 P22 P21 P20 P07 P06 P05 P04 P03 P02 P01 P00 8255A引脚CS A1 A0 A口0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 B口0 1 1 1 1 1 1 1 1 1 1 1 1 1 O 1 控制口0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 十六进制值7 F F X 8255A各端口的地址如下:A口地址:7FFCH;B口地址:7FFDH;C口地址:7FFEH;控制口地址:7FFFH.控制字设置D7=1,方式控制,D6、D5决定控制方式,D4决定A口,D1决定B口。
8255A控制字:82H。
用C语言编写的控制程序如下:#include〈reg51.h>#include〈absacc。
h> //扩展地址解析头文件#define PAC XBYTE[0x7FFF]//控制地址定义#define PA XBYTE[0x7FFC] //A口地址定义#define PB XBYTE[0x7FFD]//B口地址定义void delay(void) //延时子程序{unsigned int m,n;for(m=0;m<500;m++)for(n=0;n〈500;n++);}void main(void){unsigned char n;//数据存储变量PAC=0x82;//设控制字while(1){n=PB;//从B口读数据delay();PA=n; //在A口输出数据delay();}}控制功能:B口上预置的拨码开关状态会由A口上发光二极管的显示反映出来。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rd=P1^0;
sbit cs=P1^1;
sbit a1=P1^2;
sbit a0=P1^3;
sbit wr=P1^4;
/*
rst接地
*/
uchar bdata Padata;//Pa口位操作
sbit led=Padata^0;
uchar bdata Pbdata;//Pb口位操作
sbit led1=Pbdata^0;
uchar bdata Pcdata;//Pc口位操作
sbit sb1=Pcdata^0;
sbit sb2=Pcdata^1;
/*
a0=0,a1=0,为选中Pa口;
a0=1,a1=0,为选中Pb口;
a0=0,a1=1,为选中Pc口;
a0=1,a1=1,为设置工作模式;
*/
void PP8255(uchar aa0,aa1,com)//8255扩展口用作输出{
rd=1;
a0=aa0;
a1=aa1;
cs=0;
wr=0;
P0=com;
wr=1;
cs=1;
}
uchar c8255()//8255扩展口用作输入
{
uchar com;
wr=1;
a0=0;
a1=1;
cs=0;
rd=0;
com=P0;
rd=1;
cs=1;
return(com);
}
void main()
{
PP8255(1,1,0x89);//设置8255工作模式,0x80为三个口都为输出,0x89 PaPb口为输出,Pc口为输入。
0x8b Pa口输出,PcPb输入。
Padata=0xff;//上电使Pa口状态都为高电平
PP8255(0,0,Padata);//将0xff送给8255的Pa口
Pbdata=0xff;//上电使Pb口状态都为高电平
PP8255(1,0,Pbdata);//将0xff送给8255的Pb口
while(1)
{
Pcdata=c8255();//读取Pc口的状态
{
if(sb1==0)
{
led=0;
PP8255(0,0,Padata); //将led=0,这个值返回给Pa口
}
else
{
led=1;
PP8255(0,0,Padata); //将led=1,这个值返回给Pa口
}
if(sb2==0)
{
led1=0;
PP8255(1,0,Pbdata); //将led1=0,这个值返回给Pb口
}
else
{
led1=1;
PP8255(1,0,Pbdata); //将led1=1,这个值返回给Pb口
}
}
}
}。