首先我用的编译工具是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();/*循环显示*/
}
} |