㈠ 52單片機與晶振電路直接的通訊方式是什麼
52單片機與晶振電路直接的通訊方式是口對口並行通信。根據查詢相關公開信息,口對口並行通信,利用單片機的口線直接相連,加上1~2條握手信號線,這種方式的特點是通信速度快,1次可以傳輸4位或8位,甚至更多,但需要佔用大量的口線。
㈡ 單片機的幾種傳輸方式的總結
學習了51單片機以及STM32後總結下單片機與外設或者上位機通訊的幾種傳輸方式
串口、COM口是指的物理介面形式(硬體)。而TTL、RS-232、RS-485是指的電平標准(電信號)
串列通信:指數據一位一位順序傳送
串列介面:簡稱串口(COM口)
並行通信:一組數據的各數據位在多線上同時被傳輸
並行介面:一種介面,各數據位同時被傳輸,傳輸速度快,效率高,一般用於MCU
串列通信分為:
單工:數據單項傳送
半雙工:數據能雙向傳送但不能同時
全雙工:數據能同時雙向傳送
通用的、及支持同步也支持非同步的接收、發送「模塊」,在晶元內部,與SPI、I2C一起構成單片機的匯流排「枝幹」,對於串口,串口通信指串口按位(bit)發送和接收位元組,盡管比按位元組(byte)的並行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。
串列通信技術標准EIA-232/485也就是以前所稱的RS-232/485。
232是PC機與通信工業中應用最廣泛的一種串列介面,RS232單端通信,傳輸距離可達15米,最高速率20Kbps。
RS485傳輸速率為10Mbps,最大傳輸距離1219米,,採用二線制時可實現真正的多點雙向通信,而采
用四線連接時只能實現點對多點通信,無論四線還是二線連接方式匯流排上可接多達 32 個設備。
串列通信傳輸速率用於說明傳輸的快慢。在串列通信中,數據是按位進
行傳送的,因此傳輸速率用每秒鍾傳送格式位的數目來表示,稱之波特率
(band rate)。每秒傳送一個格式位就是 1 波特。常用的波特率有:4800、
9600、19200、115200 波特。
串口三個腳:TX、RX、GND
IIC匯流排是一種兩線式串列匯流排,支持多主控,其中任何能夠進行發送和接收的設備都可以成為主匯流排,一個主控能夠控制信號的傳輸和時鍾頻率,當然在任何時間點上只能有一個主控。IIC匯流排是由數據線SDA和時鍾SCl構成的串列匯流排,可發送和接收數據,在CPU與被控IC之間,IC與IC之間進行雙向傳送,最高傳送速率100Kbps,各種被控制電路均並聯在這條匯流排上,每個設備模塊都有唯一的地址,IIC匯流排上的每一個設備模塊既是主控器或被控器,又是發送器或接收器,這取決於你要實現的功能是怎樣的。
CPU發出的控制信號分為地址碼和控制量兩部分
IIC匯流排傳輸過程中有三種信號:起始信號,終止信號,應答信號。
起始信號:SCL 為高電平時,SDA 由高電平向低電平跳變,開始傳送數據;
終止信號:SCL 為低電平時,SDA 由低電平向高電平跳變,結束傳送數據;
應答信號:接收數據的 IC 在接收到 8bit 數據後,向發送數據的 IC 發出
特定的低電平脈沖,表示已收到數據。CPU 向受控單元發出一個信號後,
等待受控單元發出一個應答信號,CPU 接收到應答信號後,根據實際情
況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷為受控單
元出現故障。
SPI允許單片機和外圍設備或者單片機之間高速同步數據傳輸,SPI可以有主機和從機模式之選,通信的主從機之間通過移位寄存器同時交換數據。目前自己用的以主機模式居多。SPI需要四線:SS,MISO,MOSI,SCK。
通信過程:在設置好SPI的工作模式:包括SCK頻率(數據傳輸速率),工作速度,主從模式,以及數據接收發送對應的時鍾極性。在主模式下,將SS拉低表示通信的開始,然後通過向SPI數據寄存器中寫入一位元組的數據後自動啟動時鍾SCK開始進行一次通信,通信完成後會產生相應的中斷標志,標志一個位元組數據的傳送完成。通信完成後將SS腳拉高,表示通信過程已經結束。
注意SS引腳的設置:當設置為從機模式時,SS引腳應設置為輸入,拉低的時候SPI才能起作用,拉高的話是消極的SPI模式;在主機模式下,SS引腳可以設置,一般應設置為輸出,如果設置為輸入的話應保持為高,否則將不能進行正常的主機模式操作。
單片機通訊方式
㈢ 匯編語言實現兩台單片機並行通信
通信 是 並行的,不需要協議啥的,簡單收發就行。
這就太簡單了。
如果是單工的,用一個 8 位的並行口,互連即可。
比如甲機 P2 連接到乙機的 P1。
甲機的 P1 接上八個撥動開關,乙機的 P2 接上八個 LED。
兩台單片機,都是 P1 輸入、P2 輸出。程序是相同的,如下:
ORG 0000H
MOV P2, P1
SJMP 0000H
END
這就實現了《並行的、簡單收發》。
㈣ 51單片機點亮流水燈是什麼通信方式
語言知識點:
1、sbit:
sbit 變數名=地址名; //在給某個引腳取名的時候
登錄後復制
2、#typedef使用:重新定義一些常用的關鍵詞
typedef unsigned char u8; //使u8可定義無符號字元型
typedef unsigned int u16; //使u16可定義無符號整型
登錄後復制
3、#define
#define A P0 //用A來定義成P0
登錄後復制
4、延時函數:可通過設置斷點(在左側行數欄雙擊)進行debug調試查看具體延時時間
void delay(u16 i) //i為1時,大約延時10us
{
while(i--);
}
登錄後復制
5、循環左移右移函數(包含在intrins.h庫函數中)
_crol_(a,b); //循環左移函數,a是左移值,b是左移的位數
_cror_(a,b); //循環右移函數,a是右移值,b是右移的位數
登錄後復制
51單片機簡單實驗
51單片機引腳圖
P3口第二功能各引腳功能定義:
P3.0:RXD串列口輸入
P3.1:TXD串列口輸出
P3.2:INT0外部中斷0輸入
P3.3:INT1外部中斷1輸入
P3.4:T0定時器0外部輸入
P3.5:T1定時器1外部輸入
P3.6:WR外部寫控制
P3.7:RD外部讀控制
1、點亮led燈
這里我的開發板上led燈當引腳輸出為低電平時點亮,故選取了P2.0引腳使其輸出低電平(此處可根據自己led連接或者板上電路來設置高低電平)
#include"reg52.h"
sbit led=P2^0; //取P2.0變數名為led
void main()
{
while(1)
{
led=0;
}
}
登錄後復制
2、閃爍led燈
閃爍程序上即為在點亮後進行延時一段時間在熄滅再延時,執行如此循環,故可在上一個程序中修改為:
#include"reg52.h"
typedef unsigned int u16;
sbit led=P2^0; //取P2.0變數名為led
void delay(u16 i) //構建延時函數
{
while(i--);
}
void main()
{
while(1)
{
led=0;
delay(50000);
led=1;
delay(50000);
}
}
登錄後復制
3、led流水燈
#include"reg52.h"
#include"intrins.h"
#define led P2 //將P2定義為led
typedef unsigned int u16;
typedef unsigned char u8;
void delay(u16 i) //構建延時函數
{
while(i--);
}
void main()
{
u8 i;
led=0xfe; //1111 1110
delay(50000); //延時450ms
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,1);
delay(500000);
}
}
}
登錄後復制
4、蜂鳴器
無源蜂鳴器(壓電式蜂鳴器):左邊第一張圖即有綠色電路板,由多諧振盪器、壓電蜂鳴片等組成,接通電源後(1.5v~15v直流工作電壓),多諧振盪器起振,輸出1.5~2.5kHZ的音頻信號,發聲。需要形成脈沖控制,改變單片機輸出波形的頻率(脈沖周期),就可以控制蜂鳴器音調,產生不同音色、音調的聲音;改變輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小
有源蜂鳴器(電磁式蜂鳴器):下部無綠色電路板,內部含有振盪器電路,接通電源後,振盪器產生音頻信號電流通過電磁線圈,使電磁線圈產生磁場,周期性振動地發聲。可通過單片機高低電平直接控制
ULN2003:高耐壓、大電流達林頓陳列,由七個npn達林頓管組成(com接VCC,E接GND)
這里我的開發板上蜂鳴器連接引腳P1^5故可設置如下程序:
#include"reg52.h"
typedef unsigned int u16;
sbit beep=P1^5;
void delay(u16 i) //延時函數
{
while(i--);
}
void main()
{
while(1)
{
beep=~beep; //取反
delay(10); //延時100us,不同延時頻率不同聲音不同
}
}
登錄後復制
6、中斷
6.1、中斷的定義
CPU在處理某一事件時,發生另一事件B請求CPU迅速去處理(中斷發生),CPU暫時中斷當前的工作,轉去處理需要迅速處理的事件(中斷響應和中斷服務),待中斷事件處理完成後繼續處理原事件(中斷返回)
引起CPU中斷的根源稱為中斷源,CPU暫時中斷原來的事件轉向中斷事件,處理完成後回到原來的地方(即斷點),實現中斷功能的部件稱為中斷系統。
中斷的優點:分時操作:CPU可以分時為多個I/O設備服務,提高計算機的利用率、實時響應:CPU能夠及時處理應用系統的隨機事件,實時性大大增強、可靠性高:CPU具有處理設備故障及掉電等突發事件能力,使可靠性提高、解決了快速主機預慢速I/O設備的數據傳輸問題
6.2、中斷源、中斷寄存器和中斷優先順序
89C51的中斷系統有5個中斷源,2個中斷優先順序,可實現二級中斷嵌套。五個中斷源如圖由上至下對應為外部中斷0、定時器0、外部中斷1、定時器1、串口中斷,其中斷優先順序由上至下遞減;TCON中的IT0和IT1可決定INT0和INT1低電平有效還是下降沿有效;對應的中斷標志位IE0、TF0(定時器0溢出)、IE1、TF1(定時器1溢出)為1時觸發中斷,當RX或TX串列口接受或者發送完成RI或TI置1觸發中斷;
CPU對中斷系統所有中斷及某個中斷源的開放和屏蔽是由中斷寄存器IE控制的。
EX0(IE.0):外部中斷0允許位;ET0(IE.1):定時/計數器T0中斷允許位;EX1(IE.2):外部中斷1允許位;ET1(定時/計數器T1中斷允許位);ES(IE.4)串列口中斷允許位;EA(IE.7):CPU中斷總允許位
TCON中斷請求標志。
IT0(TCON.0),外部中斷0觸發方式控制位。當IT0=0時,為電平觸發方式;當IT0=1時,為邊沿觸發方式(下降沿有效)。
IE0(TCON.1),外部中斷0中斷請求標志位。發生中斷後標志位置一。
IT1(TCON.2),外部中斷1觸發方式控制位。
IE1(TCON.3),外部中斷1中斷請求標志位。
TF0(TCON.5),定時/計數器T0溢出請求標志位。
TF1(TCON.7),定時/計數器T1溢出中斷請求標志位。
同一優先順序的中斷請求不止一個時,則有中斷優先順序的排隊問題。其排列如圖所示:
中斷源
正在進行的中斷過程不能被新的同級或低級優先順序的中斷請求所中斷,進行的低優先順序中斷服務可被高優先順序中斷請求所中斷。
6.3、中斷處理過程
中斷響應條件:
中斷源有中斷請求;
此中斷源的中斷標志位為1;
CPU開中斷(即EA=1)。
使用中斷,需要做什麼
想使用的中斷是哪個?選擇而響應的中斷號;
希望觸發的條件是什麼?
希望在中斷之後干什麼?
以外部中斷0為例
EA=1; //打開總中斷開關
EX0=1; //打開外部中斷0
IT0=0/1; //設置外部中斷的觸發方式,0為低電平1為下降沿
登錄後復制
中斷服務函數
void int0 () interrupt 0 using 1 //int0為函數名稱,() interrupt為固定格式,0位中斷號,using1可不寫
{
do anything that you want
}
登錄後復制
7、外部中斷
51單片機中斷系統結構
P3.0:RXD串列口輸入
P3.1:TXD串列口輸出
P3.2:INT0外部中斷0輸入
P3.3:INT1外部中斷1輸入
P3.4:T0定時器0外部輸入
P3.5:T1定時器1外部輸入
外部中斷實驗:
將開關連接至單片機的P3.2口(外部中斷0),按下開關使得連接至P2.0的小燈點亮狀態進行取反。
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit key = P3 ^ 2; //定義按鍵key
sbit led = P2 ^ 0; //定義P2.0為led口
void delay(u16 i) //構建延時函數
{
while (i--);
}
void Int0Init() //構建中斷初始化函數
{
EA = 1;
EX0 = 1;
IT0 = 1;
}
void main()
{
Int0Init(); //設置外部中斷0
while (1);
}
void Int0() interrupt 0 //中斷響應程序
{
delay(1000); //延時消抖
if (key == 0)
led = ~led;
}
登錄後復制
8、定時器和計數器中斷
8.1、CPU時序的有關知識
振盪周期:為單片機提供定時信號的振盪源的周期(即為晶振周期或外加振盪周期)(一般外界晶振為12M,一個振盪周期為1/12us)
狀態周期:2個振盪周期為1個狀態周期,用S表示。(若為12m晶振,一個狀態周期為1/6us)
機器周期:1個機器周期含6個狀態周期,12個振盪周期。(若為12m晶振,一個機器周期=12x1/12m,即為1us)
指令周期:完成1條指令所佔用的全部時間,以機器周期為單位。(若為12m晶振,1~4us)
8.2、51單片機定時器/計數器
8.2.1 需要了解的知識
51單片機有兩組定時器/計數器,因為既可以定時,又可以計數。
定時器/計數器和單片機CPU是相互獨立的。定時器/計數器工作過程不需要CPU的參與。可以增加單片機的效率,一些簡單的重復加1的工作可以交給定時器/計數器處理。同時實現精確定時的作用。
51單片機中的定時器/計數器是根據機器內部的時鍾或者是外部的脈沖信號對寄存器的數據加1。
8.2.2 工作原理
定時/計數器實際上是一個加1的計數器。它隨著計數器的輸入脈沖進行自加1,也就是每來一個脈沖計數器就自動加1,當加到計數器全為1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使得相應的中斷標志位置一,同CPU發出中斷請求。
可見,由溢出時計數器的值減去計數器的初值才是加1計數器的值。
定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器THx和TLx組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動停止及設置溢出標志。
8.2.3、定時/計數器的控制
定時/計數器工作由兩個特殊功能寄存器控制。TMOD用於設置其工作方式;TCON用於控制其啟動和中斷申請。
(1)工作方式寄存器TMOD
工作方式寄存器TMOD用於設置定時/計數器的工作方式,低四位用於T0,高四位用於T1。格式如下:
GATE是門控位,用於控制定時器的啟動是否受中斷源的影響。GATE位0時,只要軟體使TCON中的TR0和TR1位1,就可以使定時器/計數器工作;GATE=1時,需要外部中斷INT0/1也為高電平時,TR0或TR1為1,才能啟動定時/計數器工作。
C/T:定時/計數模式選擇位。C/T=0為定時模式;C/T=1為計數模式。
M1 M0:工作方式設置位。定時/計數器有四種工作方式。(一般使用方式1和方式2)
(2)控制寄存器TCON
TCON的高4位用於控制定時/計數器的啟動和中斷。格式如下:
TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬體自動置1,CPU響應中斷後TF1由硬體自動清0。T1工作時,CPU可隨時查詢TF1的狀態,TF1可用作查詢測試的標志。TF1也可用軟體置1或清0。
TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟體置1或清0.
TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。
TR0(TCON.4):T0運行控制位,其功能與TR1類同。
8.3、定時/計數器的工作方式
1、方式0
方式0位13位計數器,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0的標志,向CPU發出中斷請求。
定時器模式有:N=t/Tcy,定時器的初值還可以採用計數個數直接取補法獲得
計數器初值計算公式為:X=2^13-N,計數模式時計數脈沖是T0引腳上的外部脈沖獲得
門控位GATE具有特殊的作用。當GATE=0時,經反向後使或門輸出為1,此時僅由TR0控制與門的開啟,與門輸出1時,控制開關接通,計數開始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外部中斷引腳信號和TR0共同控制。
2、方式1
方式1的計數位數是16位,由TL0作為低8位,TH0作為高8位,組成了16加1計數器。
計數個數與計數初值的關系為:X=2^16-N
3、方式2
方式2位自動重裝初值的8位計數方式。(只要低8位計滿就會重新裝載)
計數與計數初值的關系為:X=2^8-N,適合於用作較精確的脈沖信號發生器。
4、方式3
方式3隻適用於定時/計數器T0,定時器T1處於方式3時相當於TR1=0,停止計數。
工作方式3將T0分成兩個的8位計數器TL0和TH0。
使用定時/計數器該做哪些工作:
對TMOD賦值,以確定T0和T1的工作方式。
計算初值,並將其寫入TH0、TL0或TH1、TL1。
中斷方式時,對EA賦值,開放定時器中斷。
使TR0或TR1置位,啟動定時/計數器定時或計數
計數器初值的計算
機器周期也就是完成一個基本操作所需要的時間。
機器周期=1/單片機的時鍾頻率
51單片機的時鍾頻率是外部時鍾的12分頻。也就是說當外部晶振的頻率輸入到單片機裡面的時候要進行12分頻。當使用12M晶振,那麼單片機內部的時鍾頻率就是12/12MHZ,機器周期=1us
定時1ms的初值是多少呢?1ms=1000us。也就是要數1000個數,初值=65535-1000+1(因為實際上計數器記到66636才溢出)=64536=FC18H
8.4、定時器中斷常式
時間小燈間隔1s的閃爍,連接led至P2^0口,使用定時器0進行定時
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led = P2 ^ 0;
void time0Init()
{
TMOD = 0x01; //定時器0門控位設置為0,設置為定時器模式,計數模式1
TH0 = 0xFC; //設置定時器初值
TL0 = 0x18;
EA = 1; //開啟總中斷
ET0 = 1; //打開定時器0中斷允許
TR0 = 1; //打開定時器
}
void main()
{
time0Init();
while (1);
}
void time0() interrupt 1
{
static u16 i; //設置靜態變數,每過1ms即執行一次中斷加1
TH0 = 0xFC; //賦予初值
TL0 = 0x18;
i++;
if (i == 1000) //u16累加至1000即過1s後i清0 led狀態取反
{
i = 0;
led = ~led;
}
}
登錄後復制
9、串口通信
9.1、串口通信的原理
計算機通信是指計算機與外部設備或計算機與計算機之間的信息交換。通信有並行通信和串列通信兩種。
並行通信:將數據位元組的各位用多條數據線同時進行傳送。
並行通信特點:控制簡單、傳輸速度快;由於傳輸線較多,長距離傳送成本高且接受的各位同時接收存在困難。
串列通信:將數據位元組分成一位一位的形式在一條傳輸線上逐個地傳送。
串列通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網等現成的設備,但數據的傳送控制比2並行通信復雜。
串列通信的基本概念
一、非同步通信與同步通信
1、非同步通信:通信的發送與接收設備使用各自的時鍾控制數據的發送和接收過程。為使雙方的收發協調,要求發送和接收的時鍾盡可能一致。
非同步通信是以字元(構成的幀)為單位進行傳輸,字元與字元之間的間隙(時間間隔)是任意的,但同一字元內的各位之間的距離均為「位間隔」的整數倍。
非同步通信的特點:不要求收發雙方時鍾的嚴格一致,實現容易,設備開銷較小,但每個字元要附加2~3位用於起止位,各幀之間還有間隔,因此傳輸效率不高。
2、同步通信:建立發送方時鍾對接收方時鍾的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均為「位間隔」的整數倍,同時傳送的字元間不留間隙,即保持位同步關系,也保持字元同步關系。發送方對接收方的同步可以通過兩種兩種方法實現。(數據加時鍾形式傳送)
二、串列通信的傳輸方向
單工:數據僅能沿一個方向,不能實現反向傳輸。
半雙工:數據可以沿兩個方向,但需要分時進行。
全雙工:數據可以同時進行雙向傳輸。
串列通信常見的錯誤校驗
1、奇偶校驗:發送數據時,數據位尾隨的1位為奇偶校驗位(1或0)。奇校驗時,數據中的「1」的個數與校驗位「1」的個數之和為奇數;偶校驗時,數據中「1」的個數與校驗位「1」的個數之和應為偶數。接收字元時,對「1」的個數進行校驗,若發現不一致,則說明傳輸數據中出現了差錯。(如傳輸數據為1101110數據位1的個數為5奇數,若為奇校驗則校驗位為0)
2、代碼和校驗
3、循環冗餘校驗
三、傳輸速率
1、比特率:每秒傳輸二進制代碼的位數,單位是:位/秒(bps)。如每秒鍾傳送240個字元,而每個字元格式包含10位(1個起始位、1個停止位、8個數據位),這時比特率為:
10位X240個/秒=2400bps
2、傳輸距離與傳輸速率之間的關系
串列介面或終端直接傳送串列信息位流的最大距離與傳輸速率及傳輸線的電氣特性有關。傳輸距離隨傳輸速率的增加而減小。
四、串列通信介面標准
1、RS-232C介面:EIA(美國電子工業協會)修訂,定義了數據終端設備與數據通信設備之間的物理介面標准。
(1)機械特性:RS-232C介面規定使用25針連接器,連接器的尺寸及每個插針的排列位置都有明確的定義。
(2)過程特性:過程特性規定了信號之間的時序關系,以便正確地接收和發送數據。
遠程通信連接(RTS請求發送,DSR數據建立就緒,TXD發送數據,RXD接收數據)
近程通信連接
RS-232C電平與TTL電平轉換驅動電路(將5V的單片機電平轉換為12V的計算機串口電平,將12V的計算機電平轉換為計算機的12V電平)
2、採用RS-232C介面存在的問題(通常使用在通信距離短的設備)
傳輸距離短,傳輸速率低:受電容允許值的約束,使用傳輸距離一般不要超過15m。最高傳送速率為20Kbps。
有電平漂移:RS232C要求收發雙方共地。通信距離較大時,收發雙方的地電位差別較大,在信號地上將有比較大的地電流並產生壓降。
抗干擾能力差:RS-232C在電平轉換時採用單端輸入輸出,在傳輸過程中當干擾和雜訊混在正常的信號中。為了提高信噪比,RS-232C匯流排標准不得不採用較大的電壓擺幅。
9.2、80C51的串列口
80C51串列口結構
有兩個物理上獨立的接收、發送緩沖器SBUF,它們佔用同一地址99H(因此在編程時通常無論接收還是發送都寫SBUF);接收器是雙緩存結構;發送緩沖器由於是CPU主動進行發送,不會產生重疊錯誤。
1、80C51串列口的控制寄存器
SCON是一個特殊功能寄存器,用以設定串列口的工作方式、接收/發送控制以及設置狀態標志:
SM0和SM1為工作方式選擇位,可以選擇四種工作方式:(通常採用方式1)
SM2,多機通信控制位,主要用於方式2和方式3.當接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到信息丟棄)。當SM2=0時,不論收到的RB8為0和1,均可以使收到的數據進入SBUF,並激活RI。通過SM2,可以實現多機通信。方式0時,SM2必須是0。在方式1時,如果SM2=1,則只有接收到有效停止位時,RI才置1.
REN,允許串列接收位,由軟體置REN=1,則啟動串列口接收數據;若軟體置REN=0,則禁止接收。
TB8,在方式2或方式3中,時發送數據的第九位,在方式0和方式1中,該位未用。
RB8,在方式2或方式3中,是接收到數據的第九位。
TI,發送中斷標志位。在方式0時,當串列發送第8位數據結束時(或其他方式,串列發送停止位的開始時),由內部硬體使TI置1,向CPU發中斷申請。在中斷服務程序中,必須用軟體將其清0,取消此中斷申請。
RI接收中斷標志位。在方式0時,當串列口接收第8位數據結束時(或其他方式,串列接收停止位的中間時),由內部硬體使RI置1,向CPU發出中斷申請。也必須在中斷服務程序中,用軟體將其清0,取消中斷申請。
PCON中只有一位SMOD與串列口工作有關:
SMOD(PCON.7) 波特率倍增位。在串列口方式1、方式2、方式3時,波特率與SMOD有關,當SMOD=1時,波特率提高一倍。復位時,SMOD=0.
9.3、串列口的工作方式
1、方式0
方式0時,串列口位同步移位寄存器的輸入輸出方式。主要用於擴展並行輸入或輸出口。數據由RXD(P3.0)引腳輸入或輸出,同步移位脈沖由TXD(P3.1)引腳輸出。發送和接收均為8位數據,低位在先,高位在後。波特率固定為fosc/12。
發送時,如圖先發送低位後發送高位,發送完成後TI置1
接收時,當接收完成後RI由硬體置1.
2、方式1
方式1是10位數據的非同步通信口。TXD位數據發送引腳,RXD為數據接收引腳,傳送一幀數據的格式如圖所示。其中1位起始位,8位數據位,1位停止位。
用軟體置REN為1,接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發生負跳變時,則說明起始位有效。
㈤ 怎樣實現兩片單片機之間的並行通信
1.直接使用一個8位口就可以實現。
2.使用8位口以及一個中斷和使能端,每個單片機使用10個埠
3.使用8位口以及一個時鍾輸出和使能端,每個單片機使用10個埠
你也可以參照一些ad/da的使用。
㈥ 單片機之間如何實現通信
兩個單片機之間串口通信,如果是用proteus模擬,最簡單了,兩個單片機的rxd,txd交叉連接就行了。要是實物最好用rs232連接通信,距離可以達到幾十米。再遠點距離,用rs485連接通信。總之,方法很多的,也很靈活的。
㈦ 單片機不同串口同時工作有什麼好處
傳輸線少,長距離傳送時成本低,每個串口獨立工作,不定時和我的板子通信,可以提高單片機的工作效率。
單片機的數據通信有兩種方式:並行通信和串列通信.並行通信指數據位元組的各位同時發送或接收;而串列通信是數據字長距離傳輸數據節一位一位按順序發送或接收.並行通信傳輸線多,適用於短距離,快速度的通信;而串列通信僅需單線傳輸信息,適用於長距離傳輸數據,由於每次傳送一位,所以傳輸速度比較慢.串列通信又分非同步和同步兩種方式,其中非同步串列通信是最常用的方式。非同步通信傳輸的數據格式一般由1個起始位、7 個或8 個數據位、1 到2 個停止位和一個校驗位組成。它用一個起始位表示字元的開始,用停止位表示字元的結束。
在非同步通訊中,通信雙方採用獨立的時鍾,起始位觸發雙方同步時鍾。在非同步通信中CPU 與外設之間必須有幾項約定,即每一幀位數,字元格式和波特率。字元格式的規定是雙方能夠在對同一種0 和1 的數據串理解成同一種意義。原則上字元格式可以由通訊的雙方自由制定,但從通用、方便的角度出發,一般還是使用一些標准為好,如採用ASCII 標准。
㈧ 單片機通信有三種,其中應用在對講機是採用
首先弄懂串列通信和並行通信以及串口通信和並口通信的概念。
串列通行:它是一個概念,它是指數據一位一位地順序傳送,其特點就是通信線路
簡單,只要一對傳輸線就可實現雙向通信,適用於遠距離通信,但傳輸速度慢。它
包括普通的串口通信,I2C,SPI,UART...
串口通信:是一種實際通信方式,但是我們可以幾乎看成一樣.
串列介面:簡稱串口,或串列通信介面,或串列通訊介面(通常指com口)。
並行通信:如果一組數據的各數據位在多條線上同時被傳輸,那麼就是並行通信。
並口介面:就是一種介面,各數據位同時被傳輸,傳輸速度快,效率高,一邊可用於MCU。
串列通信又可分為單工,半雙工和全雙工
單工:信息只能單向傳送。
半雙工:信息能雙向傳送但不能同時。
全雙工:信息能同時雙向傳送。
串列通信還可分為同步通信和非同步通信
同步通信(兩根線):是把許多字元組成一個信息組,這樣,字元可以一個接一個地傳輸,但是,
在每組信息(通常稱為信息幀)的開始要加上同步字元,在沒有信息要傳輸時,要填上空字元,
因為同步傳輸不允許有間隙。同步方式下,發送方除了發送數據,還要傳輸同步時鍾信號,
信息傳輸的雙方用同一個時鍾信號確定傳輸過程中每1位的位置
非同步通信(一根信號線,沒有時鍾線):是一種很常用的通信方式。非同步通信在發送字元時,所發送的字元之間的時間
間隔可以是任意的。當然,接收端必須時刻做好接收的准備。發送端可以在任意時刻開始發送字元,
因此必須在每一個字元的開始和結束的地方加上標志,即加上開始位和停止位,以便使接收端能夠
正確地將每一個字元接收下來。非同步通信的好處是通信設備簡單、便宜,但傳輸效率較低(因為開始位和停止位的開銷所佔比例較大)。
同步通信與非同步通信區別:
1.同步通信要求接收端時鍾頻率和發送端時鍾頻率一致,發送端發送連續的比特流;非同步通信時
不要求接收端時鍾和發送端時鍾同步,發送端發送 完一個位元組後,可經過任意長的時間間隔再發送下一個位元組。
2.同步通信效率高;非同步通信效率較低。
3.同步通信較復雜,雙方時鍾的允許誤差較小;非同步通信簡單,雙方時鍾可允許一定誤差。
4.同步通信可用於點對多點;非同步通信只適用於點對點。
單片機中的SPI、UART、I2C
1、SPI
SPI允許單片機和外圍設備或者單片機之間高速同步數據傳輸,SPI可以有主機和從機模式之選,通信的主從機之間通過移位寄存器同時交換數據。目前自己用的以主機模式居多。SPI需要四線:SS,MISO,MOSI,SCK。
通信過程:在設置好SPI的工作模式:包括SCK頻率(數據傳輸速率),工作速度,主從模式,以及數據接收發送對應的時鍾極性。在主模式下,將SS拉低表示通信的開始,然後通過向SPI數據寄存器中寫入一位元組的數據後自動啟動時鍾SCK開始進行一次通信,通信完成後會產生相應的中斷標志,標志一個位元組數據的傳送完成。通信完成後將SS腳拉高,表示通信過程已經結束。
注意SS引腳的設置:當設置為從機模式時,SS引腳應設置為輸入,拉低的時候SPI才能起作用,拉高的話是消極的SPI模式;在主機模式下,SS引腳可以設置,一般應設置為輸出,如果設置為輸入的話應保持為高,否則將不能進行正常的主機模式操作。
2、USART
USART的操作比較簡單,主要是設置波特率,數據格式,以及中斷允許位等,值得至於的是其USART IN SPI MODE,在SPI模式下的USART的操作跟SPI操作差不多,主要是Clock的設置,然後發送數據還是通過USART的中斷進行
3、I2C
I2C介面是簡單強大的通信介面,只需要兩根雙向匯流排(時鍾和數據線),SCL和SDA,即可實現一個主機和最多128個從機進行通信。模擬I2C介面的過程:啟動I2C,一般是在SCL為高時將SDA拉低啟動數據發送,SDA只有在SCL為低時才能拉高拉低有效,在SCL為高時拉高拉低SDA只是用於停止啟動I2C通信
I2C匯流排是 內部匯流排 ,用來連接內部系統內的晶元。
串口通信是用來和系統外部的設別通信的。比如設備和設備之間通信。
SPI,UAR,I2C都是串列通信方式,並行通信方式一般用的少,因為只適合
短距離,一般用於MCU比較多,因為MCU它對數據的傳輸速度有要求,而且
與塔相連的晶元一般會比較近。
MCU 他的屬性要比CPU(這里指單片機,其他地方應該也是) 強,它包括CPU的性能,
且還有CPU沒有的性能。
㈨ 怎樣實現兩片單片機之間的並行通信
實際應用是不會這么做的,主要是浪費資源,包括硬體軟體的。一般都用串口通訊。
要實現並行通信也是可以的,可以給你一些方法,
硬體連接
px
並口(8個
io口)+
intx
外部中斷+
發送請求(2個io口),
發送端:
把要發送
的數據
寫入
並口,同時寫入
發送請求(如低電平有效
加一些延時後置高電平)
接收端:
產生
接收
外部中斷,把px
接收並口
寫入0xff
,
並讀取
數據,也可以發送
返回數據
與發送端相同。