风速传感器程序

发布时间:2012-2-29 09:44    发布者:fkwsc
关键词: 风速传感器
/***************************************************
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256   
***************************************************/
#include
#include   
#include #define T1OCR1AH  0x07     
#define T1OCR1AL  0xCFunsigned char Timer0Counter; //一个脉冲周期溢出的次数
unsigned int T;
void InitDevice(void);
void InitWork(void);
void main(void)
{   
   unsigned int Ocr1aValue;
   delay_ms(500);
   InitDevice();
   Timer0Counter=153;
   T=39060;
   while(1)
   {   
      #asm("wdr")
      if(T<78)T=78;
      if(T>=39060)Ocr1aValue=1999;
      else Ocr1aValue=(long)2000*T/(312+T)-1;
      OCR1AH=Ocr1aValue>>8;
      OCR1AL=Ocr1aValue;  
   }
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
   unsigned char data;
   data=TCNT0;TCNT0=0;
   T=(unsigned int)Timer0Counter*256+data;
   Timer0Counter=0;
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
   #asm("sei")
   if(Timer0Counter<153)Timer0Counter++;
   else T=39060;
}
//****************************************************************************
//初始化程序
void InitDevice(void)
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xF7;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
TCCR0=0x05;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000.000 kHz
// Mode: Fast PWM top=OCR1A
// OC1A output: Toggle
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x43;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=T1OCR1AH;
OCR1AL=T1OCR1AL;
// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0x80;
MCUCR=0x08;
GIFR=0x80;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/2048k
#pragma optsize-
WDTCR=0x1F;
WDTCR=0x0F;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Global enable interrupts
#asm("sei")   
}
本文地址:https://www.eechina.com/thread-86645-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表