[技术问答] 赛元单片机问题,请大神指点

[复制链接]
349|13
 楼主 | 2018-11-19 20:50 | 显示全部楼层 |阅读模式
const u8 LED[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
0xE7,0xDB,0xBD,0x7E,0xFF};
void led_run()
{
                u8 i;
        for(i=0;i<32;i++)
        {
                P0=LED[i];
                delay_ms(500);
        }上面函数在赛元单片机中运行不正常,在其它单片机中运行正常。
       以下拆开这样写运行正常,请问是啥问题?
                P0=0XFF;
                delay_ms(500);
                P0=0XFE;
                delay_ms(500);
                P0=0XFD;
                delay_ms(500);
                P0=0XFB;
                delay_ms(500);
                P0=0XF7;
                delay_ms(500);
                P0=0XEF;
                delay_ms(500);
                P0=0XDF;
                delay_ms(500);
                P0=0XBF;
                delay_ms(500);
                P0=0X7F;
                delay_ms(500);
| 2018-11-19 22:19 | 显示全部楼层
看不出有什么问题?单步跟踪下,for循环进不去呢?还是进去半路跳出来了?
 楼主 | 2018-11-19 23:33 | 显示全部楼层
本帖最后由 ARM0000 于 2018-11-19 23:49 编辑
xyz549040622 发表于 2018-11-19 22:19
看不出有什么问题?单步跟踪下,for循环进不去呢?还是进去半路跳出来了? ...

单步运行正常,进入for循环循环也正常,就是IO口输出异常。
我又写了数码管驱动函,端口输出还是异常。
感觉用一维数组写就不正常.
u8 code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
                        0xf8,0x80,0x90};

void led_run()
{
  u8 i;
  for(i=0;i<10;i++)
{
  P0=smg;
  delay_ms(500);
}

}
下面这样写端口输出就正常
                P0=0XC0;
                delay_ms(500);
                P0=0XF9;
                delay_ms(500);
                P0=0XA4;
                delay_ms(500);
                P0=0XB0;
                delay_ms(500);
                P0=0X99;
                delay_ms(500);
                P0=0X92;
                delay_ms(500);
                P0=0X82;
                delay_ms(500);
                P0=0XF8;
                delay_ms(500);
                P0=0X80;
                delay_ms(500);
                P0=0X90;
                delay_ms(500);

        
}


 楼主 | 2018-11-19 23:37 | 显示全部楼层
本帖最后由 ARM0000 于 2018-11-19 23:50 编辑
ARM0000 发表于 2018-11-19 23:33
单步运行正常,进入for循环循环也正常,就是IO口输出异常。
我又写了数码管驱动函,端口输出还是异常。
...

不好意思
| 2018-11-20 07:50 | 显示全部楼层
P0=smg;是不是缺了数组号了,端口输出还是异常,实际输出一个,拿万用表测量电平看看。
| 2018-11-20 08:42 | 显示全部楼层
赛元的单片机确实还有很多寄怪的东西,需要慢慢解。
 楼主 | 2018-11-20 18:07 | 显示全部楼层
xyz549040622 发表于 2018-11-20 07:50
P0=smg;是不是缺了数组号了,端口输出还是异常,实际输出一个,拿万用表测量电平看看。 ...

没少,少了编译都通不过,是我复制到网页上莫名奇妙就少了。我又编辑添加上去,保存以后又少了。
 楼主 | 2018-11-20 18:10 | 显示全部楼层
ARM0000 发表于 2018-11-20 18:07
没少,少了编译都通不过,是我复制到网页上莫名奇妙就少了。我又编辑添加上去,保存以后又少了。 ...

我用的芯片是SC92F7323
| 2018-11-21 11:27 | 显示全部楼层
看一下.m51文件,是不是把数组定义在ROM空间的前256字节,ROM空间的前256字节不能使用MOVC指令寻址。
| 2018-11-21 16:20 | 显示全部楼层
用code关键词:
code u8 LED[32]={0xFF,...
P0=LED[i];

评论

knk 2018-11-22 09:31 回复TA
就是用了CODE才出的问题,如果把CODE删掉就不会有问题了。 
 楼主 | 2018-11-21 18:40 | 显示全部楼层
knk 发表于 2018-11-21 11:27
看一下.m51文件,是不是把数组定义在ROM空间的前256字节,ROM空间的前256字节不能使用MOVC指令寻址。 ...

这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。
 楼主 | 2018-11-21 18:40 | 显示全部楼层
knk 发表于 2018-11-21 11:27
看一下.m51文件,是不是把数组定义在ROM空间的前256字节,ROM空间的前256字节不能使用MOVC指令寻址。 ...

这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。
| 2018-11-22 09:32 | 显示全部楼层
ARM0000 发表于 2018-11-21 18:40
这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。 ...

还有一个办法,把表格定义在RAM里面,把CODE删掉就好了,只是多占用一点RAM,现在的芯片RAM这么大了,也不在乎那几十个字节。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表