pic单片机c语言编程实例五

pic单片机c语言编程实例五

ID:15801292

大小:88.00 KB

页数:9页

时间:2018-08-05

pic单片机c语言编程实例五_第1页
pic单片机c语言编程实例五_第2页
pic单片机c语言编程实例五_第3页
pic单片机c语言编程实例五_第4页
pic单片机c语言编程实例五_第5页
资源描述:

《pic单片机c语言编程实例五》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第9章PIC16F87X在CAN通信中的应用9.3软件清单//========CAN通信程序=======#include#include#include//MCP2510寄存器定义//=========常数和变量定义=========#defineREAD0x03//读MCP2510指令代码#defineWRITE0x02//写MCP2510指令代码#defineRESET0xC0//复位MCP2510指令代码#defineRTS0x80//MCP2510请求发送指令代码#defineSTA25100xA

2、0//读MCP2510状态指令代码#defineBITMOD0x05//MCP2510位修改指令代码inta[12];//SPI发送或接收数据寄存器intb[8];//发送或接收的数据intc[8];//发送或接收的数据inti;//临时变量intcount;//发送接收计数器intcount1=0;//fortestintRecID_H=0;intRecID_L=0;intDLC=8;voidSPIINT();voidTMR1INT();voidCCP1INT();voidSPIEXCHANGE(intcount);voidWAIT_SPI();voidRESET2

3、510();intRD2510(intadress,intn);voidWR2510(intadress,intn);voidRTS2510(intRTSn);intGETS2510();voidBM2510(intadress,intmask,intdata);voidSETNORMAL();voidTXCOMPLETE(intadress);voidTXMSG(intDLC);162intRXMSG();voidINIT2510();voidINIT877();voidINITSPI();voidACK();voidwait();//========主程序====

4、===main(void){intl,detect=0;SSPIE=1;TMR1IE=1;CCP1IE=1;CCP2IE=1;PEIE=1;ei();//开中断INIT877();//初始化PIC16F877芯片INITSPI();//初始化SPI接口INIT2510();//初始化MCP2510芯片flag1=0;flag2=0;CCP1CON=0x05;CCP2CON=0x04;while(1){RXMSG();TXMSG(8);}}//========中断服务程序=======//SPI中断服务子程序voidSPIINT(){SSPIF=0;a[i++]=SSP

5、BUF;//数据暂存a[]中count-=1;if(count>0)SSPBUF=a[i];//未发送完,继续elseRE2=1;//否则,片选信号置高电平return;162}//TMR1中断服务子程序voidTMR1INT(){TMR1IF=0;T1CON=0;if(!flag1){TMR1H=0xfe;//512μs脉冲宽度TMR1L=0x00;T1CON=0x01;PORTD=0xff;//输出所有通道flag1=1;}else{flag1=0;PORTD=0;T1CON=0;}return;}//CCP1中断服务子程序voidCCP1INT(){CCP1IF

6、=0;T1CON=0x01;return;}//CCP2中断服务子程序voidCCP2INT(){CCP2IF=0;T1CON=0x01;return;}//中断入口,保护现场,判中断类型voidinterruptINTS(){di();162if(TMR1IF)TMR1INT();//定时器TMR1中断elseif(CCP1IF)CCP1INT();//电压过零捕捉中断1elseif(CCP2IF)CCP2INT();//电压过零捕捉中断2elseif(SSPIF)SPIINT();//SPI接口中断ei();}//========子程序=======//启动SPI

7、传送voidSPIEXCHANGE(count)intcount;{if(count>0){//有数据可送?i=0;RE2=0;//片选位置低电平SSPBUF=a[i];//送数}else;//否则,空操作,并返回return;}//等待SPI传送完成voidWAIT_SPI(){do{;}while(count>0);//当count!=0时,等待toadd"CLRWDT"return;}//对MCP2510芯片进行复位voidRESET2510(){a[0]=RESET;count=1;SPIEXCHANGE(count);//送复位指令WAIT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。