关于单片机 数组使用

发布网友 发布时间:2022-04-20 16:00

我来回答

5个回答

热心网友 时间:2023-07-17 00:41

你给的信息太有限,
我需要知道你的单片机的具体型号,还有你创建工程的属性。
我先猜一下:
你用的是stc增强型52单片机,除了自带的256字节内存还有256字节的扩展内存,并且你在工程属性里面选择的是大内存模式(large:
variables
in
xdata
)这样在你定义内存的时候如果不加data,idata,pdata关键字的话,默认就是xdata。这用的是外部ram,是通过p0和p2口用总线模式扩展芯片得到的,可访问k的内存空间。但是stc增强型52内置了256字节(某些版本会更大,我猜你用的是256的),默认访问方式一样,但是被stc集成到了片内。你定义了一个a[160]一个b[160],加起来远远超过256.按你的说法,有用的是160+48(这里你又有一个表达错误,a[0]~a[47]应该是48个。)=208个,算上你其他地方定义的变量,应该满256个,那么a[48]~a[159]是怎么出现的呢,理论上是从p0口读回来的。但是这里你还有一个不严谨的地方,不知道你有没有证明到底是a[48]~a[159]全部成为了0xff还是b[48]~b[159]早早的就成为了0xff。
处理办法一:内存模式先改成small:variables
in
data
.
这时你应该都无法通过编译。
然后改变这句话:void
copy2(char
a[160])
变成
void
copy2(char
pdata
a[160])
方法二:直接改
char
b[160]=
变成
char
code
b[160]=
试试看。
如果猜错了,请别笑话我。

热心网友 时间:2023-07-17 00:41

数组名是一个指针,而且是常量指针,不可改变指向
数组名指向数组的第一个元素并不指向整个数组,因为步长不是整个数组的长度
可以使用指针访问数组元素和使用数组下标访问数组元素一样
[ ]中的数字代表偏移量
数组与指针的区别
数组并不是指针。
指针保存的是数据的地址,数组保存数据本身,指针间接访问数据,首先取得指针的内容,把他做为地址,从这个地址提取数据;数组直接访问数据
数组做为函数参数时会退化为指针。

热心网友 时间:2023-07-17 00:42

看你需要定义什么类型的数组, 8位 的是 char array[20]; 16位的是 int array[20]; 20表示数组的大小
赋值的话可以 array[0]=100; 表示 数组的第一个元素 的值=100追问谢谢你的回答,我是想知道 uchar buf[16],num 其中为逗号后面的num是什么作用?谢

热心网友 时间:2023-07-17 00:42

#include<reg51.h>
#define uchar unsigned char
uchar rec[12];
uchar code dd[9]="+IPD,0,2:";
uchar num;
bit uartflag;
sbit p10=P1^0;
void uart() interrupt 4
{
uchar dat,i;
if(RI)
    {
    RI=0;
    dat=SBUF;
    if(dat=='+')
        {
        num=0;
        }
    rec[num]=dat;
    num++;
    if(num>=11)uartflag=1;
    }
}
main()
{
uchar i,error;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
uartflag=0;
num=0;
while(1)
    {
    if(uartflag)
        {
        error=0;
        for(i=0;i<9;i++)
            {
            if(dd[i]!=rec[i]error=1;
            }
        if(error==0)
            {
            if(rec[9]=='0' && rec[10]=='1')p10=0;
            else if(rec[9]=='8' && rec[10]=='9')p10=1;
            }
        }
    }
}

追问感谢你的回答,但是程序有错误,不能生产hex文件

热心网友 时间:2023-07-17 00:43

回答问题领红包
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com