📄 init_devices.c
字号:
/**********************/
/* 初始化与中断入口 */
/**********************/
#include "include.h"
void Init_port(void)
{
DDRB = 0x3f;
//DDRB = 0x1f;
PORTB = 0x00;
DDRC = 0x00;
PORTC = 0x00;
DDRD = 0xef;
PORTD = 0x00;
}
void Init_timer0(void)
{
TCNT0 = 0xed;
TCCR0A = 0x00;
TCCR0B = 0x05;
}
#pragma vector=TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
TCNT0 = 0xed;
if(BACK)
{
if(count_XXms) count_XXms--;
if(TIME) TIME--;
}
else
{
count_XXms=0;
TIME=0;
}
}
void Init_timer1(void)
{
TCNT1=65329;
TCCR1A = 0x00;
TCCR1B = 0x00;
}
#pragma vector=TIMER1_OVF_vect//58.5us
__interrupt void timer1_ovf_isr(void)
{
TCNT1=65329;
TCNT1_count++;
}
void Init_timer2(void)
{
TCNT2 = 231;
TCCR2A = 0x00;
TCCR2B = 0x00;
}
#pragma vector=TIMER2_OVF_vect
__interrupt void timer2_ovf_isr(void)
{
RedCon++;
RedCon1++;
}
void Init_watchdog(void)
{
WDR();//为什么要两次呢?
WDTCSR = 0x18;//对WDCE 和 WDE写1, 修改看门狗允许
WDTCSR = 0x0E;// 再对WDE写1 启动看门狗关置分频系数 1秒 复位
/*
以下为关闭看门狗的步骤:
1. 在同一个指令内对 WDCE和 WDE 写 "1“,即使 WDE 已经为 "1“
2. 在紧接的4 个时钟周期之内对 WDE写 "0”。这会禁用看门狗。
*/
}
void init_handle(void)
{
if(Busy) dist=buzzer;
device_code=1;
Sound_out;//busy设为输入
mute(1);
end_TG();
key=EEPROMread(chAddress);
if(key>3){key=3;}//初始化:无论有没有返回的显示器都是语音+锋鸣
data_8[0]=data_8[1]=data_8[2]=data_8[3]=26;
DDRB = 0x1f;
PORTB = 0X00;
}
uchar BACK_scan(void)
{
if(BACK)
{
delayms(10);
if(BACK) return (1);
}
return (0);
}
void Init_devices(void)
{
CLI();
Init_port();
Init_watchdog();
Init_timer0();
Init_timer1();
Init_timer2();
MCUCR = 0x00;
ACSR = 0x80;
EIMSK = 0x00;
EIFR = 0x00;
TIMSK0 = 0x01;
TIMSK1 = 0x01;
TIMSK2 = 0x01;
PCMSK0 = 0x00;
PCMSK1 = 0x00;
PCMSK2 = 0x00;
PCICR = 0x00;
SEI();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -