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

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

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

————————————————————————————————作者:————————————————————————————————日期:

一:实验目的和要求

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

#include

#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

#include

#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

#include

#include

#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_(); }

五:实验结果

相关主题
相关文档
最新文档