打印
[AVR单片机]

ATmega16L 流水灯问题

[复制链接]
1091|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

UserSys.rar

174 Bytes

自己编的头文件

2.led8.rar

44.87 KB

工程

使用特权

评论回复
5
huangxz| | 2013-10-22 14:29 | 只看该作者
for(i=7;i>=0;i--)
有问题

使用特权

评论回复
6
moline|  楼主 | 2013-10-22 14:34 | 只看该作者
为什么呢?我改了代码,也发现是这个地方有问题。
                for(i=1;i<9;i++)
                {
                         PORTB = ~BIT(8-i);
                        delay_ms(500);
                }
以前写C51和ARM的时候,就不会出现这个问题。为什么呢?

使用特权

评论回复
7
moline|  楼主 | 2013-10-22 14:39 | 只看该作者
另一种方案是:
把u8 i;改为s8 i;也可以。原来是:如果定义为unsigned char i;   i--时,会变成-1,溢出了。

备注,s8 就是signed char i;

OK了,解决了。TKS。

使用特权

评论回复
8
黄小俊| | 2013-10-22 18:10 | 只看该作者
如5楼所说。。

使用特权

评论回复
9
hyh19890917| | 2013-10-22 22:01 | 只看该作者
还是不太懂。。。

使用特权

评论回复
10
hellodjl| | 2013-10-23 09:21 | 只看该作者
了解了下,学习下

使用特权

评论回复
11
puppet21| | 2013-10-23 11:35 | 只看该作者
hyh19890917 发表于 2013-10-22 22:01
还是不太懂。。。

u8为无符号8位,s8为有符号的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝