天天看點

51單片機簡單的序列槽通訊-1

大學畢業後從事了PLC電氣程式設計工作,但一直熱愛單片機,一直在自學,今天終于對序列槽通訊有了一個簡單的了解,寫篇文章紀念一下,同時也感謝CSDN一直這一來的幫助。

執行個體一,通過單片機A向單片機B發送0-3數字,雙機均循環顯示輸出到P2口的7段數位管上。

電路圖

51單片機簡單的序列槽通訊-1

A機程式

#include<reg51.h>
  #define  uchar  unsigned char
  #define  uint  unsigned int
  char code map[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
	main()
	{
		uchar  i; 	 
		uint j,k;
		TMOD=0x20;      //設定定時器1工作在模式2
		TL1=0xfd;    
		TH1=0xfd;       //根據傳輸的波特率設定定時器1初值9600
		PCON=0x00; 		//不加倍
		SCON=0x50;      //選擇工作方式1,使能收發功能
		TR1=1;          //啟動定時器1
		while(1)
			{ 
			for(i=0;i<4;i++)
			  {     
				SBUF=map[i];             //發送資料
				while(TI==0);    
				TI=0;               //将标志位TI清0
				P2=map[i];            //将發送數取反
				for(j=0;j<12500;j++)
			     {for(k=0;k<10;k++);
				 }     
			  }
			}
	}
           

B機程式

#include<reg52.h>
   unsigned char buf;
    void main(void)
	   {
	   SCON=0x50;	//SM0 SM1 SM2 REN TB8 RB8 TI RI   2#0101 0000 序列槽工作方式1(10位異步通訊);允許接收控制位1,允許接收。
	   PCON=0x00;	//SMOD -  -  -  GF1 GF0 PD TDL   SMOD為波特率選擇位,=0,不加倍;=1,加倍;
	   TMOD=0x20;	//定時器1 工作方式2:8位自動重裝
	   EA=1;
	   ES=1;
	   TL1=0xfd;   //19200 0xfd*2 ;9600  0xfd;4800 0xfa; 2400 0xf4; 1200 0xe8;
	   TH1=0xfd;
	   TR1=1;
	   while(1);
	   }
//序列槽受收到資料,觸發中斷
	   void service() interrupt 4
	   {
	   ES=0;  //關閉序列槽中斷
	   RI=0;  //清零标志位,硬體置1;軟體清0
	   buf=SBUF;
	   P2=buf;
	   ES=1;  //開序列槽中斷
	   }
           

測試結果

51單片機簡單的序列槽通訊-1
51單片機簡單的序列槽通訊-1

繼續閱讀