250分请教一个单片机C语言的问题
发布网友
发布时间:2023-08-02 06:13
我来回答
共6个回答
热心网友
时间:2024-11-25 10:11
这个应该就是你定义的问题,你只要把定义改成unsigned char idata ,就没问题了。
热心网友
时间:2024-11-25 10:12
这个很容易 你只要定义成 unsigned char idata Fifo[120]; 就不会出错了
^_^
由于单片机内部高128个字节的RAM与特殊寄存器的地址重叠,所以高128个字节只能通过间接寻址的方式进行访问【也就是通过R0,R1】,因此必须定义成idata的类型才行。在KEILC中 对idata是可以访问到0~255的,所以在C中,建议不常访问的数据可以放在高128个字节,
第二个问题,只要你的程序没有超过8K数据区间应该是够用的,AT89C51RC我也用过,比较贵,还不如选SSTC89E516RD那么好,或者NXP的,还有一个STC89系列的也很不错,这些都是与AT89系列完全兼容,并且有更多新的功能的
第三个问题 不知道你用的是什么烧写器,一般这个问题跟楼上兄台说的差不多可以解决,就是先擦除,再烧写
热心网友
时间:2024-11-25 10:12
1:注意,MCU类型一定选52,52有256片内RAM,128直接寻址,128间接寻址
2:Project-->Option for Target "Target1" -->Target-->MemeryModel项
有三个选项 Small Compact Large
在此处选择 Compact: Variales in PDATA。 原因如下
data、idata、xdata、pdata、code是定义不同数据的数据或地址空间的伪指令,含义如下:
data: 0x00-0x7f,片内RAM直接寻址区
pdata: 0x00-0xff,片内RAM间接寻址区
xdata: 0x0000-0xffff,64KB片外RAM数据区
我试过了,行得通! 不过注意你的RAM使用。尽量使用局部变量,以节省RAM开销。还有少用子程序(堆栈)。总共256个ram,你一下子用去了一半。。。。
祝 你 好 运!
热心网友
时间:2024-11-25 10:13
1、可能是RAM不够用一次出了。需要还换片子了
2、基本没区别,头文件KEIL里自带,只要建工程时选好就行
3、单片机编程前要把ROM先擦除才能编程,有数据当然不能编程。
热心网友
时间:2024-11-25 10:14
1. 因为51/52单片机内部RAM中可直接寻址区域为片内数据存储器(工作寄存器区,位寻址区,数据缓冲区---区128字节),但是工作寄存器区至少有一组寄存器8字节被系统占用,所以我们能用的直接寻址空间最多只有128-8=120字节。想用更多的空间可以使用间接寻址区。
改为 unsigned char idata Fifo[121]; 就行了。
热心网友
时间:2024-11-25 10:14
你看看头文件对内存的定义,即便内存大了,他就定义那么多还是有问题
其他我不知道但是那个头文件 reg52.h在你的keil软件安装目录里一定是有的
要不他没办法调用,你仔细找找,我用的是430,头文件里都再安装目录