8255C键盘显示器程序

合集下载

51单片机8255驱动C程序

51单片机8255驱动C程序

51单片机8255驱动C程序/*----------------------------------------------------------------------------------------------------------------库文件名称:driver8155.h功能描述:驱动8155,不需要了解8255的工作原理,透明操作8255的三个输入输出口PA、PB、PC读A口只需要调用rd_PA,写则需要调用wr_PA;B、C操作也一样全局变量: IO_flags,在其它程序中不能对其改写特殊说明: 无//----------------------------------------------------------------------------------------------------------------*/ #include<config.h>unsigned char const cfg_table[8]={0x80, /*10000000b, ;c=out b=out a=out*/0x90, /*10010000b, ;c=out b=out a=in */0x82, /*10000010b, ;c=out b=in a=out*/0x92, /*10010010b, ;c=out b=in a=in */0x89, /*10001001b, ;c=in b=out a=out*/0x99, /*10011001b, ;c=in b=out a=in */0x8B, /*10001011b, ;c=in b=in a=out*/0x9B, /*10011011b, ;c=in b=in a=in */};unsigned char rd_mem(unsigned char mem_ad){}void PABC_config(void ){a8255_CON=cfg_table[IO_flags];}char rd_PA(void) /*读PA口*/{unsigned char PA_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsA=1; /*置PA状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==0); /*判断状态标志位是否为高*//*控制字设置完成*/PA_data=a8255_PA; /*把PA口的数据读到PA_data*/return(PA_data); /*返回PA_data*/}char rd_PB(void) /*读PB口*/{unsigned char PB_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsB=1; /*置PB状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsB==0); /*判断状态标志位是否为高*//*控制字设置完成*/PB_data=a8255_PB; /*把PA口的数据读到PB_data*/return(PB_data); /*返回PB_data*/}char rd_PC(void) /*读PC口*/{unsigned char PC_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsC=1; /*置PC状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsC==0); /*判断状态标志位是否为高*//*控制字设置完成*/PC_data=a8255_PC; /*把PC口的数据读到PC_data*/return(PC_data); /*返回PC_data*/}void wd_PA(unsigned char PA_data) /*写PA口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsA=0; /*置PA状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PA=PA_data; /*将PA_data的内容送到PA口*/}void wd_PB(unsigned char PB_data) /*写PB口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsB=0; /*置PB状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsB==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PB=PB_data; /*将PB_data的内容送到PB口*/}void wd_PC(unsigned char PC_data) /*写PC口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsC=0; /*置PC状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsC==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PC=PC_data; /*将PC_data的内容送到PC口*/}void set_PC(unsigned char PC_num){ACC=IO_flags;IO_flagsC=0;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num|0x01);a8255_CON=PC_num;}void clr_PC(unsigned char PC_num){ACC=IO_flags;IO_flagsC=1;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num&0xFE);a8255_CON=PC_num;}void main(void){set_PC(0x01);}/*---------------------------------------------------文件名称:Config.h功能描述:端口定义和RAM配置输入参数:无输出参数:无特殊说明:根据具体分配的地址,重新设定各值//----------------------------------------------------------------------------------------------------------------*/ #include <reg52.h>#include<ABSACC.H>#define a8255_PA XBYTE[0x7F7C] /*PA口地址*/#define a8255_PB XBYTE[0x7F7D] /*PB口地址*/#define a8255_PC XBYTE[0x7F7E] /*PC口地址*/#define a8255_CON XBYTE[0x7F7F] /*控制字地址*/unsigned char IO_flags; /* 用于表示PA、PB、PC的当前输入输出状态内容不能被其它程序改写,操作时ACC=IO_flags*/sbit IO_flagsA=ACC^0; /*PA的当前输入输出状态置位表示输入,复位表示输出*/sbit IO_flagsB=ACC^1; /*PB的当前输入输出状态*/ sbit IO_flagsC=ACC^2; /*PC的当前输入输出状态*/char rd_PA(void); /*读PA口*/char rd_PB(void); /*读PB口*/char rd_PC(void); /*读PC口*/void wd_PA(unsigned char PA_data); /*写PA口*/void wd_PB(unsigned char PB_data); /*写PA口*/void wd_PC(unsigned char PC_data); /*写PA口*/void PABC_config(void ); /*写8255控制字*/。

单片机课程设计《病人呼叫器》讲解

单片机课程设计《病人呼叫器》讲解

太原理工大学课程设计说明书课程名称:《单片机原理及其在煤矿中的应用》设计题目:医院病人呼叫器院系:矿业工程学院学生姓名:李国富学号:2011002813专业班级:采矿1109指导教师:曹金燕2013年12月27 日课程设计任务书病人呼叫器摘要:本设计是一个采用89C51单片机配以外围适当电路完成一个可供6 4个病房使用的呼叫系统。

该系统需运用单片机典型外围接口技术中的矩阵式键盘电路完成对病房的输入,由于病房较多,考虑到89C51单片机自身接口有限,需用可编程并行接口芯片8255A外扩I/O实现对矩阵式键盘的扫描与键值的读入。

MCS-51单片机受管脚的限制,P0口不仅要作数据总线口而且还提供低8位A0~A7,所以只能分时工作,故P0口输出的低8位地址数据必须用锁存器锁存。

本设计采用74LS373,其锁存控制信号由引脚ALE提供。

在ALE的下降沿将P0口输出的地址数据锁存。

本设计中单片机要实现三种功能:1)床位按钮的扫描与读入。

2)按钮按下时振铃三秒并显示房号。

3)护士响应后数码管灭,铃声停。

关键词:呼叫器/单片机/医院/显示/蜂鸣器目录1.设计背景 (5)2.课程名称及要求 (5)2.1课程名称 (5)2.2设计要求 (5)3.设计方案 (6)4.工作原理及工作流程 (6)5.KEIL软件程序编辑与调试 (8)6.各分模块设计及相关元器件的选用 (5)6.1单片机的选用 (11)6.274LS164简介 (14)6.374LS373简介 (14)6.48255A简介 ........................... 错误!未定义书签。

6.5按钮开关电路 ......................... 错误!未定义书签。

6.6声音报警电路......................... 错误!未定义书签。

6.7外部震荡电路......................... 错误!未定义书签。

8225的初始化程序

8225的初始化程序

8255的初始化程序:1、地址确定因为A10A9A8A7A6A5A4A3=01010011,A2A1=11为控制字端口,A2A1=10为C口,A2A1=01为B口,A2A1=00为A口,A0为0,所以8255A地址范围为24CH~24FH。

2、控制字确定因为A口为方式0输出,B口为方式0输入,所以控制字为10000010B=82H 3、初始化程序MOV AL,82HMOV DX,24FHOUT DX,AL附8255知识:8255是微机并行接口芯片。

8255是可编程I/O口扩展芯片。

对8255输入不同的指令可改变I/O口的工作方式。

8255与单片机系统连接方式简单,工作方式由程序设定,图2为8255的引脚图。

8255内部有4个寄存器:分别为寄存器A、B、C和控制寄存器。

A、B、C寄存器的数据就是引脚PA7~PA0、PB7~PB0、PC7~PC0上输入或输出的数据。

而控制寄存器的数据则表明PA、PB、PC的工作方式。

通过CS、A0、A1、RD和WR对4个寄存器进行操作。

1)CS为低电平时选通8255;2)A1、A0为地址选通;3)RD和WR为读、写信号:RD为低、WR为高时为读方式,RD为高、WR为低时为写方式。

4)D0~D7为数据口。

向控制寄存器写入不同的数据可以使8255工作在三种不同的方式下。

这里只介绍应用最多的方式0。

方式0下8255的PA、PB及PC口上半部分(PC7~PC4)和下半部分(PC3~PC0)中任何一个端口都可以设定为输入或输出,PC口还可以进行位操作。

控制寄存器各位的含义如图3所示。

SLPC-24中8255工作在方式0。

PA、PB为输入口、PC为输出口,对控制寄存器写入的数据为10010010B,即92H。

微机原理实验报告-实验三-七段数码管.doc

微机原理实验报告-实验三-七段数码管.doc

实验三七段数码管一、实验目的:进一步熟悉8255,掌握数码管显示数字的原理二、实验原理:1、实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

2、七段数码管的字形码:3、在实验 2 中加入键盘是否有输入判断,如有则去读取键盘输入数据,并加入提示信息,比如“输入十位数”,“输入个位数”,从键盘读入的数据放入十位和个位数据定义区,取代要显示的数据。

4、只需要添加两位变量作为缓存,一个记录键盘输入的值,一个记录循环减 1 的结果,将其通过数码管显示出来,减至0 时重载键盘输入的值。

三、实验步骤:静态显示:将8255 的 A 口 PA0~PA6分别与气短数码管的段码驱动输入端A~G相连,位码驱动输入端S1 接 +5V(选中), S0、 DP接地(关闭)。

动态显示:七段数码管段码不变,位码驱动输入端S1,S0 接 8255 C 口的 PC1,PC0。

8253 的接法参考第二次实验的接法,CLK0接入 1MHz, CLK1接 8255 的 PC7。

1、在两个数码管上显示两位数字,要求延时应用8253 硬件延时2、可以改变数码管显示数字,从键盘读入两位数字,并在数码管显示出来。

3、对输入数据进行倒计时计数,时间显示在数码管上,计到0 重新开始。

四、流程图:开始对 8255 进行初设置 8255C 口输从键盘读入数据Y根据十位获得段码,延时N根据个位获得段码,按键延时N循环显示这Y要输出的数重新载入输Y要输出的数据减 1五、实验结果:实验结果如预期一致,可以键盘输入倒计时的值,时间显示在数码管上,计数到0 重新计数。

六、程序代码:;******************************************;*数码管显示对键盘输入数据进行倒计时计数*;******************************************data segmentio8255a equ 288hio8255c equ 28ahio8255_mode equ 28bhio8253a equ 280hio8253b equ 281hio8253c equ 282hmesg1 db 0dh,0ah,'Input a num (00--99) for high position,other key isexit:',0dh,0ah,'$'mesg2 db 0dh,0ah,'Input a num (00--99) for low position,other key isexit:',0dh,0ah,'$'led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh; 段码buffer db , ; 存放要显示的个位和十位buffer1 db , ; 存放临时的个位和十位用于减一bz dw;data endscode segmentassume cs:code,ds:datastart:位码mov ax,datamov ds,axmov dx,io8255_mode ; 将8255 的A 口为输出mov ax,88hout dx,almov dx,offset mesg1mov ah,09hint 21h; 显示提示信息mov ah,01int 21h; 从键盘接收十位字符cmp al,'0' jl exit ; 是否小于0 ; 若是则退出cmp al,'9' jg exit sub al,30h ; 是否大于9 ; 若是则退出mov buffer,almov dx,offset mesg2 mov ah,09hint 21hmov ah,01hint 21h; 将输入的十位数存入指定地址; 显示提示信息cmp al,'0'jl exitcmp al,'9'jg exitsub al,30h; 判断方法同十位mov buffer+1,aljmp reset; 将输入的个位数存入指定地址exit:mov ah,4chint 21hreset:mov al,buffermov buffer1,almov al,buffer+1mov buffer1+1,al; 返回mov di,offset buffer1loop1:call time; 取得显示缓冲区的地址loop2:mov bh,02h ; 数码管循环显示部分lll:mov byte ptr bz,bhpush didec diadd di, bzmov bl,[di] ;bl 为要显示的数pop dimov al,0mov dx,io8255cout dx,almov 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,io8255cout dx,almov cx,3000delay:loop delay; 延时mov bh,byte ptr bzshr bh,1jnz lllmov dx,io8255cin al,dxtest al,80hjnz setjmp loop2set:test buffer1+1,0fhjz set1dec buffer1+1jmp loop1set1:test buffer1,0fhjz resetdec buffer1mov buffer1+1,09hjmp loop1time proc near ; 定时一秒的子程序mov dx,io8253c ; 向 8253 写控制字mov al,37h ; 使0 通道为工作方式 3 out dx,almov ax,1000h ; 循环计数初值1000 mov dx,io8253aout dx,al; 先写低字节mov al,ahout dx,al; 后写高字节mov dx,io8253cmov al,71h ; 设8253 通道 1 工作方式0out dx,almov ax,1000h ; 循环计数初值1000mov dx,io8253bout dx,al ; 先写低字节mov al,ahout dx,al; 后写高字节rettime endpcode endsend start七、实验总结:本次实验需要结合上次实验的知识,应用 8253 硬件延时,因此增加了些许难度,代码的修改也不少。

键盘扫描显示实验报告

键盘扫描显示实验报告

一、实验目的1. 理解键盘扫描的基本原理,掌握键盘扫描的方法。

2. 掌握数码管显示的基本原理,实现键盘扫描信息的实时显示。

3. 熟悉8255并行接口芯片在键盘扫描和数码管显示中的应用。

二、实验原理1. 键盘扫描原理:键盘扫描是指通过硬件电路对键盘按键进行检测,并将按键信息转换为可识别的数字信号的过程。

本实验采用行列式键盘,通过扫描键盘的行线和列线,判断按键是否被按下。

2. 数码管显示原理:数码管是一种用来显示数字和字符的显示器,由多个发光二极管(LED)组成。

本实验采用七段数码管,通过控制各个段(A、B、C、D、E、F、G)的亮灭,显示相应的数字或字符。

3. 8255并行接口芯片:8255是一款通用的并行接口芯片,具有三个8位并行I/O口(PA、PB、PC),可用于键盘扫描和数码管显示的控制。

三、实验设备1. 实验平台:PC机、8255并行接口芯片、行列式键盘、七段数码管、面包板、导线等。

2. 软件环境:汇编语言编程软件、仿真软件等。

四、实验步骤1. 硬件连接:将8255并行接口芯片、行列式键盘、七段数码管连接到实验平台上,按照电路图进行连线。

2. 编写程序:使用汇编语言编写键盘扫描和数码管显示的程序。

(1)初始化8255并行接口芯片:设置PA口为输出端口,PB口为输出端口,PC口为输入端口。

(2)扫描键盘:通过PC口读取键盘的行线状态,判断是否有按键被按下。

若检测到按键被按下,读取对应的列线状态,确定按键的位置。

(3)数码管显示:根据按键的位置,控制数码管的段(A、B、C、D、E、F、G)的亮灭,显示相应的数字。

3. 仿真调试:使用仿真软件对程序进行调试,确保程序能够正确扫描键盘和显示数字。

五、实验结果与分析1. 实验结果:成功实现了键盘扫描和数码管显示的功能。

当按下键盘上的任意按键时,数码管上会显示对应的数字。

2. 分析:(1)键盘扫描部分:通过读取PC口的行线状态,判断是否有按键被按下。

当检测到按键被按下时,读取PB口的列线状态,确定按键的位置。

最新东南大学-微机原理-微机系统与接口-实验五-六-实验报告-自动化学院

最新东南大学-微机原理-微机系统与接口-实验五-六-实验报告-自动化学院

东南大学《微机实验及课程设计》实验报告实验五8253 计数器/定时器实验六8255 并行输入输出姓名:学号:08011专业:自动化实验室:计算机硬件技术实验时间:2012年04月27日报告时间:2013年05月15日评定成绩:审阅教师:一. 实验目的实验五:1)掌握计数器/定时器8253 的基本工作原理和编程应用方法;2)了解掌握8253 的计数器/定时器典型应用方法实验六:1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;2)掌握8段数码管的动态刷新显示控制;3)分析掌握8255工作方式1时的使用及编程,进一步掌握中断处理程序的编写。

二. 实验内容实验五:必做:5-1 将计数器0设置为方式0,计数初值为N(小于等于0FH),用手动的方式逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化。

(参考程序p63)5-2 将计数器0、1分别设置在方式3,计数初值设为1000,用逻辑笔观察OUT0电平的变化。

(参考程序p64)实验六:(1)8255方式 0:简单输入输出实验电路如图一,8255C口输入接逻辑电平开关K0~K7,编程A口输出接 LED显示电路L0~L7;用指令从 C口输入数据,再从A口输出。

图一 8255简单输入输出(2)编程将A口 L0-L7控制成流水灯,流水间隔时间由软件产生;流水方向由K0键在线控制,随时可切换;流水间隔时间也可由K4~K7键编码控制,如 0000对应停止,0001对应 1秒,1111对应 15秒,大键盘输入 ESC键退出。

(3)8段数码管静态显示:按图二连接好电路,将 8255的 A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端 S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

图二单管静态显示(4) 8段数码管动态显示:按图三连接好电路,七段数码管段码连接不变,位码驱动输入端S1、S0 接8255 C口的PC1、PC0。

利用8253_、8255实现竞赛抢答器的功能(1)

利用8253_、8255实现竞赛抢答器的功能(1)

利用8253、8255实现竞赛抢答器的功能摘要:8255内部有3个相互独立的8位数据端口,即端口A﹑端口B﹑端口C。

设计人员可以用程序使他们分别作为输入端口或输出端口。

而8253即可对系统时钟脉冲计数实现定时,又可对外部事件进行计数。

所以利用8253、8255的定时、中断控制的功能可实现抢答器的功能。

关键字:8253、8255、中断、抢答器0.引言:本文主要利用8253 、8255实现竞赛抢答器的以下功能,第一,可供4组选手同时抢答,由按钮控制。

第二,能显示出最先抢答的组号,而对其他组的抢答不予理睬。

第三,对主持人未曾按启动扭之前就按抢答按钮的犯规组,亮红灯警告。

第四,对抢答后的回答时间进行计时控制,如回答超时,则以音响报警。

1.芯片介绍:(1)8255芯片8255A内部有3个相互独立的8位数据端口,即端口A﹑端口B﹑端口C。

设计人员可以用程序是他们分别作为输入端口或输出端口。

不过,每个端口有着各自的特点。

端口A对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。

所以,用端口A作为输入或输出时,数据均可以受到锁存。

端口B对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。

端口C对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。

这样,当端口C作为输入端口时,对数据不作锁存,而作为输出端口时,对数据进行锁存。

在使用中,端口A﹑端口B和端口C可以相互独立,分别作为输入或者输出端口,也可以由端口C配合端口A﹑端口B作输入端口或者输出端口,此时,端口A和端口B作为独立的输入端口或输出端口,而端口C则配合端口A和端口B工作。

具体得讲,端口C常常通过控制命令被分成两个4位端口,每个4位端口包含1个4位的输入缓冲器和1个4位的输出锁存器/缓冲器,他们分别用来位端口A和端口B提供控制信号和状态信号。

方式选择控制字8255A引脚图(2)8253芯片8253的主要性能:8253可编程定时/计数器芯片时Intel公司生产的微型计算机通用外围芯片之一。

8-2 8255的应用实例解读

8-2 8255的应用实例解读
23
CPU发读信 号 2019/2/24
PPT
STB#(Strobe闸门)——选通输入信号,低电平有效。它是外设供给的输入信 号,当其有效时将外设来的数据送入8255的输入锁存器。A组对应(接到) PC4;B组对应PC2。 IBF(input buffer full)——输入锁存器满,高电平有效。这是一个8255输给 外设的联络信号。当其有效时,通知外设输入的数据已写入缓冲器,此时不能 送下一个数据。CPU用IN指令取走数据后,此信号被清除。A组对应PC5;B组 对应PC1。如果外设不需要这个信号你可以悬空不用。
表中的输入输出时是 针对8255而言。
2019/2/24
22
8255A方式1 (输入)情况下四个联络信号及工作过程
PC口的哪一位做选通信号和口有关和输出输入 有关,比如同为输入A口用PC4,B口用PC2
向C口写P4位置1, 开放中断
外设产生 数据 1
1 1 1 1
数据出现在外 数据进入8255A 部数据总线 的 A口 注意:此工作是 外设发选通 外部设备 8255A初始化时 信号 通知外设缓冲区已 完成的!!! 满,表示已经接受 数据 向CPU发中断请 求信号
2019/2/24
21
8255 的方式1----选通输入方式
在这种工作方式下,数据的输入输出操作要在选通信号控制下完成。和外设商量着来
端口A和端口B仍作 为数据的输入、输出 口; 端口C的某些位作为 端口A和端口B的选 通控制信号,配合 AB 口使用。
A口、B口在作为输入 和输出时的选通信号 源自不同的引脚。
C口置位复位控制字来设置
如图
INTE(interrupt enable)——端口中断允许信号,可由用户通 过对PC4位置位来实现。如果你想让CPU已中断的方式处理输 入的数据,那么设INTE =1,允许发出INTR请求。该信号没 有外接引脚,INTE状态通过C口置位复位控制字来设置。 2019/2/24 25

西南交大微机实验代码

西南交大微机实验代码

;锁存器,I/O输出区的CS273接2A8-2AFH,1Q-8Q接L0-L7ls273 equ 2a8hcode segmentassume cs:codestart: mov ah,2mov dl,0dhint 21hmov ah,1int 21hcmp al,27je exitmov dx,ls273out dx,aljmp startexit:mov ah,4chint 21hcode endsend start;译码器,数字电路区的CLK接2A0-2A7H,CD接2A8-2AFH,SD接+5V,Q端接L7 outport1 equ 2a0houtport2 equ 2a8hcode segmentassume cs:codestart: mov dx,outport1out dx,alcall delaymov dx,outport2out dx,alcall delaymov ah,1int 16hje startmov ah,4chint 21hdelay proc nearmov bx,200lll: mov cx,0ll: loop lldec bxjne lllretdelay endpcode endsend start;8255开关实验,8255CS接288H,K0-K7接PC0-PC7,L0-L7接PA0-PA7io8255a equ 288hio8255c equ 28ahio8255z equ 28bhcode segmentassume cs:codestart: mov dx,io8255zmov al,8bhout dx,alinout: mov dx,io8255cin al,dxmov dx,io8255aout dx,almov dl,0ffhmov ah,06hint 21hjz inoutmov ah,4chint 21hcode endsend start;8255七段数码管静态显示,8255CS接288-28FH,PA0-PA6接数码管的段驱动输入端a-g,位驱动S0接GNDio8255a equ 288hio8255z equ 28bhdata segmentled db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1 db 0dh,0ah,'Input a num (0-9),other key is exit:',0dh,0ah,'$'data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8255zmov ax,80hout ax,alsss: mov dx,offset mesg1mov ah,09hint 21hmov ah,01int 21hcmp al,'0'jl exitcmp al,'0'jg exitsub al,30hmov bx,offset ledxlatmov dx,io8255aout dx,aljmp sssexit:mov ah,4chint 21hcode endsend start;8255行扫描键盘接口,8255CS接288H,PC0-PC3接键盘行ROW0-ROW3,PA0-PA5接键盘列SER0-SER5data segmentio8255a equ 288hio8255c equ 28ahio8255z equ 28bhkey db 37h,38h,39h,41h,54h,52hdb 34h,35h,36h,42h,53h,4dhdb 31h,32h,33h,43h,48h,4chdb 30h,46h,45h,44h,58h,4ehdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlp0: mov dx,io8255z ;端口指向控制寄存器mov al,90h ;1001000方式0,C输出,A输入mov di,0 ;mov si,0 ;lp1: mov al,0mov dx,io8255c ;C输出全0 行值out dx,almov dx,io8255a ;A读入列值in al,dxand al,00111111bcmp al,00111111b ;是否有键按下jz lp1 ;同je,=转移,ZF=1call delay;有键按下,则A0到A3逐位变换仅有一位为0的行值后读取列值,不全为1的确定键值mov ah,0fehmov cx,4BCA: mov al,ahmov dx,io8255cout dx,almov dx,io8255ain al,dxand al,0fhcmp al,0fhjnz realy ;,即有键按下,确定键值rol ah,1 ;左移,ror 右移loop BCAjmp lp1;mov bl,alrealy:push axmov dx,io8255ain al,dxnopnopnopand al,0fhcmp al,0fhjnz realy ;!= 转移,同jnepop ax;mov cx,4 ;辅助设备输出;mov al,bll4: mov cx,6lp4: shr al,1 ;右移jnc lp2 ;前次操作无进位转移,cf=0inc si ;+1loop lp4lp2: mov cx,4 ;控制台输入/输出mov al,ahlp20: shr al,1jnc lp3inc diloop lp20lp3: mov bx,dimov al,6mul bl ;无符号数乘法->axadd ax,sidisp: mov bx,offset keyxlatmov ah,2int 21hjmp lp0exit: mov ah,4chint 21hdelay proc farepush cxmov cx,20hL1: loop L1pop cxretdelay endpcode endsend start;8255交通灯控制,8255CS接288-28FH,PC0-PC7接L0-L7 data segmentio8255c equ 28Ahio8255z equ 28Bhdata endsstack1 segment para stackstack1 endscode segmentassume cs:code,ds:data,ss:stack1start: mov ax,datamov ds,axmov dx,io8255zmov al,90hout dx,allop: mov dx,io8255cmov al,00100001b ;南北绿,东西红out dx,almov cx,20000de1: mov di,9000de0: dec dijnz de0loop de1 ;mov cx,2000 长延时mov bx,6e1: mov al,10000001b ;。

实验一、LED显示控制、82C55A并行接口数码管显示控制实验

实验一、LED显示控制、82C55A并行接口数码管显示控制实验
延时 计数器==0 计数器=8
返回
从上->下框图
从上->下框图
接口技术实验指导书
计数器 0FE减H 左1 移一位
赋予 TEMP TEMP 取反 TEMP 输 出 到 IO 地址延时
计数器==0
计数器=8
返回
四 、程序代码
录入程序时,请特别注意”1”与英文字母”l”的区别,文件的扩展名为 C,即文件名一定是??-??.C。 在每个源程序的开头必须加上如下的注解,并按各人实际填写。
void delay1()
{ int i,j,a=0; for (i=1;i<=5000;i++)
{ for (j=1;j<=10000;j++) { a=a+0; }
} return; }
//延时
接口技术实验指导书
将 PCIcard.h 与 上 述 的 C 源 程 序 存 放 在 同 一 目 录 下 ,
} err=getPCIbase0(); iobase0=iobase0&0xfffc;
//从 PCI 配置空间读入的与地址空间有关的数据其 bit 0 位为 1,
printf("IOBase0=%xH\n",iobase0);
//表明此空间为 IO 空间参与 PCI 总线地址译码
err=getPCIbase1(); iobase1=iobase1&0xfffc; printf("IOBase1=%xH\n",iobase1); err=getPCImembase1(); err=getPCImembase0(); membase0=membase0+membase1<<16;

8255的使用

8255的使用

实验八可编程并行接口芯片8255A的使用2一、实验目的了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。

二、实验设备(1)显示器、鼠标、键盘各一件;(2)QTH-2008PC 32位微机教学实验仪一套。

三、实验说明1、8255A的内部结构:(1)数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。

输入输的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。

(2)三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。

B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。

C端口包含一个8位数据输出锁存器及缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。

(3)A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。

方式控制字的高5位决定A组工作方式,低3位决定B 组的工作方式。

对C口按位复位命令字可对C口的每一位实现置位或复位。

A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。

(4)读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。

2、8255A的工作方式:方式0—基本输入输出方式;方式1—选通输入输出方式;方式2—双向选通输入输出方式。

3、8255A的控制字:图1 8255A方式控制字图2 C口按位置位/复位控制字四、实验原理图图3 可编程并行接口8255电路五、实验内容I/O输入输出实验:利用8255的A口读取开关状态、B口把状态送发光二极管显示。

六、实验步骤(1)实验连线该模块的WR、RD分别连到PC104总线接口模块的IOWR、IORD。

该模块的数据(AD0~AD7)、地址线(A0~A7)分别连到PC104总线接口模块的数据(D0~D7)、地址线(A0~A7)。

8255并行接口流水灯显示实验

8255并行接口流水灯显示实验

※※※※※※※※※※※※※※※※※※※※※※※※微机原理课程设计报告书课题名称 8255 并行接口流水灯显示实验姓名学号院、系、部物理与电信工程系专业指导教师一、设计任务及要求:设计任务:流水灯显示实验。

编写程序,使8255 的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。

要求:指导教师签名:2009年6月8日二、指导教师评语:指导教师签名:2009 年6月8 日三、成绩验收盖章2009年6 月8日8255 并行接口流水灯显示实验一、设计目的1. 学习并掌握8255 的工作方式及其应用;2. 掌握8255 典型应用电路的接法。

二、设计要求流水灯显示实验。

编写程序,使8255 的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。

三、电路及连线设计并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。

CPU 和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255 的内部结构及引脚如图2-6-1 所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2-6-2所示图2-6-1 8255内部结构及外部引脚图(a)工作方式控制字(b)C口按位置位/复位控制字图2-6-2 8255控制字格式图2-6-5 8255流水灯实验接线图四、使用说明使8255的A口和B口均为输出,数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示,D15~D8 与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。

8255输入输出知识要点

8255输入输出知识要点

8255输入输出知识要点8255输入输出是指使用8255芯片进行输入和输出操作的技术。

8255芯片是一种通用输入输出设备,可用于控制和监测外部设备。

本文将介绍8255输入输出的原理、应用和特点。

一、8255芯片的原理8255芯片是一种具有三个8位双向并行端口的设备,分别称为PortA、PortB和PortC。

PortA和PortB可以用作输入端口或输出端口,而PortC的8位则用作控制信号。

通过对PortC的控制,可以实现输入输出的选择和控制。

8255芯片的输入和输出方式有两种:模式0和模式1。

模式0是将PortA和PortB分别设置为输入和输出端口,而模式1则是将PortA设置为输入端口,PortB设置为输出端口。

二、8255芯片的应用1. 控制外部设备:8255芯片可以与各种外部设备连接,如LED显示器、数码管、键盘等。

通过对PortA和PortB的输入输出控制,可以实现对外部设备的控制和监测。

2. 数据采集和传输:8255芯片可以将外部设备采集到的数据输入到计算机中,也可以将计算机处理后的数据输出到外部设备中。

这在工业自动化和科学实验中非常常见。

3. 并行通信:8255芯片可以作为并行通信接口的一部分,实现计算机和外部设备之间的高速数据传输。

4. 扩展IO端口:由于计算机的IO端口有限,当需要连接更多的外部设备时,可以使用8255芯片扩展IO端口,从而实现更多的输入输出功能。

三、8255芯片的特点1. 灵活性强:8255芯片可以根据需要配置为不同的输入输出模式,适应各种应用场景。

2. 高速传输:8255芯片支持高速数据传输,可以满足对数据传输速度要求较高的应用。

3. 兼容性好:8255芯片与多种外部设备兼容,可以与各种通信协议和设备进行连接。

4. 易于编程:8255芯片的控制信号可以通过编程来实现,编程语言可以是汇编语言或高级语言。

5. 成本低廉:8255芯片是一种低成本的通用IO设备,适用于大规模生产和广泛应用。

platinum 8255c参数

platinum 8255c参数

platinum 8255c参数
Platinum 8255C是一款集成电路芯片,常用于工业控制和数据
采集应用。

它具有多种功能和参数,让我们来逐个了解一下。

1. 输入/输出,Platinum 8255C具有24个可编程的输入/输出
端口,这些端口可以用于连接外部设备和传感器,以实现数据采集
和控制操作。

2. 工作电压,通常情况下,Platinum 8255C的工作电压范围
为3V至5V,这使得它可以与多种不同的设备和电路兼容。

3. 工作模式,Platinum 8255C支持三种工作模式,包括I/O
端口、工作方式0和工作方式1。

这些模式可以根据具体的应用需
求进行配置,以实现不同的功能。

4. 数据传输速率,Platinum 8255C的数据传输速率取决于具
体的工作频率和模式设置,通常可以达到较高的速率,以满足实时
数据采集和控制的需求。

5. 温度范围,Platinum 8255C可以在较广的温度范围内工作,
通常在-40°C至85°C之间,这使得它适用于各种环境条件下的工业应用。

总的来说,Platinum 8255C是一款功能强大的集成电路芯片,具有丰富的输入/输出端口、灵活的工作模式、高速的数据传输能力和广泛的工作温度范围,适用于各种工业控制和数据采集应用。

希望这些信息能够帮助你更好地了解Platinum 8255C的参数和特性。

单片机实验指导书

单片机实验指导书

第一章DVCC-52196JH单片机仿真实验系统简介第一节DVCC系列单片机仿真实验系统性能§ 1 . 1 系统性能指标1.仿真、实验相结合。

2.实验模块化结构,互不影响,通过连线又可将各模块有机结合。

3.实验内容设置丰富、合理,满足教学大纲要求。

4.每项实验连线方便,既能满足学生动手能力愿望,又能充分发挥学生的创新能力,提高教学实验的质量和效率。

5.自带集成调试环境,Win9X/NT软件平台,含:源程序库、芯片资料库、原理图库、元器件位置图库、实验说明、动态调试工具库。

6.提供源程序编辑、汇编、链接。

7.电路具有过压保护,确保系统安全、可靠工作。

8.整机采用热风整平工艺基板、波峰焊接,实验连接接口采用圆孔插座,整机可靠性好。

9.自带EPROM写入器,可对27128、2764EPROM进行写入。

10.自带键盘显示器,进口键座,专用彩色键帽,决无按键不可靠现象。

11.系统用串行口、用户用串行口相互独立,在通过RS232与上位机联机状态下,同样可以调试用户串行口程序。

12.系统带有示波器功能,通过RS232口,可将测得的信号显示在上位机的屏幕上。

该系统通过RS232口可连各种上位机,在Win9X/NT软件平台进行仿真开发和实验。

同时系统自带键盘显示器,无须任何外设也能独立工作,支持因陋就简建立单片机实验室。

系统提供实验程序库,均放在系统光盘上,可直接使用。

同时全部实验程序机器码已固化在EPROM中,作为用户程序。

在进入实验前,需将该EPROM中的程序(在固化区)传送到仿真RAM区,以便以单步、断点、连续等方式运行程序。

§ 1.2 系统提供的主要实验项目如下:一、MCS—51部分软件实验1、清零程序实验 6、字符串查找并统计相同字符串个数2、拆字程序实验 7、双字节乘法程序3、拼字程序实验 8、多分支程序设计4、数据块传送实验 9、定时/计数器实验5、数据排序实验 10、电脑时钟实验二、MCS—51部分硬件实验1、8031单片机P3、P1口应用 11、步进电机控制2、工业顺序控制 12、直流电机控制3、并行I/O口8255应用 13、电子音响4、简单I/O口输入、输出扩展 14、继电器控制5、A/D转换0809应用 15、数据存贮器扩展和程序存贮器扩展6、D/A转换0832应用 16、8031串行口应用实验(一)—双机通信实验7、串并转换实验 17、8031串行口应用实验(二)—与PC机通信8、定时计数器8253A应用 18、温度测量实验(5G14433应用)9、可编程键盘显示8279A应用 19、压力测量实验10、打印机接口应用对DVCC—××JH+机型增加下列四个扩展实验一、128×64液晶显示实验二、16×16LED点阵显示实验三、语音录放实验四、IC卡读写实验§ 1.3 实验系统主要机型如下:DVCC—52JH(JH+) 51实验、仿真DVCC—52196JH(JH+) 51、196实验、仿真DVCC—5286JH(JH+) 51实验、仿真,8088实验DVCC—598JH(JH+) 51、196实验、仿真,8088实验第二节 MCS—51实验系统安装与启动§ 2.1 MCS51实验系统安装与启动1. DVCC系列实验系统在出厂时均为51状态对DVCC—52196JH机型:SK1位1—5置ON位置,位6—10置OFF对DVCC—5286JH和DVCC—598JH机型:a.SK1位1—5置ON,位6—10置OFF;b.SK2位1—2置ON;c.SK3置ON;d.SK4置OFFe.卧式KBB置51、96位置,立式KBB1开关置51、88位置(只对DVCC—598JH/JH+);f.DL1—DL4连1、22. 如果系统用于仿真外接用户系统,将40芯仿真电缆一头插入系统中J6插座,另一头插入用户系统的8051CPU位置,注意插入方向,仿真头上小红点表示第一脚,对应用户8051CPU 第一脚。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O 口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

1)与CPU连接部分
根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。

由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C 口及控制寄存器,故地址线为两根A0~A1。

此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。

各信号的引脚编号如下:
(1)数据总线DB:编号为D0~D7,用于8255与CPU传送8位数据。

(2)地址总线AB:编号为A0~A1,用于选择A、B、C口与控制寄存器。

(3)控制总线CB:片选信号、复位信号RST、写信号、读信号。

当CPU 要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。

2)与外设接口部分
根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。

各通道的引脚编号如下:
(1)A口:编号为PA0~PA7,用于8255向外设输入输出8位并行数据。

(2)B口:编号为PB0~PB7,用于8255向外设输入输出8位并行数据。

(3)C口:编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。

3)控制器
8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。

如图7.5所示,相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:
(1)A组控制器:控制A口与上C口的输入与输出。

(2)B组控制器:控制B口与下C口的输入与输出。

8255管脚
特性
(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.
(2)具有24个可编程设置的I/O口,即3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4
位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.
引脚功能
RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.
RD:读信号线,当这个输入引脚为低跳变沿时,即/RD产生一个低脉冲且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低跳变沿时,即/WR产生一个低脉冲且/CS=0时,允许CPU将数据或控制字写入8255。

D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

8255具有3个相互独立的输入/输出通道端口,用+5V单电源供电,能在以下三种方式下工作。

方式0————基本输入输出方式;方式1————选通输入/出方式;方式2————双向选通输入/输出方式;
PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一
个8位的数据输入锁存器。

工作于三种方式中的任何一种;
PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的
输入输出缓冲器。

不能工作于方式二;
PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一
个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位
的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B
配合使用,可作为控制信号输出或状态信号输入端口。

'不能工作于方式一
或二。

A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.
当A1=0,A0=0时,PA口被选择;
当A1=0,A0=1时,PB口被选择;
当A1=1,A0=0时,PC口被选择;
当A1=1.A0=1时,控制寄存器被选择.
编程模型
以下是程序及原理图,有不好的地方请见谅。

#include<reg52.h>
#include<absacc.h>
typedef unsigned intuint;
typedef unsigned char uchar;
#define com8255 XBYTE[0x7fff]
#define PA8255 XBYTE[0x7cff]
#define PB8255 XBYTE[0x7dff]
#define PC8255 XBYTE[0x7eff]
uchar code scancode[3]={0xfe,0xfd,0xfb};
uchar code ledlight[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar temp;
void delay(uinti)
{
uint j;
while(i--)
{
for(j=0;j<125;j++)
;
}
}
void init8255(void)
{
com8255=0x82;
}
void scan()
{
uchar tem;
PC8255=0x00;
tem=PB8255;
if(~tem)
{
delay(10);
PC8255=0x00;
tem=PB8255;
if(~tem)
PC8255=scancode[0]; tem=PB8255;
if(~tem)
{
switch(tem)
{
case 0xfe:temp=0;break; case 0xfd:temp=3;break; case 0xfb:temp=6;break; case 0xf7:temp=9;break;
}
while(~tem)
{
PC8255=scancode[0]; tem=PB8255;
}
}
PC8255=scancode[1];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case 0xfe:temp=1;break; case 0xfd:temp=4;break; case 0xfb:temp=7;break; case 0xf7:temp=10;break;
}
while(~tem)
{
PC8255=scancode[1]; tem=PB8255;
}
}
PC8255=scancode[2];
tem=PB8255;
if(~tem)
{
switch(tem)
{
case 0xfe:temp=2;break; case 0xfd:temp=5;break; case 0xfb:temp=8;break; case 0xf7:temp=11;break;
}
while(~tem)
{
PC8255=scancode[2]; tem=PB8255;
}
}
}
}
void display()
{
PA8255=ledlight[temp];
}
void main()
{
init8255();
while(1)
{
scan();
display();
} }。

相关文档
最新文档