新聞中心

PIC16F877A-UART

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
#include
#define unchar unsigned char
#define uint unsigned intunchar RC_label;//標(biāo)志位起始位為1結(jié)束位為0

unchar caiji_label;//采集幀格式標(biāo)志位正確為1錯(cuò)誤為0
unchar data RC[100];//存儲(chǔ)接收到的數(shù)據(jù)
unchar data TX1[100];//存儲(chǔ)自身參數(shù)
unchar data TX2[100];//存儲(chǔ)出錯(cuò)指示ERROR
int RC_buff;//
int i=0,j=0,k=0;//

//*****串口初始化**********
void initRS232()
{
//設(shè)置TXSTA
CSRC=0;//
TX9=0;//8位數(shù)據(jù)發(fā)送
TXEN=1;//發(fā)送使能
SYNC=0;//選擇異步模式
BRGH=1;//高速
TRMT=1;//發(fā)送寄存器空
TX9D=0;//

//設(shè)置RCSTA
SPEN=1;//允許串口工作
RX9=0;//接收8位數(shù)據(jù)
SREN=1;//
CREN=1;//使能連續(xù)接收
ADDEN=0;//
FERR=0;//
OERR=0;//無(wú)超速錯(cuò)誤
RX9D=0;//
TRISC=0X80;//設(shè)置C口
SPBRG=0X19;//設(shè)置波特率為9600
}

//*******延時(shí)*********
void delay(int i)
{for(i;--i;) continue;}
//******中斷初始化******
void int_interrupt(void)
{
GTE=1;//
PEIE=1;//
RCIE=1;//
}

//********中斷服務(wù)子程序*********
void interrupt receive(void)
{
if(OERR==1)//判斷有無(wú)超速錯(cuò)誤
{
CREN=0;
CREN=1;
}
if(RCIF==1)
{
RC_buff=RCREG;
if(RC_buff==0x2a)//判斷是否是起始標(biāo)志*
{
RC_label=1;
}
if(RC_buff==0x23)//判斷是否是結(jié)束標(biāo)志#
{
RC_label=0;
}
}

if(RC_label==1)
RC[k++]=RC_buff;//將接收到的數(shù)據(jù)存儲(chǔ)在數(shù)組中
else if(RC_label==0)
k=0;
if(RC[1]==0XFE&&RC[2]==0XC0&&RC[3]==0X34&&RC[5]==0X12)//判斷數(shù)據(jù)采集幀格式是否正確
caiji_label=1;
else caiji_label=0;
}

//********參數(shù)發(fā)送子程序開始**********
void TX_serve(void)
{
TX1[ ]={0X2A,0XFD,0X26,0X30,0X31,0X32};//自身參數(shù)存儲(chǔ)在TX1中
TX2[ ]={0X56,0X52,0X52,0X4F,0X52};//出錯(cuò)指示存儲(chǔ)在TX2中
if(caiji_label==1)//如果數(shù)據(jù)采集幀格式正確則發(fā)送自身參數(shù)幀
{
for(j=0;j<6;j++)
{
TXREG=TX1[j];
delay(20);
}
}
if(caiji_label==0) //如果數(shù)據(jù)采集幀格式錯(cuò)誤則發(fā)送出錯(cuò)指示
{
for(j=0;j<5;j++)
{
TXREG=TX2[j];
delay(20);
}
}
}

//********主程序開始**************
void main()
{
int_interrupt();
initRS232();
TX_serve();
end
}


關(guān)鍵詞: PIC16F877AUAR

評(píng)論


技術(shù)專區(qū)

關(guān)閉