打印
[AVR单片机]

希望有人帮我看看这个小程序哪里出了问题,,谢谢

[复制链接]
1606|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mayday|  楼主 | 2011-11-18 08:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的AVR程序 用的计时器1,,发现他根本没法计时,,不知道哪里配置错了,,希望朋友们能帮忙解决一下,,谢谢,,或者给我一个定时器1的正确程序,,在此感谢。。。#include<iom16v.h>
#include<macros.h>
#pragma interrupt_handler jishi:9
int num;
void delay(int z)
{
   int x,y;
   for(x=0;x<z;x++)
      for(y=1141;y>0;y--);
}
void Timer1_Init(void)
{
       TCCR1B|=BIT(2);

TCNT1H=0X85;            //赋初值,定时器1s

TCNT1L=0XED;

TIMSK|=BIT(2);

SREG|=BIT(7);
}
void jishi()
{
   num++;
   TCNT1H=0X85;

TCNT1L=0XED;
}
void Timer1_Stop(void)
{
   TIMSK &= ~BIT(2);      //关闭定时器中断
}
void main()
{
  DDRA=0xff;
  Timer1_Init();
  for( ; ;)
  {

   PORTA=0xff;
   delay(1);
   if(num==6)
   {
   PORTA=0;
   num=0;
   delay(1000);
   }
   }
}

相关帖子

沙发
hrrhappy| | 2011-11-18 10:02 | 只看该作者
#include<iom16v.h>
#include<macros.h>

#define uint unsigned int
#define uchar unsigned char

#define set_pc6  PORTC|=BIT(6)
#define set_pd7  PORTD|=BIT(7)
#define set_pc1  PORTC|=BIT(1)
#define set_pc0  PORTC|=BIT(0)

#define clr_pc6  PORTC&=~BIT(6)
#define clr_pd7  PORTD&=~BIT(7)
#define clr_pc1  PORTC&=~BIT(1)
#define clr_pc0  PORTC&=~BIT(0)
#pragma interrupt_handler count:9

uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar ge,shi,bai,qian,num;

void count(void)
{
           num++;
           TCNT1H=0X85;
           TCNT1L=0XED;
           if(num==60)
       num=0;      
           ge++;
           if(ge==10)
           {
                      ge=0;
                   shi++;
                   if(shi==10)
                   {
                      shi=0;
                          bai++;
                          if(bai==10)
                          {
                             bai=0;
                                 qian++;
                                 if(qian==10)
                                 {
                                    qian=0;
                                 }
                          }
                   }
           }
}

void main(void)
{
   
    DDRA=0XFF;
        DDRB=0XFF;
        DDRC=0XFF;
        DDRD=0XFF;
        TCCR1B=0X04;
        TCNT1H=0X85;
        TCNT1L=0XED;
        TIMSK|=BIT(2);
        SREG|=BIT(7);
        while(1)
        {
        set_pc0;
        PORTA=table[ge];
        delay(5);
        clr_pc0;
        set_pc1;
        PORTA=table[shi];
        delay(5);
        clr_pc1;
        set_pd7;
        PORTA=table[bai];
        delay(5);
        clr_pd7;
        set_pc6;
        PORTA=table[qian];
        delay(5);
        clr_pc6;
        }
}

使用特权

评论回复
板凳
dzmmjy| | 2011-11-21 11:02 | 只看该作者
现在找到问题没有  我也刚写了一段 不知道为什么不计数  
我写到1602里面去 后来发现不显示 把 TC中断拿出来 才发现不计数  求解中

使用特权

评论回复
地板
l594549729| | 2011-11-23 21:08 | 只看该作者
#include<iom16v.h>
int num=0;
void port_init()
{
DDRD|=BIT(PD5);
PORTD|=BIT(PD5);
}
void timer1_init()
{
SREG=0X80;
TIMSK|=BIT(TOIE1);
TCCR1A=0X00;
TCCR1B=0X01;
}
#pragma interrupt_handler timer1_over:9
void timer1_over()
{
num++;
if(num==1)
{
num=0;
PORTD=~(PORTD);
}
}
void main()
{
port_init();
timer1_init();
while(1);
}
希望对你有帮助哈。

使用特权

评论回复
5
l594549729| | 2011-11-23 21:08 | 只看该作者
#include int num=0; void port_init() { DDRD|=BIT(PD5); PORTD|=BIT(PD5); } void timer1_init() { SREG=0X80; TIMSK|=BIT(TOIE1); TCCR1A=0X00; TCCR1B=0X01; } #pragma interrupt_handler timer1_over:9 void timer1_over() { num++; if(num==1) { num=0; PORTD=~(PORTD); } } void main() { port_init(); timer1_init(); while(1); } 希望对你有帮助哈。

使用特权

评论回复
6
Mayday|  楼主 | 2011-11-25 10:00 | 只看该作者
3# dzmmjy
我现在找到问题了,,谢谢哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

87

帖子

1

粉丝