PIC微控制器-RS232串列埠通訊
阿新 • • 發佈:2019-01-31
編寫程式實現以下功能。在計算機上使用串列埠大師向開發板發每次傳送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); //等待發送完成
}
}
}