📄 pelirtos.c
字号:
/*
********************************************************************************************************************
*描述: 独立的CAN 控制器SJA1000PeliCAN在small rtos中的应用示例
*文件名: PELIRTOS.c
*应用语言: KEIL C51
*应用系统: small rtos
*版本 : V1.0
*广州周立功单片机发展有限公司 保留所有的版权
********************************************************************************************************************
*/
#define _TIME_MODULE_H
#define _SERIAL_H
/*
************************************************************************************************************************
** 导入头文件
************************************************************************************************************************
*/
#include "..\inc\INCLUDES.h"
/*
************************************************************************************************************************
** 系统定时中断处理
************************************************************************************************************************
*/
void UserTickTimer(void)
{
TMOD = (TMOD & 0XF0) | 0X01;
TL0 = 0x80;
TH0 = 0xfa;
TR0 = 1;
ET0 = 1;
TF0 = 0;
}
/*
************************************************************************************************************************
** 微处理器初始化
************************************************************************************************************************
*/
void CpuInit(void)
{
CKCON=1; //应用6clock
}
/*
************************************************************************************************************************
** main
************************************************************************************************************************
*/
void main(void)
{
CpuInit();
TMOD = (TMOD & 0XF0) | 0X01;
TL0 = 0x80;
TH0 = 0xfc;
TR0 = 1;
ET0 = 1;
TF0 = 0;
OSStart();//启动small rtos
}
/*
************************************************************************************************************************
** can control send task
************************************************************************************************************************
*/
static unsigned char CanRcvBuf[10];
static unsigned char CanSendBuf[10];
unsigned int *p;
static unsigned char ErrorData;
void send(void)
{
if(BCAN_HW_INIT(00,0xff,0x0e,0xaa, 0x40)) //初始化
{
ErrorData=0xff;
OSSendSignal(3);
}
CanSendBuf[0]=0x00;
CanSendBuf[1]=0x08;
while(1)
{
OSWait(K_TMO+K_SIG,100);
p=(unsigned int *)CanSendBuf;
(*p)++;
p=(unsigned int *)&CanSendBuf[2];
(*p)++;
SJASendData(CanSendBuf,0x01);
}
}
/*
************************************************************************************************************************
** display task
************************************************************************************************************************
*/
void display(void)
{
while(1){
OSWait(K_TMO,2);
Show_LED(); //dp51 led显示处理
}
}
/*
************************************************************************************************************************
** error task
************************************************************************************************************************
*/
void error(void)
{
while(1){
OSWait(K_SIG,0);
P_structDisplayLedApp->DisplayBuf[1]=0x0E;
P_structDisplayLedApp->DisplayBuf[2]=0x12;
P_structDisplayLedApp->DisplayBuf[4]=(unsigned char)ErrorData&0x0f;
P_structDisplayLedApp->DisplayBuf[3]=((unsigned char)ErrorData&0xf0)>>4;
}
}
/*
************************************************************************************************************************
** error task
************************************************************************************************************************
*/
void CanRcv(void)
{
while(1)
{
OSWait(K_TMO,2);
if(SJARcvData(CanRcvBuf) == 0)
{
structDisplayLedApp.DisplayBuf[1]=CanRcvBuf[2]>>4;
structDisplayLedApp.DisplayBuf[2]=CanRcvBuf[2]&0x0f;
structDisplayLedApp.DisplayBuf[3]=CanRcvBuf[3]>>4;
structDisplayLedApp.DisplayBuf[4]=CanRcvBuf[3]&0x0f;
memcpy(CanSendBuf,CanRcvBuf,10);
OSSendSignal(0);
ErrorData =0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -