搜索
bottom↓
回复: 9

ATmega16A 求大师解释下这个现象,这什么问题~~~

[复制链接]

出0入0汤圆

发表于 2011-12-2 12:13:52 | 显示全部楼层 |阅读模式
#include <avr/io.h>

int main(void)
{
        int i = 0,j = 0;
        DDRB = 0xff;
        while(1)
        {
                for(j = 0;j < 10;j ++)
                        for(i = 0;i < 5000;i ++)
                PORTB = 0xff;
               
                for(j = 0;j < 10;j ++)
                        for(i = 0;i < 5000;i ++)
                PORTB = 0x00;
        }
}

烧完后,一闪一闪正常,但是。。。这样PORTB在不停赋值啊,常规不会这样去写的。如下

#include <avr/io.h>

int main(void)
{
        int i = 0,j = 0;
        DDRB = 0xff;
        while(1)
        {
                PORTB = 0xff;
                for(j = 0;j < 10;j ++)
                        for(i = 0;i < 5000;i ++);
               
                PORTB = 0x00;               
                for(j = 0;j < 10;j ++)
                        for(i = 0;i < 5000;i ++);
        }
}

为什么上面这段程序LED就全亮,延时肯定起作用了,就是好像没有锁存功能。。。。求大师帮忙~~~换一组IO也是如此。。。难道片子坏了?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-12-2 12:15:26 | 显示全部楼层
编译器优化了,加上volatile int i = 0,j = 0;

出0入0汤圆

 楼主| 发表于 2011-12-2 12:21:50 | 显示全部楼层
回复【1楼】gliet_su  
-----------------------------------------------------------------------

哇,成功了,感谢大师啊~~~受益了,太谢谢了~。~!

出0入0汤圆

发表于 2011-12-2 12:59:12 | 显示全部楼层
用的神马编译器?我杂没遇到过这种问题呢

出0入0汤圆

 楼主| 发表于 2011-12-2 14:00:55 | 显示全部楼层
回复【3楼】walshao  万少
-----------------------------------------------------------------------
AVR Studio                4.18.716  
GUI Version                4, 18, 0, 685
AVR Simulator                1, 0, 2, 1
ATmega16                247

Operating System
Major                        6
Minor                        1
PlatformID                2
Build                        7601
Service Pack 1

Plugins:

AvrPluginAvrAsmObject        1, 0, 0, 48
AvrPluginavrgccplugin        1, 0, 0, 11
Stk500Dll                1, 0, 1, 15


不知道是不是这里看编译器哦~?

出0入0汤圆

发表于 2011-12-2 14:10:23 | 显示全部楼层
这个延时被优化很正常的。
直接写PINB位可以实现状态的翻转,延时可以用自带的_delay_ms(N) _delay_us(N),不过要注意包含延时的.H文件。

出0入0汤圆

 楼主| 发表于 2011-12-2 14:24:18 | 显示全部楼层
GNU gdb 6.8好像是这个版本。

出0入0汤圆

 楼主| 发表于 2011-12-2 14:24:50 | 显示全部楼层
回复【5楼】wzyllgx  
这个延时被优化很正常的。
直接写pinb位可以实现状态的翻转,延时可以用自带的_delay_ms(n) _delay_us(n),不过要注意包含延时的.h文件。
-----------------------------------------------------------------------
谢谢指教,我是新手,向你学习啦~~

出0入0汤圆

发表于 2011-12-3 14:36:02 | 显示全部楼层
收益了~

出0入0汤圆

发表于 2018-5-20 19:06:26 | 显示全部楼层
受教了!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 05:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表