基于51单片机之间的双向通信(Proteus仿真)

发布时间:2023-01-31  

具体功能实现:

甲单片机通过按键可以控制乙单片机的LED灯,而乙单片机通过按键可以让连接甲单片机的数码管数字自增加一。

使用器件:

AT89C51、按键、排阻、4只LED灯、2片MAX232芯片、COM口(CONN-D9F)、数码管、若干电阻

Proteus仿真原理图:

仿真:

乙机控制甲机的数码管显示:

甲机控制乙机的LED灯:

知识介绍:

Proteus布线

为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。

定时中断系统简图

定时器资源

定时器个数:3个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。

(T0和T1的操作方式是所有51单片机共有的)

中断系统

执行现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序

中断号:

外部中断0 interrupt 0

定时器0 interrupt 1

外部中断1 interrupt 2

定时器中断1 interrupt 3

串口中断 interrupt 4

细节注意

通信双方必须要有相同的波特率,通过发送中断标志和接受中断标志控制发送和接受的进行。

主要代码(C语言)KEIL5实现:

甲单片机:


#include


#define uint unsigned int


#define uchar unsigned char


sbit LED1 = P1^0;


sbit LED2 = P1^3;


sbit K1 = P1^7;


uchar Operation_NO = 0;


uchar code DSY_CODE[]=


{


0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f


};


void Delay(uint x)


{


uchar i;


while(x--)


{


for(i=0;i<120;i++);


}


}


void putc_to_SerialPort(uchar c)


{


SBUF = c;


while(TI == 0);


TI = 0;


}


void main()


{


LED1=LED2=1;


P0 = 0x00;


SCON = 0x50;


TMOD = 0x20;


PCON = 0x00;


TH1  = 0xfd;


TL1  = 0xfd;


TI   = 0;


RI   = 0;


TR1  = 1;


IE   = 0x90;


while(1)


{


Delay(100);


if(K1 == 0)


{


while(K1==0);


Operation_NO=(Operation_NO+1)%4;


switch(Operation_NO)


{


case 0:


putc_to_SerialPort('X');


LED1=LED2=1; break;


case 1:


putc_to_SerialPort('A');


LED1=0;LED2=1;break;


case 2:


putc_to_SerialPort('B');


LED2=0;LED1=1;break;


case 3:


putc_to_SerialPort('C');


LED1=0;LED2=0;break;


}


}


}


}


void Serial_INT() interrupt 4


{


if(RI)


{


RI = 0;


if(SBUF>=0&&SBUF<=9)


P0 = DSY_CODE[SBUF];


else


P0 = 0x00;


}


}




乙单片机:


#include


#define uint unsigned int


#define uchar unsigned char


sbit LED1 = P1^0;


sbit LED2 = P1^3;


sbit K1 = P1^7;


uchar NumX = 0xff;


void Delay(uint x)


{


uchar i;


while(x--)


{


for(i=0;i<120;i++);


}


}


void main()


{


LED1=LED2=1;


SCON = 0x50;


TMOD = 0x20;


PCON = 0x00;


TH1  = 0xfd;


TL1  = 0xfd;


TI   = 0;


RI   = 0;


TR1  = 1;


IE   = 0x90;


while(1)


{


Delay(100);


if(K1==0);


{


while(K1==0);


NumX = (NumX+1)%11;


SBUF = NumX;


while(TI == 0);


TI = 0;


}


}


}


void Serial_INT() interrupt 4


{


if(RI)


{


RI = 0;


switch(SBUF)


{


case 'X': LED1=1;LED2=1;break;


case 'A': LED1=0;LED2=1;break;


case 'B': LED2=0;LED1=1;break;


case 'C': LED1=0;LED2=0;


}


}


}


问题解答:

Q: COM口(CONN-D9N)接线图,如下图所示:


A:

OM口(CONN-D9F和CONN-D9M)该如何接线?

A:

CONN-D9F和CONN-D9M的连接必须交叉,.这样连的结果是一个的发送接另一个的接收,一个的接收接另一个的发送

Q:

单片机串口和MAX232、MAX232之间是如何连接的?

A:

单片机与MAX232的连接都是T接T,R接R;

各自的MAX232与对方连接是交叉的。

Q:

单片机SBUF总线协议图:


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>