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

📄 main.c

📁 使用MC9S12DP256写的CAN转串口程序。
💻 C
字号:
#include <hidef.h>
#include <string.h>

#include <math.h>
#include <mc9s12dp256.h>


#include "define.h"
#include "Initial.h"
#include "SCI_COM.h"

#include "Interrupt.h"
#include "CAN_COM.h"

#pragma CODE_SEG DEFAULT
void main(void)
{
	uchar i = 0;
	uint j = 0;	
	uchar Recv_index = 0;

	Delay(50000);
	CLKSEL = 0x80;//2倍频
//	COPCTL = 0x07;//	(*   Page 289   *)看门狗
//------------------------------------------------------------------------------------
//	RTIInit();
	SCI_Initial();	//串口初始化
	CAN0_Initial();	//CAN0初始化	
//------------------------------------------------------------------------------------
	EnableInterrupts;//中断使能		
	
	SendFrame.RemoteFlag = 0;
	SendFrame.ExternFlag = 1;
	SendFrame.ID = 0x12345;
	SendFrame.Priority = 3;
	SendFrame.DataLen = 8;
	
	for(i=0;i<8;i++)	
		SendFrame.Data[i] = i;	
		
	while(1)
	{		
		if(RX_OK == 0x01)
		{			
			if(frame_status & (0x0001<<Recv_index))
			{
				Write_To_SCI1_UCHAR_ASCII(0xAA);//帧起始
				
				for(i=0;i<32;i+=8)
					Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].ID >> i);
			
				Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].RemoteFlag);
				Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].ExternFlag);
				Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].DataLen);
				
				for(i=0;i<8;i++)
					Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].Data[i]);		
				
				Write_To_SCI1_UCHAR_ASCII(Recv_Frame[Recv_index].frame_status_OBJ);	
				
				Write_To_SCI1_UCHAR_ASCII(0xBB);//帧结束
				
				frame_status &= ~(0x0001<<Recv_index);//发送完毕,把相应位清0
			}		
			
			Recv_index++;	
			if(Recv_index == 16)
				Recv_index = 0;				
		}
		
		switch(SCI_CMD)
		{
			case 0:				
				break;
			case 0x01://启动CAN接收
				SCI_CMD = 0;
				RX_OK = 0x01;
				CAN0RIER = 0x01;//使能CAN0接受中断				
				break;
			case 0x02://停止CAN接收
				SCI_CMD = 0;
				RX_OK = 0x00;
				Recv_index = 0;
				Recv_buffer_overflow = 0;
				frame_status = 0;
				CAN0RIER = 0x00;//禁止CAN0接受中断
				break;
			case 0x03://和上位机握手命令
				Write_To_SCI1_UCHAR_ASCII(0xAA);//帧起始
				for(i=0;i<16;i++)
					Write_To_SCI1_UCHAR_ASCII(0xA5);
				Write_To_SCI1_UCHAR_ASCII(0xBB);//帧起始
				SCI_CMD = 0;
				break;
			case 0x04://DP256发送一帧
				CAN0TIER = 0x07;
				SCI_CMD = 0;
				break;
			case 0x05:
				SCI_CMD = 0;
				break;
			case 0x06:
				SCI_CMD = 0;
				break;
			default :
				SCI_CMD = 0;
				;			
		}
	}
}

⌨️ 快捷键说明

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