1,STC89C52单片机内RAM通用寄存器共有几个单元分为几组存储器每组

52单片机的寄存器可以使00H~FFH,也就是256个,工作寄存器共4组,每组8个。

STC89C52单片机内RAM通用寄存器共有几个单元分为几组存储器每组

2,一般单片机里的存储器能存放多大的数据

单片机存储器是以字节为单位的,也就是8位数据,如果是其他数据形式,要占用多个地址空间。
我不会~~~但还是要微笑~~~:)

一般单片机里的存储器能存放多大的数据

3,常见的1632位单片机或PC存储器内的一个存储单元储存多少位数据

16位的单片机就是16位,32位的单片机就是32位。 例如51单片机,它是8位的,所以一个存储单元占8位,其中又分高四位和低位,当做一个乘法的时候,得到的结果是16位的,即高8位和低8位,这个时候就不能存到一个单元里了,因为装不下了,此时需要两个存储单元,一个装高8位,另一个装低8位。 如果是一个16位的单片机的话一个单元就是16位。每个单元的位宽越大说明其同时处理数据的能力就越强,速度也就越快。

常见的1632位单片机或PC存储器内的一个存储单元储存多少位数据

4,请问不知道会用多少个的数组如何定义呢谢谢

变长数组,如这样定义:int n;scanf("%d",&n); //或是程序中得到n的值int array[n];就可以在运行时指定数组的长度了,另外这是C99标准之前不支持的。或者动态分配数组,用malloc为数组分配存储空间,如:int *p;p = malloc(n*sizeof(int));n的值在程序执行中得到,当然不要忘了不用的时候free掉动态分配的内存空间。
用哪种语言?如果是JAVA 的话就简单了

5,单片机c语言程序中数组最多能有几个元素为什么我定定义了一个

原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。但在单片机c语言程序中,实际上还是有限制的,原因在于单片机的存储空间是有限的,数组最多能有几个元素取决于单片机型号。你定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,说明你还有其他变量占用存储空间。如果需要一个512个元素的数组,用的单片机是stc15f2k60s2,可在定义数组时进行XDATA声明,将数组存储于外部RAM当中。
256

6,51单片机数组问题

声明数组:unsigned long int ADdata[30] //变量范围:0至4,294,967,295直接对ADdata[i]进行操作。最大总和好像还没溢出,注意下这个问题。 你这个计算比较费时间的哦,而且要注意单片机的RAM够用不。
你给的信息太有限, 我需要知道你的单片机的具体型号,还有你创建工程的属性。 我先猜一下: 你用的是stc增强型52单片机,除了自带的256字节内存还有256字节的扩展内存,并且你在工程属性里面选择的是大内存模式(large: variables in xdata )这样在你定义内存的时候如果不加data,idata,pdata关键字的话,默认就是xdata。这用的是外部ram,是通过p0和p2口用总线模式扩展芯片得到的,可访问64k的内存空间。但是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]= 试试看。 如果猜错了,请别笑话我。

7,一个单片机能放下多少个数组

你要看一下他的RAM有多大了,你自己也可以算一下,数组的一个元素,如果是8位单片机,那么一个8位的数组元素占一个字节,像51这类单片机,RAM只有1K,大概1000个元素左右。
while(ri); //接收数据,若字符未接受完,一直等待 ri=0; temp[num]=sbuf; num++; endmark=1; /*************************************************************************************************************** 假如你波特率为9600,那么接收一个位时间大概为100us,假如你的单片机执行一条语句1us,那么你用查询的方式有可能会是你只接收到第一个字节后,就会推出这个while循环.***************************************************************************************************************/ }建议你用串口中断的方式来接收多个字节的数据,下面是我之前写过的程序/******************************************************************************************串口中断函数redata[]: 里是一个字节类型的数组,这里一次只接收4个字节数据.********************************************************************************************/void usart_isr() interrupt 4 using 2 if(ri) redata[receivecount++] = sbuf; if(receivecount > 3) receivecount = 0; } ri = 0; }}

文章TAG:单片机单片机放多少个数组  STC89C52单片机内RAM通用寄存器共有几个单元分为几组存储器每组  
下一篇