单片机可编程并行接口芯片8255的应用实验

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

单片机可编程并行接口芯片8255的应用实验
一:实验目的和要求
1、掌握中断系统外部中断源的使用方法。

2、掌握延时程序的编程及使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二:设计要求
1、用Proteus软件画出电路原理图,在单片机的外部扩展片外三总线,并通过片外三总线与8255接口。

2、在8255PA口或PB口的某一口线上产生周期500μS的连续方波,接示波器观察波形。

3、在8255PC口的PC0-PC3上接4个按键作输入,PC4-PC7上接4个发光二极管作输出,编程实现发光二极管正确指示按键的状态
三:电路原理
四:流程框图
五:实验结果
六:实验总结
通过本次试验,掌握了如何在单片机外部扩展I/O口,并且如何在程序中使用这些扩展出来的I/O口,为以后的学习和使用打下了一定的基础,存在的问题是在编写程序时不够熟练,需要多练习
七:思考题
1、在8255PC口上外接8个发光二极管,利用8255PC口的置位/复位控制字控制其按某种规律变化
四:流程框图
开始工作方式初始化开定时器
定时器初始化查询计数标志位溢出否
取反输出口A中内容送DPTR
设置C口命令DPTR指向控制位是否
开始DPTR指向C口C口内容送累加器DPTR指向控制位交换累加器内容
高低位累加器中内容送C
开始DPTR指向控制位A中内容送DPTR 定义查表执行次数查表数据送C口调用延时子程序
查询次数完否


修改变量值
1秒延时程序子程序返回
程序清单
ORG 0000H MOV DPTR, #0003H MOV A, #80H MOVX @DPTR, A
MOV DPTR, #0000H MOV A, #0FFH MOVX @DPTR, A
MOV IE, #00H MOV TMOD, #20H SETB TR1
MOV TL1, #06H MOV TH1, #06H LOOP0:JBC TF1, LOOP1 AJMP LOOP0 LOOP1:CPL ACC.0 MOVX @DPTR, A AJMP LOOP0 END
#include<reg52.h>
#include<absacc.h>
#define uchar unsingned char #define uint unsingned int #define COM8255 XBYTE[0X0003] #define PA8255 XBYTE[0X0000] #define PB8255 XBYTE[0X0001] char A;
void main(){
TMOD=0X11;
IE=0;
TH1=0XFF;
TL1=0X06;
PA8255=0XFF;
TR1=1;
A=1;
for( ; ;){
do {} while(!TF1);
A=!A;
if(A==0){
PA8255=0XFE;
TL1=0X06;
TH1=0XFF;
TF1=0;}
if(A==1){
PA8255=0XFF;
TL1=0X06;
TH1=0XFF;
TF1=0;}}}
ORG 0000H
MOV DPTR, #0003H
MOV A, #81H
MOVX @DPTR, A
MOV DPTR, #0002H LOOP: MOVX A, @DPTR
SWAP A
MOVX @DPTR, A
LJMP LOOP
END
#include<reg52.h>
#include<absacc.h>
#define uchar unsingned char
#define uint unsingned int
#define COM8255 XBYTE[0X0003]
#define PA8255 XBYTE[0X0000]
#define PB8255 XBYTE[0X0001]
#define PC8255 XBYTE[0X0002]
void main(){
COM8255=0X81;
PC8255=0XFF;
while(1){
PC8255=PC8255/16+PC8255%16*16;}}
ORG 0000H
LOOP2: MOV DPTR, #0003H
MOVX @DPTR, A
MOV R0, #00H
MOV R1, #10H
LOOP:MOV DPTR, #TABLE
MOV A, R0
MOVC A, @A+DPTR
MOVX @DPTR, A
LCALL DELAY1S
INC R0
DJNZ R1, LOOP
LJMP LOOP2
TABLE:DB 00H,01H,02H,03H,04H,05H,06H,07H
08H,09H,0AH,0BH,0CH,0DH,0EH,0FH DELAY1S:MOV R7, #0A7H
DL1:MOV R6, #0ABH
DL0:MOV R5, #10H
DJNZ R5, $
DJNZ R6, DL0
DJNZ R7, DL1
NOP
RET
END
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define PROTECT XBYTE[0X0003]
#define PA8255 XBYTE[0X0000]
#define PB8255 XBYTE[0X0001] #define PC8255 XBYTE[0X0002] void delay1s();
main()
{uchar n=16;
uchar h=0xfe;
PROTECT=0x80;
while(1)
{PC8255=h;
delay1s();
h=_crol_(h,1);}}
void delay1s(void)
{unsigned char a,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
_nop_(); }
五:实验结果。

相关文档
最新文档