📄 main.c
字号:
/*
------------------------------------------------------------------
Main.c (v1.00)
------------------------------------------------------------------
Framework for traffic-light controller (multi-state task).
Required linker options (see text for details):
OVERLAY (main ~ (TRAFFIC_LIGHTS_Update),
SCH_Dispatch_Tasks ! (TRAFFIC_LIGHTS_Update))
COPYRIGHT
---------
This code is from the book:
PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont
[Pearson Education, 2001; ISBN: 0-201-33138-1].
This code is copyright (c) 2001 by Michael J. Pont.
--- Modefied by sylva zhu to apply for AVR Microcontroller .
--- Ver 1.0 Sept 25th , 2006 .
------------------------------------------------------------------
*/
#include <iom32.h>
#include <inavr.h>
#include <comp_a90.h>
//
#include "Main.h"
#include "Scheduler.h"
#include "timer.h"
#include "T_lights.h"
#include "T_KeyScan.h"
#include "T_KeyProcess.h"
#include "T_AlarmBell.h"
#include "T_Lcd.h"
#include "RTC.h"
#include "T_Measure.h"
//
//
unsigned char __flash name1[]={" SCHEDULER DEMO "};
unsigned char __flash name2[]={" ENGINEER DEPARTMENT "};
unsigned char __flash name3[]={" FEB 6 , 2006 "};
unsigned char __flash name4[]={" VERSION:2.0A "};
//
//
//*****************************************************************************
//delay routine
void delay( unsigned int i )
{
unsigned int j,k;
for(k=1;k<=i;k++)
{
for(j=1;j<=124;j++)
_NOP();
}
}
//*****************************************************************************
void InitADC(void)
{
//SET ADC REFERENCE VOLTAGE : internal Aref 2.56V .ADC CHANNEL 0
ADMUX|=((1<<REFS1)|(1<<REFS0)|(1<<MUX0));
//ADC ENABLE ,CLEAR ADIF FLAGBIT. 1/64 CLOCK DIVIDER 125KHZ
ADCSRA|=((1<<ADEN)|(1<<ADIF)|(1<<ADPS1)|(1<<ADPS0));
//delay in order for channel selection settle.
__delay_cycles(10);
//run a demo adc
ADCSRA|=(1<<ADSC);
while(!(ADCSRA&(1<<ADIF)));
ADCSRA|=(1<<ADIF);
}
//*****************************************************************************
void InitIOPORT(void)
{
//init_mega32()
// PIN 7,6,1,0 INPUT ; PIN 5,4,3,2 OUTPUT.
//GASADC,TEMPADC ,K17,K18 INPUT
//RUNLED,ALARMLED OUTPUT
DDRA&=~((1<<DDA7)|(1<<DDA6)|(1<<DDA1)|(1<<DDA0));
DDRA|=((1<<DDA2)|(1<<DDA3)|(1<<DDA4)|(1<<DDA5));
PORTA|=(1<<PORTA6)|(1<<PORTA7); // Enable weak pull_up .
// PIN 7 ,6,5,4,3,1 OUTPUT *ALARM BELL OUTPUT ,PIN 0,2 INPUT
DDRD|=((1<<DDD7)|(1<<DDD6)|(1<<DDD5)|(1<<DDD4)|(1<<DDD3)|(1<<DDD1));
DDRD&=~(1<<DDD2);
PORTD|=(1<<PORTD2); // Enable weak pull_up .
//PORTB ALL PIN OUTPUT
DDRB|=((1<<DDB7)|(1<<DDB6)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0));
}
//*****************************************************************************
void InitDevice(void)
{
InitIOPORT();
InitADC();
InitRTC();
}
//
/*
................................................................................
*/
//
void main(void)
{
unsigned char i;
//
// Shut-up watchdog .
WDTCR=(1<<WDTOE)|(1<<WDE);
WDTCR=(0<<WDE);
// Wait power stable .
__delay_cycles(1000);
//
__disable_interrupt();
//
InitDevice();
InitLcd();
ShowString(0,name1); //name1[]={" NTC TESTER "};
ShowString(1,name2); //name2[]={"ENGINEER DEPARTMENT"};
ShowString(2,name3); //name3[]={" JAN 3 , 2005 "};
ShowString(3,name4); //name4[]={"VERSION:2.0A "};
//
for(i=20;i>0;i--)
{
__delay_cycles(5);
__delay_cycles(5);
__delay_cycles(5);
//DelayL();
//DelayL();
//DelayL();
}//delay for display stable
InitLcd();
ShowString(0,name1);
//
//
// Set up the scheduler
SCH_Init();
// Prepare for the traffic light task
TRAFFIC_LIGHTS_Init(RED);
// Add a 'traffic light' task , 1mS tick , every ---500ms--- called .
SCH_Add_Task(TRAFFIC_LIGHTS_Update, 20, 500);
// Add a 'key_scan' task ,every 10ms called .
SCH_Add_Task(KEY_SCAN_Update, 30, 10);
// Add a 'key_process' task , every 100ms called .
SCH_Add_Task(KEY_PROCESS_Update, 40, 100);
// Add a 'Run_bell' task, every 1000ms called .
SCH_Add_Task(ALARM_BELL_TRIG_Update, 50, 300);
// Add a 'RTC' task , every 1000ms called .
SCH_Add_Task(RTC_Update, 65, 1000);
// Add a 'MEASURE' task , every 10ms called
SCH_Add_Task(ADC_Update, 35, 10);
// Start the scheduler .
// Enable interrupt .
SCH_Start();
//
//
while(1)
{
SCH_Dispatch_Tasks();
}
}
/*
------------------------------------------------------------------*-
---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -