处女星号云南时时彩开奖记录: [技术问答] 新手求助一下关于LCD的RAM配置问题

永利游戏开户直营
331|8
楼主
      如题,很新的新手,C51也是略知皮毛,用赛元的MCU还不少,但是都是花钱请别人写的程序:),现在有点闲空,想自己玩玩。手头的92F7547根据说明书例配置了LCD显示。当给寄存器写单独的值,显示器可以显示出想要的值。但是我用数组去做,RAM貌似就配置不了。
      我的尝试代码如下:
      uchar code  lcd_data [] = {0x9f,0x90,0xa7,0xb5,0xb8,0x3d,0x3f,0x94,0xbf,0xbd} ;
       LCDRAM[0]=lcd_data [0];
       LCDRAM[1]=lcd_data [0]<<4;
       LCDRAM[2]=lcd_data [1];
       LCDRAM[3]=lcd_data [1]<<4;
我这样写,LCD就没显示。


但是如果我写成;
       LCDRAM[0]=0x9f;
       LCDRAM[1]=0x9f<<4;
       LCDRAM[2]=0x90;
       LCDRAM[3]=0x90<<4;
就能显示0和1。

请问可以告诉我我的问题出在哪里吗?谢谢帮忙的朋友!


沙发
| 2019-8-13 11:49 | 只看该作者
这个没道理的,除非这个MCU有特别之处,仔细看下手册,可能与lcd_data的地址有关系
板凳
 楼主 | 2019-8-13 12:11 | 只看该作者
ayb_ice 发表于 2019-8-13 11:49
这个没道理的,除非这个MCU有特别之处,仔细看下手册,可能与lcd_data的地址有关系 ...

感谢回复,我就是想不通。然后昨天打开仿真,看LCDRAM[0]~LCDRAM[3]的值,始终是0。然后还不服,弄了4个变量a0~a3,先把lcd_data[0]和lcd_data[1]赋值到a0~a3。再用a0~a3去给LCDRAM[]去赋值,仿真中LCDRAM是被赋值了,但是还是不显示。换回直接写常量就显示,折腾到1点,不知道自己问题出在哪里,见笑了。
地板
| 2019-8-13 13:08 | 只看该作者
a88963178 发表于 2019-8-13 12:11
感谢回复,我就是想不通。然后昨天打开仿真,看LCDRAM[0]~LCDRAM[3]的值,始终是0。然后还不服,弄了4个 ...

改成这个试试

uchar idata  lcd_data [] = {0x9f,0x90,0xa7,0xb5,0xb8,0x3d,0x3f,0x94,0xbf,0xbd} ;
5
 楼主 | 2019-8-13 13:28 | 只看该作者
ayb_ice 发表于 2019-8-13 13:08
改成这个试试

uchar idata  lcd_data [] = {0x9f,0x90,0xa7,0xb5,0xb8,0x3d,0x3f,0x94,0xbf,0xbd} ; ...

感谢!改成idata区就可以了,太感谢了!为啥子code区不行呢?提供一下思路。
6
 楼主 | 2019-8-13 14:14 | 只看该作者
ayb_ice 发表于 2019-8-13 13:08
改成这个试试

uchar idata  lcd_data [] = {0x9f,0x90,0xa7,0xb5,0xb8,0x3d,0x3f,0x94,0xbf,0xbd} ; ...

试了idata,xdata区都可,换回code就不好使,前两个编译好了以后比code区编译好了以后code大130左右。idata是片内数据存储区,可以简介寻址。但是xdata和code都是通过DPTR访问。为何有不同的效果啦。
7
 楼主 | 2019-8-13 14:27 | 只看该作者
好了,我找到问题点了,92系列单片机,起始256b RAM,禁止movc的code寻址。所以导致了这个问题。我重新规划了一下code区,用code也可以正常显示了。怪我不仔细,曾经看到过这个说明的,但是不太记得在哪里看到的了。但是那个时候没当回事。这会儿看到另一个帖子,想起来了
8
| 2019-8-13 19:44 | 只看该作者
a88963178 发表于 2019-8-13 14:14
试了idata,xdata区都可,换回code就不好使,前两个编译好了以后比code区编译好了以后code大130左右。ida ...

你是没有仔细看赛元MCU使用注意事项吧,赛元所有MCU的ROM空间前256字节是不可以使用MOVC指令寻址的,你定义的uchar code  lcd_data [] = {0x9f,0x90,0xa7,0xb5,0xb8,0x3d,0x3f,0x94,0xbf,0xbd} ;这段常量被分配到ROM空间的前面256字节里面了,所以查表的时候读不到数据。
有两个解决办法,一是把ROM空间前256字节屏蔽掉,另一种方法是把这些常量定义在ROM空间256之后的地址。
9
 楼主 | 2019-8-14 10:44 | 只看该作者
knk 发表于 2019-8-13 19:44
你是没有仔细看赛元MCU使用注意事项吧,处女星号云南时时彩开奖记录:赛元所有MCU的ROM空间前256字节是不可以使用MOVC指令寻址的,你定 ...

是的,我后来发现到这个问题了,怪我看指导书书不仔细,谢谢回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
易博彩票网址直营网 俄罗斯有赌场么登入 赌王娱乐 东方鸿运 沙娱乐05520永利登入 澳门贡多拉船时间网上娱乐场
金沙会靠谱吗 励盈娱乐城网上娱乐场 地下赌场有哪些 葡京照片网上娱乐场 澳门赌场通宵
开赌场要多少钱 澳门博彩71966永利 打码量是投注金额吗网上娱乐场 申博太阳城快乐十分时时彩平台网址 无锡德州扑克赌博判刑
游戏不支持虚拟机288msc.com 维多利亚重庆幸运农场助赢软件 伟德国际 365 拉斯维加金沙集团登入