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

📄 main.c

📁 这个源码主要是实现简单型的232转CAN功能的源代码
💻 C
字号:
#include <at89x52.h>
#include "SJA1000_PELI.h"

extern bit g_TiFlag;
extern bit g_RiFlag;

extern void SJAInit(void);
extern bit SJAReceData(unsigned char *ReceiveDataBuf);

void SerialInit(void);
void ComSendChar(unsigned char ch);
void ComSendArr(unsigned char *buffer);
void  ReceData(void);

void DelayTime (unsigned char times);

unsigned char canbuffer[11];
unsigned char combuffer[5];
bit g_ComSendFlag;
/*********************************************************************************************
主函数
*********************************************************************************************/
void main(void)
{
	SJA_RESET = 1;
    DelayTime(50);
    SJA_RESET = 0;
    DelayTime(500);
    SJA_RESET=1;

	EA = 0;
	SJAInit();
	SerialInit();

	EX0 = 1;
	EA =1;

    while(1)
	{
	    P1_3 = 1;
	    if (g_RiFlag)
		{
			g_RiFlag = 0;
		   	ReceData();
			P1_0 = !P1_0;
		}

		if (g_ComSendFlag)
		{
		    g_ComSendFlag=0;
			ComSendArr(combuffer);
			P1_1 = !P1_1;
		}
		P1_3 = 0;
	}
}

/**********************************************************************************************
串口
**********************************************************************************************/
void SerialInit(void)
{
	TMOD  = 0x20;	    	//定时器1工作于方式2:8位常数自动装载
    SCON  = 0x50;			//串口方式1
	//PCON |= 0x80;			//SMOD = 1
	TH1   = 0xff;	        //11.0592MHz.
	TL1   = 0xff;			//BAUDRATE = 57600
	
	//ET1 = 1;				//打开定时器1中断
	TR1 = 1;				//定时器1开始计数
	//ES  = 1;			    //打开串口中断

	//IT0 = 1;				//INT0边缘触发
	//EX0 = 1;  			//打开外部中断
}

void ComSendChar(unsigned char ch)
{
    SBUF = ch;
	while(!TI);
	TI = 0;
}

void ComSendArr(unsigned char *buffer)
{
    unsigned char i;
	for(i=0; i<5; i++)
	{
	   ComSendChar(buffer[i]);
	}
}
/**********************************************************************************************
CAN
**********************************************************************************************/
void  ReceData(void)
{
	 SJAReceData(canbuffer);
	 SJARegWrite(1,0x04);

	 combuffer[0]=canbuffer[1];
	 combuffer[1]=canbuffer[3];
	 combuffer[2]=canbuffer[4];
	 combuffer[3]=canbuffer[5];
	 combuffer[4]=canbuffer[6];

	 g_ComSendFlag = 1;
}
/**********************************************************************************************
延时
**********************************************************************************************/
void DelayTime (unsigned char times)
{
     unsigned char i=0;
     while(times--)
     {
         for(i=0;i<50;i++)
         {;}
     }
}

⌨️ 快捷键说明

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