微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Proteus环境下Avr I/O电平反复变化(看门狗复位)

Proteus环境下Avr I/O电平反复变化(看门狗复位)

时间:11-28 来源:互联网 点击:
学习了一个月的avr单片机了,从点亮一个二极管到通信部分,以前都是直接上硬件,下载验证,昨天开始下载了Proteus使用仿真,下载地址是 http://www.verycd.com/topics/2733851/ 发现点亮一个简单的二极管都不成功,cvavr下的程序如下:

#include

void main()

{

DDRB=0XFF;

PORTB=0X00;

while(1);

}

然而就是这么简单的一个程序得到的仿真结果是:





一会高一会低,非常郁闷,学了这么长时间,居然让一个灯常亮都不行了……于是群里问……可惜没人回答

终于,搜索中找到了以下是原文:

这个问题主要会出现在用CVAVR来编译的程序中。

之前学AVR有用到proteus仿真,我用的是proteus7.4,拿一个ATMega16出来,用AVR编译出来的一些简单的程序,根本不能正常的运行,这把我搞的相当的郁闷,后

来在仿真日志中发现原来是看门狗一直都开着,我又没喂狗,因此一直都把处理器复位了,这回我更郁闷,我又没开看门狗,又没配置fuse,为什么自己会开呢,搞了N久后,发

现有这个可能,一个CVAVR本身编译之后在proteus仿真中,默认开了看门狗(实际上我并没有开啊!!!而且在实物中,要配置fuse才能开的吧?)经过考究后发现,原来真的

是CVAVR给开了,因为我问了其它的师兄说他们的proteus没问题),于是试着手动显式关掉看门狗,关闭的方法如下:

1.先喂狗;

2.把WDTCR寄存器中的WDTOE位先置1,然后在接下来马上把WDE位置0;

3.可以了.

具本的C语言代码可以这样写(CVAVR编译器下通过):

#asm("WDR")

WDTCR=0x10;

WDTCR=0x00;

OK,就可以啦,这回在proteus中的仿真日志中就不会再看到诸如“看门狗溢出,处理器被重置”这样可恶的信息了,如果是在仿真中学习AVR的话,建议在主程序一开始就把看门

狗给关掉,毕竟这跟实物不一样的。

希望这能让别的人少走弯路。

以上的情况是在使用CVAVR编译器中出现的,使用ICCAVR貌似没有这个问题。

即在cvavr中应带这么编写:

#include

void main()

{

#asm("WDR")

WDTCR=0x10;

WDTCR=0x00;

DDRB=0XFF;

PORTB=0X00;

while(1);

}

结果仿真成功。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top