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

📄 common.c

📁 微程序控制器采用ATMEL AVR MEGA162
💻 C
字号:
#include "common.h"
void delay(BYTE a)
{
    while(a)
    a--;
    asm("nop");
}


void DelayM(BYTE c)
{
    unsigned char a;
	unsigned int b;
    for (a = c; a; a--)
    for (b = 64911; b; b++)
    ;
}

void DelayMORE(BYTE c)
{
    unsigned char a;
	unsigned int b;
    for (a = c; a; a--)
    for (b = 1; b; b++)
    ;
}


BYTE volatile timerCounter = 0;
BYTE volatile timerCounter1 = 0;
BYTE volatile timerCounter2 = 0;
BYTE timepoint;
BYTE timepoint1;
BYTE timepoint2;
void initTimer()
{
 	TCCR0 = 5;  // timer0 prescale 1/1024 (7)
  	timepoint=255;
}
#pragma interrupt_handler SIG_OVERFLOW0:18

void SIG_OVERFLOW0(void)//timer0
{
  	if(timerCounter++ > timepoint){
		PORTD ^= BIT(STA);
        PORTD ^= BIT(STC);
        PORTA ^= BIT(SPEAKER);//alarm
		timerCounter = 0;
	}
    
}
void initTimer2()
{
 TCCR2= 5; //prescale 1/1024

 timerCounter2 = 20;
}
#pragma interrupt_handler timer2_ovf_isr:12
void timer2_ovf_isr(void)//timer2
{
  	if(timerCounter2++ > timepoint2){
		
		cbi( TIMSK, TOIE2 );
        timerCounter2 = 0;
        PORTA |= BIT(SPEAKER);
	}
}

void timer1_init(void)
{
 TCCR1B= 0x00; //stop18s
 TCCR1A= 0x00;
 TCCR1B= 0x05; //start Timer
 timepoint1=3;
}
#pragma interrupt_handler timer1_ovf_isr:16
void timer1_ovf_isr(void)
{

 //TCNT1H= 0x02; //reload counter high value
 //TCNT1L= 0xE1; //reload counter low value
    if(timerCounter1++ > timepoint1){
    	watchdog_init();//reset
    }
    //PORTA ^= BIT(SPEAKER);
}



void watchdog_init() 
{ 
    WDR();
    WDTCR=0x18;
    WDTCR=0x08;//最快复位8,最慢f
} 

⌨️ 快捷键说明

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