【51单片机】 系统扩展和串行通信

【51单片机】 系统扩展和串行通信,第1张

【51单片机】 系统扩展和串行通信

一、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
#include 
#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
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仿真原理图:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存