GPIO控制问题

2019-07-20 16:50发布

void P0 (unsigned char dat)
{
/*        unsigned char ax[8];
        unsigned char i=0;
        for(i=0;i<8;i++)
        {
                if(dat&(1<<i))
                        ax[i] = 1;
                else
                        ax[i] = 0;
        }
        GpioDataRegs.GPBDAT.bit.GPIO39 = ax[0];
        GpioDataRegs.GPADAT.bit.GPIO30 = ax[1];
        GpioDataRegs.GPADAT.bit.GPIO1 = ax[2];
        GpioDataRegs.GPADAT.bit.GPIO3 = ax[3];
        GpioDataRegs.GPBDAT.bit.GPIO49 = ax[4];
        GpioDataRegs.GPBDAT.bit.GPIO51 = ax[5];
        GpioDataRegs.GPCDAT.bit.GPIO71 = ax[6];
        GpioDataRegs.GPCDAT.bit.GPIO73 = ax[7];
*/
        GpioDataRegs.GPBDAT.bit.GPIO39 = dat&0x01;
        GpioDataRegs.GPADAT.bit.GPIO30 = dat&0x02;
        GpioDataRegs.GPADAT.bit.GPIO1 = dat&0x04;
        GpioDataRegs.GPADAT.bit.GPIO3 = dat&0x08;
        GpioDataRegs.GPBDAT.bit.GPIO49 = dat&0x10;
        GpioDataRegs.GPBDAT.bit.GPIO51 = dat&0x20;
        GpioDataRegs.GPCDAT.bit.GPIO71 = dat&0x40;
        GpioDataRegs.GPCDAT.bit.GPIO73 = dat&0x80;
}
我用这个子函数想实现任意8个IO口实现8位数据并行处理,但是调试结果是错误的。单看程序语句,并没有错误,编译也没有检测出错误,但是结果不行。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
清枫城主
1楼-- · 2019-07-20 21:39
随后我换了个方式,编写了下面的子函数。
void P0 (unsigned char dat)
{
        unsigned char ax[8];
        unsigned char i=0;
        for(i=0;i<8;i++)
        {
                if(dat&(1<<i))
                        ax[i] = 1;
                else
                        ax[i] = 0;
        }
        GpioDataRegs.GPBDAT.bit.GPIO39 = ax[0];
        GpioDataRegs.GPADAT.bit.GPIO30 = ax[1];
        GpioDataRegs.GPADAT.bit.GPIO1 = ax[2];
        GpioDataRegs.GPADAT.bit.GPIO3 = ax[3];
        GpioDataRegs.GPBDAT.bit.GPIO49 = ax[4];
        GpioDataRegs.GPBDAT.bit.GPIO51 = ax[5];
        GpioDataRegs.GPCDAT.bit.GPIO71 = ax[6];
        GpioDataRegs.GPCDAT.bit.GPIO73 = ax[7];
}
全速运行的时候,用LED检测这8个IO口,结果是错误的,但是我断点单步调试调试时,一步一步走下去,8个IO的结果却对了。这是什么原因?单步调试结果对,全速运行或直接调用一次这个子函数,然后其他的操作结果却是错的。
清枫城主
2楼-- · 2019-07-21 02:38
 精彩回答 2  元偷偷看……
长的帅怪我落
3楼-- · 2019-07-21 03:26
 精彩回答 2  元偷偷看……
joing1999
4楼-- · 2019-07-21 09:06
加几个delay,楼上说得没错。
清枫城主
5楼-- · 2019-07-21 11:03
长的帅怪我落 发表于 2016-9-1 11:17
目测加几个delay应该就行,你试下吧,

为什么要加DELAY呢
清枫城主
6楼-- · 2019-07-21 16:12
joing1999 发表于 2016-9-1 11:19
加几个delay,楼上说得没错。

为什么要加DELAY呢?

一周热门 更多>