AVR 用計數器1溢出中斷實現秒錶 出錯

       我最近在學習AVR,用的是atmega128的學習板,想用其計數器1的溢出中斷以及數碼管顯示實現秒錶(2位),但是,感覺程序一直沒有進入中斷,該學習板晶振爲16M,我設置的是256分頻,還請熟悉AVR的高手幫忙指點一下我的問題出在哪裏。另外,顯示時間設置問題,我的兩個數碼管都是間隔閃爍,我希望看起來能夠像同時閃爍。謝謝!
    

     注:我所用的編譯軟件是ICCAVR7(用於win7系統),程序燒寫軟件用的是AVR_fighter.

程序如下:

#include <iom16v.h> //包含型號頭文件
#include <macros.h> //包含"位"操作頭文件
#define uint unsigned int 
#define uchar unsigned char
#pragma interrupt_handler miao:15 //中斷函數申明 中斷函數名:定時計數器1溢出中斷向量號
uchar table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};   //數碼管
uchar num=0;
void delay(uint ms)
{
  uint i,j;
for(i=0;i<ms;i++)
{
 for(j=0;j<1141;j++);
}
}
void show(uchar k,uchar l)
{
    PORTC=table[k];
PORTB&=~BIT(l+4);
delay(1);
PORTC=0XFF;
PORTB|=~BIT(4)|~BIT(5)|~BIT(6)|~BIT(7);
}
void miao()
{
    if(num=60)
  num=0;
else 
  num++;
TCNT1H=0X0B;
TCNT1L=0XDB;//計數器重新賦值
}
void main()
{
    DDRC=0XFF;
DDRB|=BIT(4)|BIT(5)|BIT(6)|BIT(7);
PORTC=0XFF;
PORTB|=~BIT(4)|~BIT(5)|~BIT(6)|~BIT(7);

TCCR1B=0x04;//256分頻
TCNT1H=0X0B;
TCNT1L=0XDB;
TIMSK|=BIT(2);
SREG|=BIT(7);

while(1)
{
  show(num/10,1);//取整 作爲秒
  show(num%10,0);//取餘 
}
}
發佈了8 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章