📄 tx.c
字号:
/*PIC18F8680自带can发送程序*/
#include<p18f8680.h>
/***********************************************************************************
函数功能:初始化CAN模块
入口参数:无
出口参数:无
调用说明:无
***********************************************************************************/
void ini_can(void)
{
TRISG |= 0x04;
TRISG &= 0xFC;
ECANCON &=0X3F;
CANCON |= 0x88;
CANCON &= 0xF9;
while((CANSTAT&0X80)!=0X80);
TXB0CON |=0X03;
CIOCON &= 0x0F; //CANTX2信号输出形式,can捕捉使能
TXB0DLC &=0XB0;
TXB0DLC |=0X08;
BRGCON1=0X01; //TQ=1us,Tsjw=1TQ
BRGCON2=0B11001011; //Tphase2 PROGRAMBLE,SAM THREE,Tpg=2TQ,Tphase1=4TQ
BRGCON3=0B10000011; //Tphase2=4TQ,do not use wake up
//Tpg+Tphase1>=Tphase2>=Tsjw
TXB0SIDH=0X00;
TXB0SIDL&=0X14;
RCON |=0X80;
INTCON |=0X80;
PIE3=0X04;
IPR3=0X04;
}
/***********************************************************************************
函数功能:启动CAN模块发送
入口参数:无
出口参数:无
调用说明:无
***********************************************************************************/
void can_tx(void)
{
CANCON &=0X1F;
while((CANSTAT&0XE0)!=0X00);
//INTCON |=0XC0;
//PIE3=0X04;
TXB0CON&=0XF7;
TXB0D7=0X57;
TXB0D6=0X56;
TXB0D5=0X55;
TXB0D4=0X54;
TXB0D3=0X53;
TXB0D2=0X52;
TXB0D1=0X51;
TXB0D0=0X50;
TXB0CON|=0X08;
while((TXB0CON|0XF7)==0XFF); //发送未完成,等待
PIR3bits.TXB0IF = 0;
}
/***********************************************************************************
函数功能:主函数,通过RS232显示CAN发送情况
入口参数:无
出口参数:无
调用说明:无
***********************************************************************************/
void main(void)
{
ini_can();
while(1)
{
can_tx();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -