PIC單片機(jī)-RS232串口通信
編寫程序?qū)崿F(xiàn)以下功能。在計(jì)算機(jī)上使用串口大師向開發(fā)板發(fā)每次發(fā)送1個(gè)字符。開發(fā)板每接收到一個(gè)數(shù)據(jù),則交換該數(shù)據(jù)的高低4位,再發(fā)送回計(jì)算機(jī)。
端口初始化時(shí)使能發(fā)送與接收,使用掃描方式接收數(shù)據(jù),接收到數(shù)據(jù)后立即交換高低四位并發(fā)送,交換高低四位方式如下:
i = ((RCREG & 0xff) << 4) | (RCREG >> 4)
完整程序:
/*******************************************************************************
* 標(biāo) 題: 異步串口通訊
* 功能描述: 在計(jì)算機(jī)上使用串口大師向開發(fā)板發(fā)每次發(fā)送1個(gè)字符。
* 開發(fā)板每接收到一個(gè)數(shù)據(jù),則交換該數(shù)據(jù)的高低4位,再發(fā)送回計(jì)算機(jī)。
********************************************************************************/
#include
#define uint8 unsigned char
#define uint16 unsigned int
__CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //設(shè)置配置位
//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
/***************************聲明函數(shù)*******************************************/
void SCI_Init(void); //串口初始化
/*******************************************************************************
* 函 數(shù) 名: SCI_Init(void)
* 函數(shù)功能: 異步串口通訊初始化
* 入口參數(shù): 無(wú)
* 返 回: 無(wú)
*******************************************************************************/
void SCI_Init(void)
{
SPBRG = 129; //高速 波特率9600
TXSTA = 0x24; //使能發(fā)送,8位數(shù)據(jù)
RCSTA = 0xB0; //8位數(shù)據(jù)接收,使能連續(xù)接收,
TRISC6 = 1; //設(shè)置為輸入狀態(tài)
TRISC7 = 1;
}
/******************************************************************************
* 函 數(shù) 名: mian(void)
* 函數(shù)功能: 接收到一個(gè)數(shù)據(jù),交換該數(shù)據(jù)的高低4位,再發(fā)送回計(jì)算機(jī)
* 入口參數(shù): 無(wú)
* 返 回: 無(wú)
*******************************************************************************/
void main(void)
{
uint8 i;
SCI_Init(); //串口初始化
while(1)
{
if(RCIF == 1) //等待接收
{
i = ((RCREG & 0xff) << 4) | (RCREG >> 4); //交換接收到的數(shù)據(jù)高低四位,存放于i
TXREG = i; //發(fā)送數(shù)據(jù)
while(TRMT == 0); //等待發(fā)送完成
}
}
}