pic单片机tmr1计数c语言,PIC单片机C语言编程实例五.doc

PIC单片机C语言编程实例五

PAGE

PAGE 163

第9章 PIC16F87X在CAN通信中的应用9.3 软件清单// ========CAN通信程序======= #include#include#include// MCP2510寄存器定义 // =========常数和变量定义========= #defineREAD0x03// 读MCP2510指令代码 #defineWRITE0x02// 写MCP2510指令代码 #defineRESET0xC0// 复位MCP2510指令代码 #defineRTS0x80// MCP2510请求发送指令代码 #defineSTA25100xA0// 读MCP2510状态指令代码 #defineBITMOD0x05// MCP2510位修改指令代码 inta[12];// SPI发送或接收数据寄存器intb[8];// 发送或接收的数据intc[8];// 发送或接收的数据inti;// 临时变量intcount;// 发送接收计数器intcount1=0;// for testintRecID_H=0;intRecID_L=0;intDLC=8;void SPIINT();void TMR1INT();void CCP1INT();void SPIEXCHANGE(int count);void WAIT_SPI();void RESET2510();int RD2510(int adress,int n);void WR2510(int adress,int n);void RTS2510(int RTSn);int GETS2510();void BM2510(int adress,int mask,int data);void SETNORMAL();void TXCOMPLETE(int adress);void TXMSG(int DLC);int RXMSG();void INIT2510();void INIT877();void INITSPI();void ACK();void wait();// ========主程序======= main(void){int l,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中断服务子程序 void SPIINT(){SSPIF=0;a[i++]=SSPBUF;// 数据暂存a[]中 count-=1;if(count>0) SSPBUF=a[i];// 未发送完,继续 else RE2=1;// 否则,片选信号置高电平 return;}// TMR1中断服务子程序 void TMR1INT(){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中断服务子程序 void CCP1INT(){CCP1IF=0;T1CON=0x01;return;}// CCP2中断服务子程序 void CCP2INT(){CCP2IF=0;T1CON=0x01;return;}// 中断入口,保护现场,判中断类型 void interrupt INTS(){di();if(TMR1IF) TMR1INT();// 定时器TMR1中断 e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值