1. 程式人生 > >序列通訊原理及串列埠程式設計實驗

序列通訊原理及串列埠程式設計實驗

一、兩種通訊方式概念

1.並行通訊

  • 傳輸原理:並行通訊時資料的各個位同時傳送,以位元組為單位並行傳輸
  • 優點:並行通訊速度快,傳輸的資料寬度可以是1~128位,甚至更寬
  • 缺點:並口上導線之間資料同步難處理,佔用引腳資源多
2.序列通訊
  • 傳輸原理:序列通訊的資料是一位一位地址進行傳輸的,在傳輸中每一位資料都佔據一個固定的時間長度。
  • 優點:序列通訊傳輸線少,佔用引腳資源少,成本低,適合遠距離傳送
  • 缺點:速度相對較慢
二、序列通訊方式 1.序列資料通訊模式
  • 單工通訊:資料僅能從一臺裝置到另一臺裝置進行單一方向的傳輸。
  • 半雙工通訊:資料可以從一臺裝置到另一臺裝置進行傳輸,也可以相反方向傳輸,但不能在同一時刻雙向傳輸資料。
  • 全雙工通訊:資料可以在同一時刻從一臺裝置到另一臺裝置進行傳輸,也可以進行相反方向的傳輸,即可以同時雙向傳輸資料。
2.非同步序列通訊方式

       非同步通訊是指資料是以字元為單位i進行傳送的,字元與字元間的傳送是完全非同步的,位與位之間的傳送基本上是同步的。非同步通訊時,資料是一幀一幀傳送的,每幀資料包含有起始位(“0”)、資料位、奇偶校驗位和停止位(“1”),每幀資料的傳送靠起始位來同步。

3.同步序列通訊方式

       同步通訊是指同步傳輸採用字元塊的方式,字元與字元之間、字元內部的位之間都同步,減少了每個字元的控制和錯誤檢測資料位,因而可以具有較高的傳輸速率。

三、串列埠程式設計實驗

1、SCON暫存器工作方式

D7

D6

D5

D4

D3

D2

D1

D0

功能

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

  • RI:接收中斷標誌位——接收結束時,會由硬體置1,向CPU發出中斷請求。(要由軟體復位)
  • TI:傳送中斷標誌位——傳送結束時,會由硬體置1,向CPU發出中斷請求。要由軟體復位)
  • TB8:用來存放傳送的第9位。
  • RB8:用來存放接收的第9位。
  • REN:是序列接收允許位——0時:允許序列接收;1時:禁止序列接收
2、序列口的工作方式

SM0

SM1

方式

說明

波特率

0

0

0

移位暫存器

fosc/12

0

1

1

10位非同步收發(8位資料)

可變

1

0

2

11位非同步收發(9位資料)

fosc/64或fosc/32

1

1

3

11位非同步收發(9位資料)

可變

3、PCON暫存器工作方式

D7

D6

D5

D4

D3

D2

D1

D0

功能

SMOD

-

-

-

-

-

-

-

  • PCON是沒有位定址的,也就是說不能直接操作SMOD要直接操作PCON暫存器。
  • SMOD:是波特率是否加倍的選擇位。——0時:波特率不加倍;1時:波特率加倍。
4、程式碼實現
#include <reg51.h>  
#include <intrins.h>  
#include "array.h"  
#define uint unsigned int  
#define uchar unsigned char  
#define ulong unsigned long 

/*******************************************************************************
* 函式名         :UsartConfiguration()
* 函式功能		   :設定串列埠
* 輸入           : 無
* 輸出         	 : 無
*******************************************************************************/
void UsartConfiguration()
{
	SCON=0X50;			//設定為工作方式1
	TMOD=0X20;			//設定計數器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;			//計數器初始值設定,注意波特率是4800的
	TL1=0XF3;
	ES=1;				//開啟接收中斷
	EA=1;				//開啟總中斷
	TR1=1;				//開啟計數器
}

void main()
{
	UsartConfiguration();
	while(1)
	{
	}
}


/*******************************************************************************
* 函式名         :Delay(unsigned int i)
* 函式功能		   : 延時函式
* 輸入           : 無
* 輸出         	 : 無
*******************************************************************************/
void Usart() interrupt 4
{
	unsigned char receiveData;

	receiveData=SBUF;	//出去接收到的資料
	RI = 0;				//清除接收中斷標誌位
	SBUF=receiveData;	//將接收到的資料放入到傳送暫存器
	while(!TI);			//等待發送資料完成
	TI=0;				//清除傳送完成標誌位
}