-
大小: 56KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-10
- 語(yǔ)言: 其他
- 標(biāo)簽: pic16f877a??
資源簡(jiǎn)介
pic16f877a串口通信與pc對(duì)發(fā)數(shù)據(jù),波特率9600,8位異步,帶CRC校驗(yàn)

代碼片段和文件信息
#include?
//根據(jù)選項(xiàng)配置字應(yīng)該如下所示:
__CONFIG(HS&WDTDIS&LVPDIS);
//數(shù)碼管字形表,定義表格一定要使用const,這樣會(huì)做到程序存儲(chǔ)區(qū)中
//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++);?//延時(shí),非精確定時(shí)??
}
unsigned?int?cal_crc16(unsigned?char?*ptrunsigned?char?len)//CRC-16-A001校驗(yàn)碼
{
????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軟復(fù)位
{
asm(“l(fā)jmp?0“);
}
//*****USART串口初始化*****
void?uart_init(void)
{
????TRISD=0x00;?//設(shè)置RD0-RD7為輸出模式?
????PORTD=0xFF;?//初始化RD7-RD0的數(shù)值
????TRISC=0xff;?//設(shè)置RC0-RC7為輸入模式
????TXSTA=0x24;?//發(fā)送狀態(tài)和控制寄存器,發(fā)送使能位TXEN置1串口模式選擇位SYNC置1為同步,置0為異步,TX9=0為8位發(fā)送,TX9=1為9位發(fā)送,高速波特率選擇BRGH置1
????RCSTA=0x90;?//接收狀態(tài)和控制寄存器,串口使能位SPEN置1,RX9=0為8位接收,RX9=1為9位接收,連續(xù)接收使能位CREN置1
????SPBRG=25;???//設(shè)置波特率為9600,誤差0.16%
????GIE=1;??????//INTCON中斷控制寄存器全局中斷使能位
????PEIE=1;?????//INTCON中斷控制寄存器外設(shè)中斷使能位
????RCIE=1;?????//PIE1外設(shè)中斷控制寄存器接收中斷使能位
????TXIE=0;?????//PIE1外設(shè)中斷控制寄存器發(fā)送中斷使能位
}
void?main(void)?//帶前導(dǎo)數(shù)據(jù)處理,接收、校驗(yàn)、返回
{
????unsigned?char?i;
????uart_init();//串口USART配置初始化
????TXREG=0x31;//將要發(fā)送的數(shù)據(jù)推送給發(fā)送寄存器
????while(!TRMT);//等待發(fā)送完成
????//while(1);
????while(1)
????{
????????while(com_delflag)//判斷是否接收完成
???? {
????????????RD5=!RD5;//對(duì)應(yīng)LED發(fā)光管閃爍
????????????delay();
????????????RD5=!RD5;//對(duì)應(yīng)LED發(fā)光管閃爍
????????????CRC_data=cal_crc16(TxRc_buf10);//將串口接收到除最后兩位為校驗(yàn)碼的數(shù)據(jù)外,剩余數(shù)據(jù)進(jìn)行CRC16校驗(yàn)
????????????if(CRC_data==((TxRc_buf[11]<<8)|TxRc_buf[10]))//判斷串口接收到數(shù)據(jù)的校驗(yàn)碼與接收到的校驗(yàn)碼是否一致
???? {
????????????????for(i=0;i<12;i++)
????????????????{TXREG=TxRc_buf[i];while(!TRMT);}//將接收到的數(shù)據(jù)以連續(xù)的方式返回主機(jī)
????????????????RCIE=1;//開啟串口接收中斷
????????????????com_delflag=0;//接收完成標(biāo)志位置0
???? }
???? }
????}???
}????
//*****USART串口接收中斷*****TxRc_num
void?interrupt?com(void)
{
????if(RCIE&&RCIF)??//判斷接收中斷標(biāo)志允許位和接收中斷標(biāo)志位
????{???
//****************************************接收并發(fā)送單
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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
評(píng)論
共有 條評(píng)論