登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看5254|回12|收藏
楼主 ID:404479 只看他
2018-10-14 21:02
如图,我用面包板搭建了一个89c52单片机,单片机运行正常,烧录资料也是正常的,我在P2口弄了8颗发光二极管,经测试,P2^0—P2^7口,全部正常,都可以输出低电平让8个发光二极管全发光,也可以闪烁,用亮,延迟,灭,延迟亮,延迟,灭,延迟,反复循环的方法也可以实现流水灯,但是,当我用_crol_左移函数实现流水灯时,为什么P2口灯全部都不亮,全是熄灭状态,插上电,就P2^0的灯亮了一下,就没反应了,我想请教一下各位,这是哪里出了问题,是因为缺少什么元器件吗?我实在是不解,为什么这个程序在开发板上面能够正常执行,到了面包板就执行不了了,求解!
程序(复制过程中可能有缺漏,但原程序已经在开发板运行ok过了)
#include "reg52.h"                       
#include<intrins.h>       
typedef unsigned int u16;         
typedef unsigned char u8;
#define led P2          
void delay(u16 i)
{
        while(i--);       
}

void main()
{
        u8 i;
        led=0xfe;
        delay(50000); //大约延时450ms       
        while(1)
        {       
                for(i=0;i<8;i++)
                {
                        P2=~(0x01<<i);         
                        delay(50000);
                }

                for(i=0;i<7;i++)         //将led左移一位
                {
                        led=_crol_(led,1);
                        delay(50000); //大约延时450ms       
                }
                for(i=0;i<7;i++)        //将led右移一位
                {
                        led=_cror_(led,1);
                        delay(50000);
                }       
        }               
}
附件列表
IMG_20181014_203632.jpg (2018-10-14 20:59 上传)

原图尺寸 81.12 KB, 下载次数: 36

IMG_20181014_203632.jpg

沙发 ID:74187 只看他
2018-10-15 06:40

代码:

  1. temp = 0XFE;

  2.         while(1)
  3.         {

  4.            for(i = 0; i < 7;i++)
  5.                 {
  6.                     P2 = temp;
  7.                         temp = _crol_(temp,1);         
  8.                         Delay500ms();//500ms延时 11.0592MHZ
  9.                 }

  10.                 for(i = 0; i < 7;i++)
  11.                 {                              
  12.                     P2 = temp;
  13.                         temp = _cror_(temp,1);
  14.                         Delay500ms();//500ms延时 11.0592MHZ
  15.                 }
  16. }


参考这个,把TEMP的值赋给PO口
板凳 ID:224003 只看他
2018-10-15 09:24
面包板就是这样的,已经遇到多次了
估计是拉出来的引线太长,干扰太多了
地板 ID:213173 只看他
2018-10-15 09:59
调整一下循环顺序就好了
#include "reg52.h"                        
#include<intrins.h>        
typedef unsigned int u16;         
typedef unsigned char u8;
#define led P2         
void delay(u16 i)
{
        while(i--);        
}

void main()
{
        u8 i;
        led=0xfe;
        delay(50000); //大约延时450ms        
        while(1)
        {        
                for(i=0;i<8;i++)
                {
                        led=~(0x01<<i);         
                        delay(50000);
                }
                for(i=0;i<7;i++)        //将led右移一位
                {
                        led=_cror_(led,1);
                        delay(50000);
                }        
                for(i=0;i<7;i++)         //将led左移一位
                {
                        led=_crol_(led,1);
                        delay(50000); //大约延时450ms        
                }
        }               
}

5# ID:404479 只看他
2018-10-15 11:30
我在想是不是引线太长,导致电阻太大了!
6# ID:351739 只看他
2018-10-15 11:35
检验面包板电路与开发板是否相同,如果没问题,就换到面包板的其他地方试试
7# ID:409939 只看他
2018-10-15 14:33
这个问题,比对一下面包板和开发板的LED输出的不同。
8# ID:410016 只看他
2018-10-15 15:59

引用:

tanghao8887 发表于 2018-10-15 11:30
我在想是不是引线太长,导致电阻太大了!

我看应该,是的
9# ID:409724 只看他
2018-10-15 16:55
换另外一个阻值相对较小的开发板  如果调试OK的话 就是阻值问题 有什么不懂的就回我 我给你解答
10# ID:410125 只看他
2018-10-15 19:19
面包板的电路(如:晶振、单片机)与开发板一样吗?
11# ID:404479 只看他
2018-10-16 00:24

引用:

wulin 发表于 2018-10-15 09:59
调整一下循环顺序就好了
#include "reg52.h"                        
#include        

谢谢你,大神啊,你这种方法流水灯果然会走,但是为什么,它只往右循环,不往左循环啊,这是什么情况啊!
12# ID:404479 只看他
2018-10-16 00:27

引用:

赵杰 发表于 2018-10-15 16:55
换另外一个阻值相对较小的开发板  如果调试OK的话 就是阻值问题 有什么不懂的就回我 我给你解答

我把发光二极管全部移到了P2口旁边,距离很近,但还是不行
13# ID:409682 只看他
2018-10-16 00:38
for(i=0;i<8;i++)
                {
                        led=~(0x01<<i);  
这段有问题,删除后直接用_cror_或者_crol_移动

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版