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

📄 gyrobot.c

📁 AVR单片机做的两轮自平衡机器人
💻 C
字号:
#define ENABLE_BIT_DEFINITIONS
#include "avrx-io.h"
#include "avrx-signal.h"
#include "avrx.h"
#include "hardware.h"
#include "Gyro_eeprom.h"

#ifdef _MONITOR_
  AVRX_GCC_TASK(Monitor, 16, 0);     // External task (AvrX Debug monitor)
  void InitSerialIO(unsigned char);
#endif

AVRX_EXTERNTASK(MotorTask);     // MotorTask.c
AVRX_EXTERNTASK(LcdTask);       // LcdTask.c
AVRX_EXTERNTASK(SensorTask);

AVRX_SIGINT(SIG_OVERFLOW0)  // System clock
{
    IntProlog();
    TCNT0 = TCNT0_INIT;
    AvrXTimerHandler();
    Epilog();
}
/*

  Main initialization and starting of AvrX tasks

*/
int main(void)
{
    AvrXSetKernelStack(0);

    // Initialize Hardware

    outp(MCUCR_INIT, MCUCR);    // See harware.h
    outp(TCNT0_INIT, TCNT0);
    outp(TCCR0_INIT, TCCR0);
    outp(TIMSK_INIT, TIMSK);
    outp(GIMSK_INIT, GIMSK);
    outp(TCCR1A_INIT, TCCR1A);
    outp(TCCR1B_INIT, TCCR1B);

    outp(PORTA_INIT, PORTA);
    outp(DDRA_INIT, DDRA);
    outp(PORTB_INIT, PORTB);
    outp(DDRB_INIT, DDRB);
    outp(PORTC_INIT, PORTC);
    outp(DDRC_INIT, DDRC);
    outp(PORTD_INIT, PORTD);
    outp(DDRD_INIT, DDRD);

    // Initialize tasks

    AvrXRunTask(TCB(MotorTask));
    AvrXRunTask(TCB(LcdTask));
    AvrXRunTask(TCB(SensorTask));

#ifdef _MONITOR_
    InitSerialIO(UBRR_INIT);
    AvrXRunTask(TCB(Monitor));
#endif

    AvrXSetSemaphore(&EEPromMutex);
    (void)ValidateEEPROM();
    
    // Jump to first task
    Epilog();
}

⌨️ 快捷键说明

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