您的位置 首页 技术

PIC16F877A-UART

#includepic16f877.h>#defineuncharunsignedchar#defineuintunsignedintuncharRC_label;//标志位起始位为1结束位为0

#include

#define unchar unsigned char
#define uint unsigned intunchar RC_label;//标志位开端位为1完毕位为0
unchar caiji_label;//收集帧格局标志位正确为1过错为0
unchar data RC[100];//存储接纳到的数据
unchar data TX1[100];//存储本身参数
unchar data TX2[100];//存储犯错指示ERROR
int RC_buff;//
int i=0,j=0,k=0;//

//*****串口初始化**********
void initRS232()
{
//设置TXSTA
CSRC=0;//
TX9=0;//8位数据发送
TXEN=1;//发送使能
SYNC=0;//挑选异步形式
BRGH=1;//高速
TRMT=1;//发送寄存器空
TX9D=0;//

//设置RCSTA
SPEN=1;//答应串口作业
RX9=0;//接纳8位数据
SREN=1;//
CREN=1;//使能接连接纳
ADDEN=0;//
FERR=0;//
OERR=0;//无超速过错
RX9D=0;//
TRISC=0X80;//设置C口
SPBRG=0X19;//设置波特率为9600
}

//*******延时*********
void delay(int i)
{for(i;–i;) continue;}

//******中止初始化******
void int_interrupt(void)
{
GTE=1;//
PEIE=1;//
RCIE=1;//
}

//********中止服务子程序*********
void interrupt receive(void)
{
if(OERR==1)//判别有无超速过错
{
CREN=0;
CREN=1;
}
if(RCIF==1)
{
RC_buff=RCREG;
if(RC_buff==0x2a)//判别是否是开端标志*
{
RC_label=1;
}
if(RC_buff==0x23)//判别是否是完毕标志#
{
RC_label=0;
}
}

if(RC_label==1)
RC[k++]=RC_buff;//将接纳到的数据存储在数组中
else if(RC_label==0)
k=0;
if(RC[1]==0XFE&&RC[2]==0XC0&&RC[3]==0X34&&RC[5]==0X12)//判别数据收集帧格局是否正确
caiji_label=1;
else caiji_label=0;

}

//********参数发送子程序开端**********
void TX_serve(void)
{
TX1[ ]={0X2A,0XFD,0X26,0X30,0X31,0X32};//本身参数存储在TX1中
TX2[ ]={0X56,0X52,0X52,0X4F,0X52};//犯错指示存储在TX2中
if(caiji_label==1)//假如数据收集帧格局正确则发送本身参数帧
{
for(j=0;j<6;j++)
{
TXREG=TX1[j];
delay(20);
}
}
if(caiji_label==0) //假如数据收集帧格局过错则发送犯错指示
{
for(j=0;j<5;j++)
{
TXREG=TX2[j];
delay(20);
}
}
}

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/272128.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部