关于AVR单片机点亮LED及下载软件使用方法的问题,望高手解答!
1.用的Atmega128A,程序如下,一个端口控制8个LED,先亮4个隔1秒后亮另外4个(编译环境是ICCAVR的,使用内部默认的1M时钟频率),执行后只亮了前面4个,...
1.用的Atmega128A,程序如下,一个端口控制8个LED,先亮4个隔1秒后亮另外4个(编译环境是ICCAVR的,使用内部默认的1M时钟频率),执行后只亮了前面4个,然后就停在那里了,想不通为何没有循环。
#include <iom128v.h>
#define uint unsigned int
void delay(uint a)
{
uint b=1000;
while(a--)
while(b--);
}
void main(void)
{
while(1)
{
PORTC = 0xf0;
delay(1000);
PORTC=0x0f;
delay(1000);
}
}
2.我下载程序用的PROGISP167+USBASP,每次下载程序都是两步“调入flash”——“自动”,现在我想改变熔丝位的值,让系统用内部8M的时钟频率,在向导方式里勾选了“内部RC振荡(8M)起振时间6CK+65MS”,然后还是“调入flash”——“自动”,请问我成功设置了芯片的熔丝位了吗?为何我将下载器拔下第二次插上的时候,点了“RD”,熔丝位的值又变回系统默认的了???右边那个框框“时钟校正”有个“读出”是啥意思? 展开
#include <iom128v.h>
#define uint unsigned int
void delay(uint a)
{
uint b=1000;
while(a--)
while(b--);
}
void main(void)
{
while(1)
{
PORTC = 0xf0;
delay(1000);
PORTC=0x0f;
delay(1000);
}
}
2.我下载程序用的PROGISP167+USBASP,每次下载程序都是两步“调入flash”——“自动”,现在我想改变熔丝位的值,让系统用内部8M的时钟频率,在向导方式里勾选了“内部RC振荡(8M)起振时间6CK+65MS”,然后还是“调入flash”——“自动”,请问我成功设置了芯片的熔丝位了吗?为何我将下载器拔下第二次插上的时候,点了“RD”,熔丝位的值又变回系统默认的了???右边那个框框“时钟校正”有个“读出”是啥意思? 展开
展开全部
那要看你自动里面有没有选择下载熔丝位,要是没选择,那就要单独下熔丝位了。
个人建议,在自动里面不要选择下熔丝位,也就是说熔丝位最好单独下载,独立于flash下载。
另外,为什么不能正常运行,你要把延时写成这样:
void delay(uint a)
{
uint b=1000;
while(a--)
{
while(b--);
b=1000; // 注意加上这句。建议以后不如用for语句,免得出问题不知道在哪。
}
}
另外,主函数里也要注意:
void main(void)
{
DDRC=0XFF; // 设置PC口的方向啊!
while(1)
{
PORTC=0xf0;
delay(1000);
PORTC=0x0f;
delay(1000);
}
}
个人建议,在自动里面不要选择下熔丝位,也就是说熔丝位最好单独下载,独立于flash下载。
另外,为什么不能正常运行,你要把延时写成这样:
void delay(uint a)
{
uint b=1000;
while(a--)
{
while(b--);
b=1000; // 注意加上这句。建议以后不如用for语句,免得出问题不知道在哪。
}
}
另外,主函数里也要注意:
void main(void)
{
DDRC=0XFF; // 设置PC口的方向啊!
while(1)
{
PORTC=0xf0;
delay(1000);
PORTC=0x0f;
delay(1000);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询