ATMEGA169P PG2端口不能输出高电平

2019-03-24 20:26发布

小弟AVR初学者,最近刚接触AVR,需要用ATMEGA169实现一些控制功能,但是第一个测试程序就无法通过。本想用PG2这个端口输出一个控制信号控制LED闪烁,但是输出的是一个不受控制的方波,高电平14ms,低电平7ms。更奇怪的是如果注释掉Port_Init();后的延时,端口输出一定为零。程序用proteus仿真也正常,但是下载到flash就出现这种奇怪的问题,求助究竟是什么原因啊!
*ATMEGA169P应该没有坏,我用别人的.hex文件下载输出功能正常。
主程序:
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>
#include "FunDef.h"

void delay_ms()
{
        volatile int i,j;
        for(i=0;i<100;i++)
        for(j=0;j<100;j++)
        ;
}
int main(void)
{
        uint8_t i;

        Port_Init();
        delay_ms();
        while(1)
        {
                LED_ON;delay_ms();
                LED_OFF;delay_ms();
        }
}
头文件FunDef.h:
/*Led宏定义*/
#define LED_ON          PORTG |= _BV(PG2)
#define LED_OFF         PORTG &= ~_BV(PG2)
端口定义:
void Port_Init(void)       
{       
        PORTA = 0;       
        DDRA = 0xFF;       
               
        //频率控制端口全部输出0
        PORTB = 0;
        DDRB = 0xFF;
        PORTC = 0;
        DDRC = 0xFF;
        PORTD = 0;
        DDRD = ~_BV(PD1);
        PORTE = 0;
        DDRE = 0xFF;       

        MCUCR &= ~_BV(PUD);       

        DDRF = 0;               
        PORTF = 0xFF;       

        DDRG = _BV(DDG0)|_BV(DDG2);       
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。