打印

有关PIC16f883单片机的对端口赋值的一小段程序,求解答

[复制链接]
3511|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szq122|  楼主 | 2012-10-22 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有两段程序,分别为
程序1:

#include<pic.h>
#define _XTAL_FREQ 12000000
__CONFIG(0X20F1);
                                                //RB5接绿色LED
                                                //RB4接红色LED
void main()
{
    TRISB4=0;
    TRISB5=0;
    while(1)
   {
         RB5=1;
         RB4=1;
         __delay_ms(1000);
         RB5=0;
         RB4=0;
         __delay_ms(1000);
    }
}

程序2:

#include<pic.h>
#define _XTAL_FREQ 12000000
__CONFIG(0X20F1);
                                                        //RB5接绿色LED
                                                        //RB4接红色LED
void main()
{
    TRISB4=0;
    TRISB5=0;
    while(1)
    {
        RB4=1;

        RB5=1;
        __delay_ms(1000);

        RB4=0;

        RB5=0;
         __delay_ms(1000);

     }
}
       使用的是pic16F883单片机,为什么程序1的执行结果只有RB4口接的红色LED在闪(此时绿色不亮),而程序2只有RB5口接的绿色LED在闪呢(此时红色不亮)?
      请高手解答啊,小弟在此多谢了啊
沙发
yewuyi| | 2012-10-22 14:53 | 只看该作者
两个程序不是一样的吗?
我比了半天,就是一样的啊。。。

检查IO口是否了读-修改-写的现象?

我以前就建议过,写代码时,应该讲硬件和程序之间加一个驱动缓冲变量,操作时先操作这个变量,最后将这个变量整体赋值给IO口输出寄存器,这样最偏于未来移植,也偏于阅读、编码、避免读-修改-写现象。

使用特权

评论回复
板凳
timyc0511| | 2012-10-24 20:35 | 只看该作者
注意 ANSELH 寄存器  ,RB口有模拟输入外设,注意各外设的设置

使用特权

评论回复
地板
兰天白云| | 2012-10-25 16:20 | 只看该作者
典型的“读-改-写”问题
你用MOVWF试试

使用特权

评论回复
5
gaoyang9992006| | 2012-10-25 18:33 | 只看该作者
楼主你可以去掉一半的指令观察寄存器的变量,把程序后三条指令去掉,你再试试看,看看能否两个都点亮。

使用特权

评论回复
6
gaoyang9992006| | 2012-10-25 18:35 | 只看该作者
如果不行,你可以看四楼给的提示,PIC更改寄存器是读改写三部完成的,你可以在位操作前面加上读位的操作,比如RB4=RB4;你再试试看

使用特权

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

本版积分规则

0

主题

2

帖子

1

粉丝