📄 main.c
字号:
/********************************************************************************************************
* 文 件 名 : main.c
* 程 序 员 : (XieZhiJun) hncsxzj@sohu.com
* (c) Copyright 2007-2007, XieZhiJun
* All Rights Reserved
* 创建日期 :
* 说 明 :
* 修改日期 :
* 修改版本 :
* 说 明 :
********************************************************************************************************/
#define APP_GLOBALS
#include "includes.h"
static void AppInit (void); // 当前项目应用相关的变量 信号量等非硬件初始化
static void McuInit (void); // 硬件相关 当前项目应用初始化
static void IoInit (void); // 初始化 IO
const INT8U drvPatterns[2][16]={
{PDP0, PDD0, PDP1, PDD1, PDP2, PDD2, PDP3, PDD3, PDP4, PDD4, PDP5, PDD5, PDP6, PDD6, PDP7, PDD7},
{PDP7, PDD7, PDP6, PDD6, PDP5, PDD5, PDP4, PDD4, PDP3, PDD3, PDP2, PDD2, PDP1, PDD1, PDP0, PDD0},
};
register volatile INT8U BMotor asm("r14");
/********************************************************************************************************
* 功 能 : 主引导函数
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
static void AppInit (void)
{
TmrInit(); // 软调度器初始化
MCPinInit();
}
/********************************************************************************************************
* 功 能 : 主引导函数
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
void MotorSTask(void)
{
PWMOpen();
PWMSetDucy(999,50);
HallSensor();
TmrStop(MotorS_TASK_PRIO); // 停止任务
}
void PpmTask(void)
{
INT16U Ppm;
cli();
Ppm = ESCBuf.Dm.ICPPpm;
sei();
if((Ppm>800)&(Ppm<2200)){
if(Ppm < ESCBuf.Dm.GasLow){
Ppm = ESCBuf.Dm.GasLow;
}else if(Ppm > ESCBuf.Dm.GasHigh){
Ppm = ESCBuf.Dm.GasHigh;
}
if(GETBIT(BMotor,BMTURN)){ // 是否为单向
if(GETBIT(BMotor,BMF)){ // 手动方向改变标志位
SETBIT(BMotor,BMDDR); // 设物理转动方向
}else{
CLRBIT(BMotor,BMDDR);
}
PWMSetDucy(ESCBuf.Dm.GasHighLow,(Ppm - ESCBuf.Dm.GasLow));
}else{
if(Ppm >= ESCBuf.Dm.GasMiddleH){
CLRBIT(BMotor,BMDDR);
SETBIT(BMotor,BMBRAKEEN);
PWMSetDucy(ESCBuf.Dm.GasHighMiddleH,(Ppm-ESCBuf.Dm.GasMiddleH));
}else if(Ppm <= ESCBuf.Dm.GasMiddleL){
if(GETBIT(BMotor,BMBRAKE)){
}else{
SETBIT(BMotor,BMDDR);
PWMSetDucy(ESCBuf.Dm.GasLowMiddleL,(ESCBuf.Dm.GasMiddleL-Ppm));
}
}else{
PWMSetDucy(ESCBuf.Dm.GasHighLow,0);
}
}
}else{
PWMSetDucy(ESCBuf.Dm.GasHighLow,0);
}
}
int main (void)
{
AppInit(); // 应用初始化 主要是变量或信号量 消息等
McuInit(); // MCU 所有应用的初始化内容
TmrCfgFnct(BEG_TASK_PRIO, BegTask,1); // 启动任务
TmrCfgFnct(LED_TASK_PRIO, LedTask,20); //
TmrCfgFnct(MotorS_TASK_PRIO, MotorSTask,4); //
TmrCfgFnct(PPM_TASK_PRIO, PpmTask,1); //
TmrCfgFnct(TST_TASK_PRIO, HallSensorTask,200); //
TmrStart(BEG_TASK_PRIO); // 启动启动任务
b10MSFlg = 0; //
BMotor = B0000_0110;
ESCBuf.Dm.GasLow = 1000;
ESCBuf.Dm.GasHigh = 2000;
ESCBuf.Dm.GasMiddle = 1500;
ESCBuf.Dm.GasMiddleH = 1550;
ESCBuf.Dm.GasMiddleL = 1450;
ESCBuf.Dm.GasHighLow = ESCBuf.Dm.GasHigh - ESCBuf.Dm.GasLow; // 油门宽度
ESCBuf.Dm.GasHighMiddleH = ESCBuf.Dm.GasHigh - ESCBuf.Dm.GasMiddleH; // 油门高位宽度
ESCBuf.Dm.GasLowMiddleL = ESCBuf.Dm.GasMiddleL - ESCBuf.Dm.GasLow; // 油门低位宽度
sei(); // 开启全局中断
while (1) {
if (b10MSFlg) {
b10MSFlg = 0;
TmrTask();
}
}
return 0;
}
/********************************************************************************************************
* 功 能 : 硬件 软件环境配置函数 包含子部分定义 详细见各自的定义函数
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
static void McuInit (void)
{
IoInit (); // 单片机IO初始化
// ADCInit(); // ADC初始化
Timer0Init(); // 未使用
Timer1Init(); // PWM,ppm输入
Timer2Init(); // 软调度器时间定时在此
PWMInit();
ICPInit();
}
/********************************************************************************************************
* 功 能 : 硬件 软件环境配置函数 IO 状态配置
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
static void IoInit (void)
{
DDRB = B0000_0110; //
PORTB = B1111_1111; //
DDRC = B0000_1000; //
PORTC = B1111_0111; //
DDRD = PDD0; //
PORTD = PDP0|HALL_MASK; //
}
/********************************************************************************************************
* 功 能 :
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
void BegTask (void)
{
TmrStart(LED_TASK_PRIO); // 启动任务
TmrStart(MotorS_TASK_PRIO); // 启动任务
TmrStart(TST_TASK_PRIO); // 启动任务
TmrStart(PPM_TASK_PRIO); // 启动任务
TmrStop(BEG_TASK_PRIO); // 停止任务
}
/********************************************************************************************************
* 功 能 : 测试任务
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
void LedTask (void)
{
INVERTBIT(GLED_PORT,GLED);
}
/********************************************************************************************************
* 功 能 : 测试任务
* 入 口 : 无
* 返 回 : 无
* 说 明 : 无
********************************************************************************************************/
void HallSensorTask (void)
{
}
/********************************************************************************************************
* End of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -