📄 main.c
字号:
#include <avr/io.h>
#include<avr/delay.h>
#include "os.h"
#define SET_YEL_LED PORTA&=~_BV(PA0) //黄灯
#define CLR_YEL_LED PORTA|=_BV(PA0)
#define SET_GEN_LED PORTA&=~_BV(PA1) //绿灯
#define CLR_GEN_LED PORTA|=_BV(PA1)
#define SET_RED_LED PORTA&=~_BV(PA2) //红灯
#define CLR_RED_LED PORTA|=_BV(PA2)
void Delay(void);
void FlashLedYel(void);
void FlashLedRed(void);
void FlashLedGen(void);
int main(void)
{
MainHardwareInit(); //硬件初始化
OSSchedInit(); //队列初始化设置队首,队尾均为0
MainStdControlInit();
MainStdControlStart();
EnableInterrupt(); //开中断
PORTA=_BV(PA0)|_BV(PA1)|_BV(PA2);
DDRA=_BV(PA0)|_BV(PA1)|_BV(PA2); //设置PA0,PA1,PA2为输出口
OSPostTask(FlashLedYel); //添加任务
while (1) {
OSHRunTask(); //运行任务
}
return 1;
}
/****************************************************************************
*名称: FlashLedYel()
*功能:控制黄灯闪烁,并将控制红灯闪烁的函数添加至任务队列
*入口参数:无
*出口参数:无
******************************************************************************/
void FlashLedYel(void)
{
SET_YEL_LED;
Delay();
CLR_YEL_LED;
Delay();
OSPostTask(FlashLedRed);
}
/****************************************************************************
*名称: FlashLedRed()
*功能:控制红灯闪烁,并将控制绿灯闪烁的函数添加至任务队列
*入口参数:无
*出口参数:无
******************************************************************************/
void FlashLedRed(void)
{
SET_RED_LED;
Delay();
CLR_RED_LED;
Delay();
OSPostTask(FlashLedGen);
}
/****************************************************************************
*名称: FlashLedGen()
*功能:控制绿灯闪烁,并将控制黄灯闪烁的函数添加至任务队列
*入口参数:无
*出口参数:无
******************************************************************************/
void FlashLedGen(void)
{
SET_GEN_LED;
Delay();
CLR_GEN_LED;
Delay();
OSPostTask(FlashLedYel);
}
void Delay()
{
int i;
for (i = 0; i < 100; i++)
_delay_loop_2(1843); //7.3728M/4000
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -