| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:求教AVR单片机定时器问题
只看楼主 加入收藏
海蓝天空
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-11-20
收藏
 问题点数:0 回复次数:0 
求教AVR单片机定时器问题
我用定时器0中断产生一个方波脉冲,但是仿真出方波的频率和实际烧入单片机实际产生的方波频率差别很大,不知道什么原因。我用的是Atmega16,4M晶振,想产生300HZ和200HZ的方波。
程序代码:
    
                                    
#include <iom16.h>
#include<intrinsics.h>
#define xtal 8
#define uchar unsigned char
#define uint  unsigned int        
        uint vss_ctr=0,tach_ctr=0;
/***************************************/
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0xFF;
 PORTB = 0x00;
 DDRB  = 0xFF;
 PORTC = 0x04;
 DDRC  = 0xFF;
 PORTD = 0x00;
 DDRD  = 0xFF;
}
/***************************************/
void timer0_init(void)               
{               
 TCNT0 = 0xE7;        
 TCCR0 = 0x02;
}
/***************************************/
#pragma vector=TIMER0_OVF_vect
__interrupt void timer0_ovf_isr(void)
{
 TCNT0=0xFD;
 vss_ctr++;
 tach_ctr++;
 if(vss_ctr>=150)
   {PORTA^=1<<1;vss_ctr=0;}
 if(tach_ctr>=90)
   {PORTA^=1<<0;tach_ctr=0;}
}
/***************************************/
void init_devices(void)
{
 timer0_init();
 port_init();
 TIMSK=0x01;                          //开启timer0
 SREG=0x80;                           //开启总中断
}
/***************************************/
void Delay_1ms(void)       
{
 uint i;
 for(i=1;i<(uint)(xtal*143-2);i++);
}
/***************************************/
void Delay_nms(uint n)       
{
 uint i=0;
 while(i<n)
  {
   Delay_1ms();
   i++;
  }
}
/***************************************/
void main(void)
{
  Delay_nms(1000);
 init_devices();

while(1)
{     ;
 }
}
搜索更多相关主题的帖子: 单片机 定时器 include 
2011-11-20 19:00
快速回复:求教AVR单片机定时器问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031387 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved