[AVR单片机] ATmega16L 流水灯问题

[复制链接]
2153|10
 楼主| moline 发表于 2013-10-22 14:11 | 显示全部楼层 |阅读模式
#include <iom16v.h>        //io端口寄存器配置文件,必须包含
#include <AVRdef.h>        
#include <UserSys.h>       //用户自定义头文件:保存在E:\iccv7avr\include文件夹下

void delay_ms(u16 delayval)
{
         u16 i;//u16定义在UserSys.h内,是16位无符号数值;
         while(delayval--)
         {
                  for(i=0;i<1140;i++)
                {
                         ;
                }
         }         
}

void main(void)
{
         u8 i;
         PORTA=0xFF;
         DDRA=0xFF;
         
         PORTB=0xFF;
         DDRB=0xFF;
         
         while(1)
         {
                  for(i=0;i<8;i++)
                {
                           PORTA = ~BIT(i);
                        delay_ms(500);
                }
                DDRA = 0xFF;
                PORTA = 0xFF;
                for(i=7;i>=0;i--)
                {
                         PORTB = ~BIT(i);
                        delay_ms(500);
                }
                DDRB = 0xFF;
                PORTB = 0xFF;
         }
}
这个代码不能连续循环,接在PORTA和PORTB上的两排各8个LED灯,只能正常循环一次,之后都灭了,不能亮,过一段时间PORTB上的8个LED灯会循环一次。求高手解决
huangxz 发表于 2013-10-22 14:14 | 显示全部楼层
整工程帖上来嘛
 楼主| moline 发表于 2013-10-22 14:16 | 显示全部楼层
已经是整个工程了,u8,展开就是unsigned char。其他都是用ICCV7固定的头文件。
 楼主| moline 发表于 2013-10-22 14:23 | 显示全部楼层
UserSys。H

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huangxz 发表于 2013-10-22 14:29 | 显示全部楼层
for(i=7;i>=0;i--)
有问题
 楼主| moline 发表于 2013-10-22 14:34 | 显示全部楼层
为什么呢?我改了代码,也发现是这个地方有问题。
                for(i=1;i<9;i++)
                {
                         PORTB = ~BIT(8-i);
                        delay_ms(500);
                }
以前写C51和ARM的时候,就不会出现这个问题。为什么呢?
 楼主| moline 发表于 2013-10-22 14:39 | 显示全部楼层
另一种方案是:
把u8 i;改为s8 i;也可以。原来是:如果定义为unsigned char i;   i--时,会变成-1,溢出了。

备注,s8 就是signed char i;

OK了,解决了。TKS。
黄小俊 发表于 2013-10-22 18:10 | 显示全部楼层
如5楼所说。。
hyh19890917 发表于 2013-10-22 22:01 | 显示全部楼层
还是不太懂。。。
hellodjl 发表于 2013-10-23 09:21 | 显示全部楼层
了解了下,学习下
puppet21 发表于 2013-10-23 11:35 | 显示全部楼层
hyh19890917 发表于 2013-10-22 22:01
还是不太懂。。。

u8为无符号8位,s8为有符号的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部