• 大小: 56KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: pic16f877a  

资源简介

pic16f877a串口通信与pc对发数据,波特率9600,8位异步,带CRC校验

资源截图

代码片段和文件信息

#include 
//根据选项配置字应该如下所示:
__CONFIG(HS&WDTDIS&LVPDIS);

//数码管字形表,定义表格一定要使用const,这样会做到程序存储区中
//const unsigned char LED[]=
//{                          
//0xc00xf90xa40xb0//0~3
//0x990x920x820xf8//4~7
//0x800x900x880x83//8~b
//0xc60xa10x860x8e //c~f
//};
volatile unsigned char flag2    @ 0x021;
volatile    bit AC_request_enable @ ((unsigned)&flag2*8)+0;//=1AC request is enabledthat‘s to say AC could run
volatile    bit bit_flag2   @ ((unsigned)&flag2*8)+1;
            bit flag_incs_error @ ((unsigned)&flag2*8)+2;
            bit flag_ambs_error @ ((unsigned)&flag2*8)+3;
            bit flag_mode_error @ ((unsigned)&flag2*8)+4;
            bit flag_evas_error @ ((unsigned)&flag2*8)+5;
            bit flag_fan_error  @ ((unsigned)&flag2*8)+6;
            bit flag_error  @ ((unsigned)&flag2*8)+7;

unsigned char TxRc_buf[12]={0};
unsigned char TxRc_num=0;
unsigned int CRC_data;
bit com_delflag=0;
void delay(void)
{
    unsigned int a;    
    for(a=0;a<50000;a++); //延时,非精确定时  
}
unsigned int cal_crc16(unsigned char *ptrunsigned char len)//CRC-16-A001校验码
{
    unsigned char dat;
    unsigned int crc=0xffff;
    while(len--)
    {
        crc=crc^*ptr++;
        for(dat=0x80;dat!=0;dat=dat>>1)
     {
            if(!(crc&0x0001))
         {
                crc=crc>>1;
         }
            else if(crc&0x0001)
         {
                crc=crc>>1;
                crc=crc^0xa001;
         }
     }
    }
    return (crc);
}
void reset(void)//MCU软复位
{
asm(“ljmp 0“);
}
//*****USART串口初始化*****
void uart_init(void)
{
    TRISD=0x00; //设置RD0-RD7为输出模式 
    PORTD=0xFF; //初始化RD7-RD0的数值
    TRISC=0xff; //设置RC0-RC7为输入模式
    TXSTA=0x24; //发送状态和控制寄存器,发送使能位TXEN置1串口模式选择位SYNC置1为同步,置0为异步,TX9=0为8位发送,TX9=1为9位发送,高速波特率选择BRGH置1
    RCSTA=0x90; //接收状态和控制寄存器,串口使能位SPEN置1,RX9=0为8位接收,RX9=1为9位接收,连续接收使能位CREN置1
    SPBRG=25;   //设置波特率为9600,误差0.16%
    GIE=1;      //INTCON中断控制寄存器全局中断使能位
    PEIE=1;     //INTCON中断控制寄存器外设中断使能位
    RCIE=1;     //PIE1外设中断控制寄存器接收中断使能位
    TXIE=0;     //PIE1外设中断控制寄存器发送中断使能位
}
void main(void) //带前导数据处理,接收、校验、返回
{
    unsigned char i;
    uart_init();//串口USART配置初始化

    TXREG=0x31;//将要发送的数据推送给发送寄存器
    while(!TRMT);//等待发送完成
    //while(1);
    while(1)
    {
        while(com_delflag)//判断是否接收完成
     {
            RD5=!RD5;//对应LED发光管闪烁
            delay();
            RD5=!RD5;//对应LED发光管闪烁

            CRC_data=cal_crc16(TxRc_buf10);//将串口接收到除最后两位为校验码的数据外,剩余数据进行CRC16校验
            if(CRC_data==((TxRc_buf[11]<<8)|TxRc_buf[10]))//判断串口接收到数据的校验码与接收到的校验码是否一致
     {
                for(i=0;i<12;i++)
                {TXREG=TxRc_buf[i];while(!TRMT);}//将接收到的数据以连续的方式返回主机

                RCIE=1;//开启串口接收中断
                com_delflag=0;//接收完成标志位置0
     }
     }
    }   
}    
//*****USART串口接收中断*****TxRc_num
void interrupt com(void)
{
    if(RCIE&&RCIF)  //判断接收中断标志允许位和接收中断标志位
    {   
//****************************************接收并发送单

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        133  2016-03-29 09:03  user5usart\funclist

     文件       2008  2016-03-29 09:03  user5usart\startup.as

     文件       4612  2016-03-29 09:03  user5usart\startup.lst

     文件       1791  2016-03-29 09:03  user5usart\startup.obj

     文件       5277  2016-03-29 09:03  user5usart\startup.rlf

     文件      25342  2016-03-29 09:03  user5usart\usart.as

     文件       4482  2016-03-21 16:48  user5usart\usart.c

     文件      11884  2016-03-29 09:03  user5usart\usart.cof

     文件        253  2016-03-29 09:03  user5usart\usart.dep

     文件       1295  2016-03-29 09:03  user5usart\usart.hex

     文件       1091  2016-03-29 09:03  user5usart\usart.hxl

     文件      43965  2016-03-29 09:03  user5usart\usart.lst

     文件      14601  2016-03-29 09:03  user5usart\usart.map

     文件       1036  2016-03-29 09:07  user5usart\usart.mcp

    I.A....      6609  2016-03-29 09:07  user5usart\usart.mcs

     文件     930304  2016-03-29 09:07  user5usart\usart.mcw

     文件       1916  2016-03-21 16:48  user5usart\usart.mptags

     文件       8180  2016-03-29 09:03  user5usart\usart.obj

     文件      52799  2016-03-29 09:03  user5usart\usart.p1

     文件      14566  2016-03-29 09:03  user5usart\usart.pre

     文件      56086  2016-03-29 09:03  user5usart\usart.rlf

     文件      14432  2016-03-29 09:03  user5usart\usart.sdb

     文件       4604  2016-03-29 09:03  user5usart\usart.sym

     文件         25  2016-03-21 16:48  user5usart\usart.tagsrc

     目录          0  2016-03-29 09:07  user5usart

----------- ---------  ---------- -----  ----

              1207291                    25


评论

共有 条评论