⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tx.c

📁 用PIC18F8680的CAN程序。包括发送和接收
💻 C
字号:
/*PIC18F8680自带can发送程序*/
#include<p18f8680.h>
#include<usart.h>
//#include <delays.h>
/***********************************************************************************
函数功能:初始化CAN模块
入口参数:无
出口参数:无
调用说明:无
***********************************************************************************/
void RS232_initial(void);
void RS232_send(int RS232_date);
void ini_can(void)
{

TRISG = 0x04;
ECANCON &=0X3F;
CANCON = 0x88;
while((CANSTAT&0X80)!=0X80);
//TXB0CON |=0X03;
CIOCON = 0x3F;            //CANTX2信号输出形式,can捕捉使能 
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=0X00;  

//RCON |=0X80;
//INTCON |=0X80;
PIE3=0X04;
//IPR3=0X04;
//IPR1=0x10;
}

/************************************************************************************
函数功能:启动CAN模块发送
入口参数:无
出口参数:无
调用说明:无
/***********************************************************************************/
void can_tx(void)
{

//CANCON &=0X1F;
CANCON=0x08;
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;
//RS232_send(0X54);

TXB0CON|=0X08;
//while(PIR3bits.TXB0IF = 0);
//while((TXB0CON|0XF7)==0XFF);		//发送未完成,等待
while(TXB0CONbits.TXREQ == 1);
 PIR3bits.TXB0IF = 0;

}

/***********************************************************************************
函数功能:主函数,通过RS232显示CAN发送情况
入口参数:无
出口参数:无
调用说明:无
***********************************************************************************/

void main(void)
{
 RS232_initial();

 ini_can();
 
while(1)
{
can_tx();
}
}
//-------------------串口初始化、发送----------------------------
void RS232_initial(void)
{   
	TRISC = 0X80;//c对应口input
	TXSTA = 0X04;//设定TXSTA寄存器。高速
    SPBRG = 64;//10MHZ, BRGH=1, 9600BPS.
    PIE1 = 0X10;//清除PIE1所有中断使能。
    RCSTA = 0X80;//禁止接收。
	INTCON = 0XC0;//清中断
}
void RS232_send(int RS232_date)
{
	TXREG = RS232_date;
	TXSTAbits.TXEN=1;//启动发送,TSR开始移位操作。
	while (PIR1bits.TXIF==0);//等待中断,在此为查询方式。
	while (TXSTAbits.TRMT==0);//判断是否TSR发送完毕,未完等待。
	TXSTAbits.TXEN=0;//关发送功能,防止TXREG空时,TXIF产生置位。
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -