1. 程式人生 > >PIC微控制器精通_非同步串列埠通訊例項與細節

PIC微控制器精通_非同步串列埠通訊例項與細節

1.前言

PIC16F876a非同步串列埠通訊的定義以及暫存器控制,這裡不再多談,前面已經進行過詳細的分析。這裡注意集中在幾個關鍵點上。

串列埠中斷服務程式應該注意什麼?

利用串列埠助手進行除錯應該注意什麼?

串列埠助手接收不到資料的幾種可能因素?

2.例項分析

PIC微控制器與上位機握手程式如下:
/********************************************************/
/*Author: Chunxu Shen; All Rights Reserved!
/*Tsinghua University   2016-11-19
/*Serial Test Low Speed
********************************************************/
#include <pic.h>
__CONFIG(0x3ffa);

#define BAUD 9600    
#define FOSC 9216000L
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))

unsigned char Rece_flag ;  //初始化,串列埠接受標誌

void main(void)
{
	//初始化埠程式
	TRISC7 = 1; //RX埠設為輸入有效
	TRISC6 = 0; //TX埠設為輸出有效

	//初始化串列埠設定
	SPBRG = DIVIDER;  //波特率設定
	TXSTA = 0x24;  //內部波特率-8bit-允許傳送-非同步通訊 空-低速模式-傳送暫存器滿空-無奇偶校驗
	RCSTA = 0x90;  //串列埠使能-不接收單字元-允許禁止連續接收

	//中斷設計
	GIE  = 1;   //開啟中斷總開關
	PEIE = 1;  //允許外圍裝置觸發中斷
	RCIE = 1;  //允許接收訊號觸發中斷
	RCIF = 0;

	//等待PC機觸發中斷
	while(1)
	{
		if('E' == Rece_flag) //對應上位機“結束”按鍵
			{//給PC機反饋訊號“END”
				TXREG = 'E';
				while( TRMT == 0 ) 
					continue; //檢驗傳送是否結束
				TXREG = 'N';
				while(TRMT==0) 	
					continue;
				TXREG = 'D';
				while(TRMT==0)
					continue; 
			}
			else if( 'S' == Rece_flag )
			{
				//給PC機反饋訊號“OK”
				TXREG = 'O';
				while(TRMT==0) 
					continue;		
				TXREG = 'K';
				while(TRMT==0) 
					continue;				
			} 
			else //其他訊號不響應
			{	;	}
	}
}

//接收上位機送發的訊號
void interrupt usart(void)
{
	if( RCIF )
	{
		RCIF = 0;  //軟體清零
		Rece_flag = RCREG; 	
	}
}

3.經驗總結

1.編寫中斷服務程式時,一定要注意接收中斷標誌位這個事兒!RCIF這個標誌位,硬體不會自動清空。因此,一旦我們編寫中斷服務程式時,先把RCIF清零!!!

2.利用串列埠助手進行除錯的時候,關注埠號!!!(計算機->管理->裝置管理器->埠)確定你選擇的埠是與PIC微控制器是相連的,否則即使協議很正確,埠號沒對上,也白扯。

3.波特率很關鍵,看好高低速,把初值算對很重要。

4.感想

曾經下過決心,不碰硬體,可是呢,有的時候你不去做就沒有人做,這不得不說是一種悲哀!接下來的軟體,瞧!看我飛起~~~

相關推薦

PIC微控制器精通_非同步串列通訊例項細節

1.前言 PIC16F876a非同步串列埠通訊的定義以及暫存器控制,這裡不再多談,前面已經進行過詳細的分析。這裡注意集中在幾個關鍵點上。 串列埠中斷服務程式應該注意什麼? 利用串列埠助手進行除錯應

PIC微控制器精通_串列通訊模組C實現

1.串列埠通訊頭/定義檔案 usart.h #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC

基於51微控制器的pwm和串列通訊

此例程設定了按鍵可以調整100-1000hz的不同頻率(100的倍數)的方波,另外還加入了串列埠通訊,可以通過串列埠傳送來的數字來設定相對應的頻率; #include <reg52.h> #include"uart.h" sbit PWMOUT = P1^0

FPGA verilog HDL rs232 UART非同步串列通訊

專案一:rs232 UART非同步串列埠通訊        UART的全稱叫做通用非同步收發傳輸器。將資料在序列通訊和並行通訊間的傳輸轉換。通俗的講就是把多位元的資料轉化為單位元的資料,或者把單位元的資料轉化為多位元的資料。工作原理是將資料的每一個BIT一位接一位的傳輸。

Exynos4412非同步串列通訊及實驗

通訊傳輸方式 序列通訊(二進位制) 序列傳送,資料是按順序一位一位傳送,一條資料線或差分線傳輸並行通訊 資料各位同時傳送,多條資料線比較:序列通常傳輸速度比較慢,成本低,適用於計算機間的遠距離傳輸。並行傳輸速率高,成本也高,適用於近距離裝置傳輸,當然了還有RS-485,RS

微控制器C語言之串列通訊協議

現實生活中, 我們總是要與人打交道,互通有無。微控制器也一樣,需要跟各種裝置互動。例如汽車的顯示儀表需要知道汽車的轉速及電動機的執行引數,那麼顯示儀表就需要從汽車的底層控制器取得資料。而這個資料的獲得過程就是一個通訊過程。類似的例子還有控制器通常是微控制器或者PLC與變頻器

AsyncSerial非同步串列通訊

AsyncSerial.h /* * File: AsyncSerial.h * Author: Terraneo Fed

MFC串列通訊例項

參考MSComm控制元件的用法和函式說明。裡面講得也算詳細了。所以這裡直接獻上原始碼示例。 github下載地址 CSDN下載地址 效果如圖: 需要注意的是: 1.如果想同時recv/send,則必須加個執行緒。 2.奇偶校驗中,引數設定為,無(n),偶校驗(o),

QT下的串列通訊例項(原始碼可下載QT5下測試通過)

在不瞭解QT下的串列埠如何呼叫的時候,我們可以首先到QT的官網上尋找答案,首先,我們可以訪問:以下網址,搜尋serial port qt,可以得到很多相關的線索 http://doc.qt.io/ 這個QSerialport類十分豐富,比VC中的使用起來更方便,如下網址,我們可以檢視它的所

C#串列通訊例項

C#串列埠通訊例項 程式介面如下圖:     引數設定介面程式碼如下: using System; using System.Collections.Generic; using System.ComponentModel; using Syste

Labview VISA實現串列通訊例項講解 轉

1.安裝VISA驅動 VISA驅動不含在軟體包中,必須要自己去下載。 VISA(Virtual Instrument Software Architecture,簡稱為"Visa"),即虛擬儀器軟體結構,是VXI plug&play聯盟制定的I/O介面軟體標準及其規

關於串列通訊查詢中斷兩種方式

void init_ser()   //串列埠初始化 {   TMOD=0x20;     //定時器1工作於方式2  TH1=0xf3;     //娤初值波特率為2400  TL1=0xf3;  TR1=1;      //開定時器1  SCON=0x50;     //設定串列埠方式1 允許接收

android串列通訊例項

1、init程式碼 /*************************************************************** ** fun: init uart(/dev/ttymxc1); ** in: ** out: fd sucess, -1 false; **

PIC微控制器-RS232串列通訊

編寫程式實現以下功能。在計算機上使用串列埠大師向開發板發每次傳送1個字元。開發板每接收到一個數據,則交換該資料的高低4位,再發送回計算機。 埠初始化時使能傳送與接收,使用掃描方式接收資料,接收到資料後立即交換高低四位併發送,交換高低四位方式如下: i = ((RCREG

51微控制器串列通訊(一)

串列埠通訊好東西,但我沒用過。 下面照著普中科技的ppt搬運下。        隨著多微機系統的廣泛應用和計算機網路技術的普及,計算機的通訊功能愈來愈顯得重要。計算機通訊是指計算機與外部裝置或計算機與計算機之間的資訊交換。 通訊方式 有並行

教你如何在51微控制器上模擬串列通訊!!!

我們可以不使用微控制器本身帶有的串列埠,而自己用程式去模擬一個串列埠並達到和本身的串列埠具有同樣的功能, 首先,我們需要用到CH340串列埠模組,大家可以上某寶自行購買。 正面: 反面:   然後我們需要了解一下這串列埠模組上的引腳: 5V  :與VCC短路為5V TL

51微控制器學習——串列通訊

51微控制器的UART串列埠的結構由序列口控制暫存器SCON、傳送和接收電路三部分構成。 SCON位分配 位 7 6 5 4 3 2 1 0 符號

【Python】_pyserial模組_串列通訊

(一)serial模組安裝 Windows開啟cmd,用pip安裝pyserial: pip install pyserial (二)檢視COM口工具 vspd:一款本地虛擬串列埠的軟體(需要破解版) 下載後執行exe檔案,用dll檔案貼上複製掉原始檔,完成破

PC機串列除錯助手微控制器通訊字元問題

在利用PC機的串列埠除錯助手與微控制器通訊時,微控制器與PC機是以ASCII碼的形式通訊的,比如傳送1,其實發送的是字元1,如果在接收區以十六進位制顯示的話,是31(1的ASCII碼)。具體如下: 1. 十六進位制傳送與十六進位制顯示都為選中,傳送與接收的都是字元的形式;

QT筆記(8)——Qt51微控制器串列通訊

工業控制中微控制器與pc機通訊,常常通過串列埠通訊來完成,本次基於RS232通訊來完成的,硬體是普中的STC51微控制器開發板;板子如下圖: 不需要液晶顯示器,自帶的例子這裡就不貼了,主要實驗是Qt進行串列埠連結,傳送資料,微控制器判斷髮送的內容並做出反饋; 微控制器