兩個80c51單片機之間怎樣進行串行通信


以前以為串行通信只能是單片機和PC機之間進行通信,昨天無意之中看到一個程序,是單片機和單片機之間進行通信。。這小東西真是神奇啊!昨天弄了很長時間沒弄出來,今天在大神的幫助下終於撥開雲霧見天日了。

案例介紹:

利用單片機a將一段流水燈控制程序發送到單片機b,來控制單片機b的P1口,點亮8位LED燈。

案例分析:

a完成發送,b完成接收。編寫程序設置a,令SM0=0,SM1=1(串行口工作方式1)。設置b,令SM0=0,SM1=1,REN=1,使接收允許。

源程序

1)數據發送程序

 

#include<reg51.h>
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};           //流水燈控制碼
void send(unsigned char dat)            //數據發送程序
{
   	SBUF=dat;                           //將要發送的數據存入發送緩沖器中
	while(TI==0);                       //若發送中斷標志位沒有置1(正在發送數據),就等待
	TI=0;                               //若發送完成,TI自動置1,這里把它清零
}
void delay(void)                        //延時函數
{
	unsigned char m,n;
	for(m=0;m<200;m++)                  //延時約50ms
	for(n=0;n<250;n++);
}
void main(void)
{
	unsigned char i;
	TMOD=0x20;                         //定時器T1工作於方式2(可自動重裝的8位定時器)
	SCON=0x40;                         //串口工作方式1,不允許接收
	PCON=0x00;                         //波特率不倍增
	TH1=0xf4;                          //波特率為2400b/s
	TL1=0xf4;
	TR1=1;                             //啟動定時器T1(T1作波特率的發生器)
	while(1)
	{
		for(i=0;i<8;i++)               //一共8位的流水燈控制碼
		{
			send(tab[i]);              //發送數據
			delay();                   //每50ms發送一次數據
		}
	}
}

 

2)數據接收程序

#include<reg51.h>
unsigned char receive(void)         //數據接收函數
{
	unsigned char dat;
	
	while(RI==0);                   //數據沒有接收完畢時等待接收
	RI=0;                           //接收完畢時清零
	dat=SBUF;                       //將接收緩沖器中的數據存入dat
	return dat;                     //將接收到的數據返回
}
void main(void)
{
	TMOD=0x20;                     //設置定時器T1工作於方式2
	SCON=0x50;                     //串口工作方式1,允許接收數據
	PCON=0x00;                     //波特率不倍增
	TH1=0xf4;                      //波特率為2400b/s
	TL1=0xf4;
	TR1=1;                         //啟動定時器T1
	REN=1;                         //允許接收數據
	while(1)
	{
		P1=receive();              //將接收到的數據送到P1口顯示	
	}
}

把這兩個程序分別燒寫到兩塊板子上,然后用連接線分別連接兩個板子的發送引腳和接收引腳,然后效果就出來了。這只是一個發送一個接受的情況。

 





 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM