小弟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);
}
此帖出自
小平头技术问答
#include <avr/io.h>
void delay_ms()
{
volatile int i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
int main(void)
{
DDRG = 0x05; //端口G除PG2外,其它都配置为输入
PORTG = 0xfa; //使能端口G的上拉电阻,PG2和PG0输出0
delay_ms();
while(1)
{
PORTG |= _BV(PG2);
}
}
一周热门 更多>