1. 程式人生 > >PIC微控制器-RS232串列埠通訊

PIC微控制器-RS232串列埠通訊

編寫程式實現以下功能。在計算機上使用串列埠大師向開發板發每次傳送1個字元。開發板每接收到一個數據,則交換該資料的高低4位,再發送回計算機。

埠初始化時使能傳送與接收,使用掃描方式接收資料,接收到資料後立即交換高低四位併發送,交換高低四位方式如下:

i = ((RCREG & 0xff) << 4) | (RCREG >> 4)

完整程式:

/*******************************************************************************
* 標    題: 非同步串列埠通訊
* 功能描述: 在計算機上使用串列埠大師向開發板發每次傳送1個字元。
* 
開發板每接收到一個數據,則交換該資料的高低4位,再發送回計算機。 ********************************************************************************/ #include <htc.h> #define uint8 unsigned char #define uint16 unsigned int __CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //設定配置位 //WDTE_OFF:disable watchdog timer 看門狗禁止 //LVP_OFF:low voltage programming disabled 低電壓程式設計禁止 //FOSC_HS:high speed crystal/resonator 4M以上晶振選擇HS高速 //PWRTDIS:disable power up timer //BOREN_OFF:disable brown out reset /*****
**********************宣告函式*******************************************/ void SCI_Init(void); //串列埠初始化 /******************************************************************************* * 函 數 名: SCI_Init(void) * 函式功能: 非同步串列埠通訊初始化 * 入口引數: 無 * 返 回: 無 *******************************************************
************************/ void SCI_Init(void) { SPBRG = 129; //高速 波特率9600 TXSTA = 0x24; //使能傳送,8位資料 RCSTA = 0xB0; //8位資料接收,使能連續接收, TRISC6 = 1; //設定為輸入狀態 TRISC7 = 1; } /****************************************************************************** * 函 數 名: mian(void) * 函式功能: 接收到一個數據,交換該資料的高低4位,再發送回計算機 * 入口引數: 無 * 返 回: 無 *******************************************************************************/ void main(void) { uint8 i; SCI_Init(); //串列埠初始化 while(1) { if(RCIF == 1) //等待接收 { i = ((RCREG & 0xff) << 4) | (RCREG >> 4); //交換接收到的資料高低四位,存放於i TXREG = i; //傳送資料 while(TRMT == 0); //等待發送完成 } } }