一、串口電平標準:
電平標準是與資料的對應關系資料1與資料0的表達方式,是傳輸線纜中認為規定的電壓,
串口常用的電平標準有:
1.TTL電平: +5V表示1,0V表示0
2.RS232電平: -3~ -15V表示1,+3V~+15V表示0
3.RS485電平:兩線壓差 +2 ~ +6V 表示1,-2~ -6V表示0
二、常用通信介面
| 名稱 | 引腳定義 | 通信方式 | 特點 |
|---|---|---|---|
| UART | TXD、RXD | 全雙工、異步 | 點對點通信 |
| I2C | SCL、SDA | 半雙工、同步 | 可掛載多個設備 |
| SPI | SCLK、MOSI、MISO、CS | 全雙工、同步 | 可掛載多個設備 |
| 1-Wire | DQ | 半雙工、異步 | 可掛載多個設備 |
全雙工: 通信雙方可以在同一時刻互相傳輸資料
半雙工: 可以互相傳輸資料 當某一時刻 只能一方傳輸
–
單步: 只能有一方發送到另一方 不能反向傳輸
異步:通信雙方各自約定通信速率
同步:通信雙方依靠一根時鐘線來約定通信速率
三、51單片機的UART
51單片機有一個UART
UART有四種作業模式:
模式0:同步移位暫存器
模式1:8位UART,波特率可變(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可變

SUBF:串口資料快取暫存器,物理上是兩個獨立的暫存器,但占有相同的地址
寫操作時,寫入的是發送暫存器,讀操作時,讀出的是接收暫存器
四、串行口相關暫存器

1.配置作業方式



2.配置波特率加倍

3.配置定時器1
為什么要配置定時器?
51單片機的波特率是以定時器1的溢位率來計算的,定時器溢位32/16次的時間,即為串口傳輸1位的時間,通過改變定時器的初值,就改變了定時器的溢位率,也就改變了波特率,
TMOD &= 0X0F; // 高四位清0 低四位不變
TMOD |= 0X20; // 配置定時器1模式3 8位自動重裝方式
4.使用波特率計算器
選擇定時器1,定時器時鐘12T,8位資料位,波特率及波特率倍速

五、串口發送:
#include "reg52.h"
#include <intrins.h>
unsigned char Data;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UART_Init()
{
SCON = 0x40;
PCON |= 0x80; //使能波特率倍速位SMOD
TMOD &= 0X0F; // 高四位清0 低四位不變
TMOD |= 0X20; // 配置定時器1模式3 8位自動重裝方式
// 配置波特率
TL1 = 0xF4; //設定定時初值
TH1 = 0xF4; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; // 開啟定時器1
}
void UART_Send(unsigned char Byte)
{
SBUF = Byte;
while(TI==0);
TI = 0;
}
void main()
{
UART_Init();
// UART_Send(0x66);
while(1)
{
UART_Send(Data);
Data++;
Delay500ms();
}
}
六、串口接收:
#include "reg52.h"
#include <intrins.h>
unsigned char Data;
void UART_Init()
{
SCON = 0x50;
PCON |= 0x80; //使能波特率倍速位SMOD
TMOD &= 0X0F; // 高四位清0 低四位不變
TMOD |= 0X20; // 配置定時器1模式3 8位自動重裝方式
// 配置波特率
TL1 = 0xF4; //設定定時初值
TH1 = 0xF4; //設定定時器重裝值
ET1 = 0; //禁止定時器1中斷
TR1 = 1; // 開啟定時器1
// 開啟串口中斷
ES = 1;
EA = 1;
}
void UART_Send(unsigned char Byte)
{
SBUF = Byte;
while(TI==0);
TI = 0;
}
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4 // 串口接收
{
if(RI==1)
{
P1 = SBUF; // 接收資料到p1 口
UART_Send(SBUF);
RI = 0; // 軟體復位
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278152.html
標籤:其他
上一篇:STM32下載器設定
下一篇:我們遇到瓶頸了
