gracialee 发表于 2013-3-28 20:55:42

CVAVR中调试MEGA128,用时钟中断方式点亮LED引起的疑问?

CVAVR版本是2.04.4a,也就为了亮一个LED灯,程序如下:
#include <mega128.h>
#define uchar unsigned char
#define uintunsigned int

interrupt void timer0_ovf_isr(void)
{
    PORTA.1=~PORTA.1;
}

void delay_ms1(uint a)
{
    uchar i;
   while(a--)
       {
             for(i=0;i<255;i++);
       }
}

void main(void)
{
    PORTA=0x01;
    DDRA=0xFF;

    TCNT0=0x05;
    TCCR0=0x05;
    TIMSK=0x01;
    #asm("sei")

    while (1)
    {            
      PORTA.0=0;
      delay_ms1(255);
      PORTA.0=1;
      delay_ms1(255);
    };
}
PA0以高低电平输出的方式,PA1以中断的方式输出,现在我看到的现象是,中断的方式正常。而高低电平输出的方式不正常。

按程序中的 while()循环里的语句,高低电平的延时相等,意味着这个输出将是占空比为50%的方波,也就是说亮灭时间相等,呈一亮一灭等时交递,但现在的现象是,当先0后1的语句顺序时,很短促地亮一下,当先1后0时,一直是亮着的(这里要补充说明一下,可能这当中有一个低电平,由于时间很短,而人眼有视觉暂留特性,所以看起来是一直亮)。

这是为何呢?明明是一个占空比为50%的方波,为何看不到该现象?--------很均衡地一闪一闪?
页: [1]
查看完整版本: CVAVR中调试MEGA128,用时钟中断方式点亮LED引起的疑问?