日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机C51 - 串行通信原理及串口编程实验

發布時間:2023/12/31 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机C51 - 串行通信原理及串口编程实验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、兩種通信方式概念

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; //設置為工作方式1TMOD=0X20; //設置計數器工作方式2PCON=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; //清除發送完成標志位 }



總結

以上是生活随笔為你收集整理的单片机C51 - 串行通信原理及串口编程实验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。