打印
[AVR单片机]

AMTEGA128 定时器1参数设置问题,请各位大侠赐教!

[复制链接]
3057|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dc42733255|  楼主 | 2011-6-1 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先我用的编译工具是AVRGCC,调试工具是AVRSTUDIO.4.0
我想用AVR atmeg128 定时器的溢出中断做一个5MS定时,然后把数传输到两个8段数码管显示,但是我的程序在进入定时器1初始化的的时候出现了定时器初始值赋值不正确。问题点在程定时器初始化函数里面,请看下面:'( :'( :'( :'(
谢谢!



#include<avr/io.h>
#include<avr/interrupt.h>
#include<util/delay.h>
/*-----------------------------------------------------------*/
#define le_1 PORTA=0x01/*选择 个位 数码管*/
#define le_2 PORTA=0X02/*选择 十位 数码管*/
/*------------------选择PA口0、1位控制锁存器--------------------------*/
#define uchar unsigned char
uchar table[2];/*暂时存十进制值 */
uchar data[10]={0xc0,0xf9,0xa4,0xb0, /* 0-3字符*/
               0x99,0x92,0x82,0xf8, /* 4-7字符  */
      0x80,0x90};/* 8-9字符  */
uchar flag=0;
void port_init(void)/* ----I/O口初始-----*/
{DDRA=0x03;
DDRB=0xff;
}
void display_led(void)
{
   le_1;                /*选择个位数码管显示数据*/
  PORTB=data[(table[0])]; /*个位----table数组第0位值X,对应存放data数组中X位的数码管显示X的16进制代码 数*/
  _delay_ms(1);
  le_2;              /*选择十位数码管显示数据*/
   PORTB=table[(table[1])];/*十位----table数组第1位值X,对应存放data数组中X位的数码管显示X的16进制代码 数*/
  _delay_ms(1);
}




void timer1_init(void)/*定时器1初始化:'( :'( :'( :'( :'( :'( :'( :'( */
{TCCR1A=0x00;
TCCR1B=0x04;/*256分频:L :'( :'( :'( 程序执行到这里时,AVRSTUDIO中寄存器TCNT1H也有了值为0x04。不解:dizzy: */
TIMSK=0x04;/*COUNTER1 溢出中断*/

TCNT1L=0x70;
TCNT1H=0xff;/*定时器5mS:L :'( :'( :'( :'( :'( 程序执行完这步后,AVRSTUDIO中寄存器TCNT1H的值还是0x04,未变,:( 不知道怎么回事*/
sei();
}





SIGNAL(SIG_OVERFLOW1)/*溢出中断函数*/
{
flag++;
table[0]=flag%10;
table[1]=flag/10;
if(flag==60)
  flag=0;
TCNT1L=0x70;
TCNT1H=0xff;


}

int main(void)
{   port_init();
    timer1_init();
   while(1)
       {
          display_led();/*循环显示*/

        }
}

相关帖子

沙发
likeliao| | 2011-6-2 10:49 | 只看该作者
有没有试下把中断使能放在计数器赋初值后面?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dc42733255 + 1
板凳
dc42733255|  楼主 | 2011-6-2 13:57 | 只看该作者
我试过了,不论怎样放,在AVRavrstiduo.4.0,显示计数器处置不对,后来把程序其他部分都删除,就只要主函数和溢出中断程序和定时器初始化。但是结果还,当程序执行到TCCR1B后,计数器1高字节被复制为TCCR1B的值,怪异了!!!!

使用特权

评论回复
地板
likeliao| | 2011-6-3 11:51 | 只看该作者
难道是寄存器地址对应不对?或者说TCCR1B寄存器的地址被改为了TCNT1H的地址。
再或者你的头文件AVR头文件本身就算不是对应的。
检查下看看吧。
其他的我也对着寄存器看了,感觉没什么错误的·,唯一解释就是寄存器地址不对了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dc42733255 + 1
5
likeliao| | 2011-6-3 11:52 | 只看该作者
当然这些都是我的看法哈····:shutup:

使用特权

评论回复
6
chenczy| | 2011-6-3 16:18 | 只看该作者
中断程序在那里?怎么看怎么别扭的

使用特权

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

本版积分规则

12

主题

101

帖子

0

粉丝