一、8255与8051单片机的连接要求: 8255的片选信号CS连到8051的P2.7,端口地址选择信号A1、A0由P2.1、P2.0提供。画出Proteus电路,分析8255的PA、PB、PC及控制口的地址。编程实现8255的PA口按方式0输出,PB口按方式0输入,将PB口外接8个开关,开关的状态通过PA口外接的8个LED灯反映出来。利用Proteus进行仿真。
原理图如下:
C语言代码如下:
#include<reg52.h>
#include <absacc.h>
#define uchar usigned char
#define PORTA 0x7CFF //定义8255 PA口地址
#define PORTB 0x7DFF //定义8255 PB口地址
#define PORTC 0x7EFF //定义8255 PC口地址
#define CADDR 0x7FFF //定义控制口地址
void main(){
XBYTE [CADDR] = 0x82;
while(1){
XBYTE[PORTA] = XBYTE[PORTB];
}
}
?
二、8051串行口采用方式1发送数据给PC,晶振频率11.0592MHz,定时器T1作为波特率发生器,工作在方式2,设置波特率为9600,smod=0,计算T1的初值并给出C语言程序设计, Proteus设计电路并进行仿真。
首先计算SCON和T1的初值:
SCON=01010000=50H
T1=256-11059200/(9600*32*12)=256-3=253=FDH
代码如下:
#include<reg51.h>
code Tab [ ]={ 0x31, 0x32, 0x33,0x34,0x35,0x36,0x37,0x38,0x39};
void send(unsigned char dat ){
SBUF=dat;
while(TI==0);
TI=0;
}
void delay()
{ unsigned int i;
for(i=0;i<30000;i++);
}
void main(void){
unsigned char i;
TMOD=0X20;
SCON=0X50;
PCON=0X00;
TH1=0xFD;
TL1=0xFD;
TR1=1;
while(1){
for(i=0;i<9;i++){
send(Tab[i]);
P1=Tab[i]-0x30;
delay();}
}
}
keil5仿真图:
?protues仿真原理图:
?
|