打印
[技术问答]

赛元单片机问题,请大神指点

[复制链接]
3512|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ARM0000|  楼主 | 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);

相关帖子

沙发
xyz549040622| | 2018-11-19 22:19 | 只看该作者
看不出有什么问题?单步跟踪下,for循环进不去呢?还是进去半路跳出来了?

使用特权

评论回复
板凳
ARM0000|  楼主 | 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);

        
}


使用特权

评论回复
地板
ARM0000|  楼主 | 2018-11-19 23:37 | 只看该作者
本帖最后由 ARM0000 于 2018-11-19 23:50 编辑
ARM0000 发表于 2018-11-19 23:33
单步运行正常,进入for循环循环也正常,就是IO口输出异常。
我又写了数码管驱动函,端口输出还是异常。
...

不好意思

使用特权

评论回复
5
xyz549040622| | 2018-11-20 07:50 | 只看该作者
P0=smg;是不是缺了数组号了,端口输出还是异常,实际输出一个,拿万用表测量电平看看。

使用特权

评论回复
6
gdwurc| | 2018-11-20 08:42 | 只看该作者
赛元的单片机确实还有很多寄怪的东西,需要慢慢解。

使用特权

评论回复
7
ARM0000|  楼主 | 2018-11-20 18:07 | 只看该作者
xyz549040622 发表于 2018-11-20 07:50
P0=smg;是不是缺了数组号了,端口输出还是异常,实际输出一个,拿万用表测量电平看看。 ...

没少,少了编译都通不过,是我复制到网页上莫名奇妙就少了。我又编辑添加上去,保存以后又少了。

使用特权

评论回复
8
ARM0000|  楼主 | 2018-11-20 18:10 | 只看该作者
ARM0000 发表于 2018-11-20 18:07
没少,少了编译都通不过,是我复制到网页上莫名奇妙就少了。我又编辑添加上去,保存以后又少了。 ...

我用的芯片是SC92F7323

使用特权

评论回复
9
knk| | 2018-11-21 11:27 | 只看该作者
看一下.m51文件,是不是把数组定义在ROM空间的前256字节,ROM空间的前256字节不能使用MOVC指令寻址。

使用特权

评论回复
10
chongdongchen| | 2018-11-21 16:20 | 只看该作者
用code关键词:
code u8 LED[32]={0xFF,...
P0=LED[i];

使用特权

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

这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。

使用特权

评论回复
12
ARM0000|  楼主 | 2018-11-21 18:40 | 只看该作者
knk 发表于 2018-11-21 11:27
看一下.m51文件,是不是把数组定义在ROM空间的前256字节,ROM空间的前256字节不能使用MOVC指令寻址。 ...

这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。

使用特权

评论回复
13
knk| | 2018-11-22 09:32 | 只看该作者
ARM0000 发表于 2018-11-21 18:40
这位大神,你好,确实如你所说,后面改了一下keil软件里面的设置就好了,多谢指教。 ...

还有一个办法,把表格定义在RAM里面,把CODE删掉就好了,只是多占用一点RAM,现在的芯片RAM这么大了,也不在乎那几十个字节。

使用特权

评论回复
14
触觉的爱| | 2018-12-20 19:57 | 只看该作者
是个小坑呀,记号一下

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝