Ⅰ 51单片机中如何定义比较大的数组变量 比如 char[1024][10]
定义这种大的数组,你首先得有这么大的RAM才可以,不然肯定不好用。内部地址空间就别想了,肯定是放在外部。
如果是常数数组,可以定义到代码里面,code char cc[1024][10],这种程序只能读,不能改,像字库点阵一般用这种。
如果有足够的外部RAM,xdata char xx[1024][10]; 这是把数组定义到外部RAM,需要用MOVX访问。
Ⅱ 编写简单的单片机c语言程序 1、指定数组找最大值 2、排序
#include<stdio.h>
#defineNR10//数组元素个数
/*从主函数开始*/
intmain(intargc,char**argv)
{
intar[NR];
inti;
fprintf(stdout,"请输入%d个整数: ",NR);
/*获取并检查用户输入*/
while(1)
{
/*循环获取NR个数据*/
for(i=0;i<NR;i++)
{
if(fscanf(stdin,"%d",&ar[i])!=1)
{
fprintf(stdout,"输入错误!请重新输入: ");
while(getchar()!=' ');//丢弃多余非法字符
break;//打破内层for循环
}
}
/*检查是否获取到NR个数据*/
if(i!=NR)
{
continue;
}
else
{
break;
}
}
/*查找最大值和最小值*/
intmax,min;
max=ar[0];//假定第一个数为最大值
min=ar[0];//同时假定也第一个数为最大值
/*从第二个数开始比较查找最值*/
for(i=1;i<NR;i++)
{
if(ar[i]>max)//最大值
{
max=ar[i];
}
if(ar[i]<min)//最小值,不能使用elseif,否则会跳过比较
{
min=ar[i];
}
}
fprintf(stdout,"最大值为:%d最小值为:%d ",max,min);
/*接下来:查找第二大值*/
intsecond;
/*先获取前两个数的第一大和第二大值*/
ar[0]>ar[1]?(max=ar[0],second=ar[1]):
(max=ar[1],second=ar[0]);
/*从第2个数开始比较查找*/
for(i=2;i<NR;i++)
{
if(ar[i]>max)//查找最大值:目的是为了比较第二大值
{
second=max;//先把最大值保存给第二大值
max=ar[i];
}
elseif(second<ar[i])//比最大值小的数再看看是否大于第二大值
{
second=ar[i];
}
}
fprintf(stdout,"第二大值为:%d ",second);
return0;
}
(2)单片机最大数组扩展阅读
一、c语言程序求数组内所有数的和:
1、通过索引的方式就可以访问到数组内部的元素,索引是从0到数组长度-1。
2、数组点Lenth就是数组的长度。
二、c语言程序冒泡排序:
1、比较相邻的两个元素的大小,如果第一个比第二个大就互换一下。
2、然后每一对都做如上操作,如此一来最后一个元素肯定是最大的数了。
3、除了最后一个元素,重复以上步骤。然后倒数第二个就是次大的值了
4、一次按照这个逻辑直到没有任何数字可以比较了。
Ⅲ 一个单片机能放下多少个数组
= =看你什么单片机,里面RAM ROM大小
Ⅳ 51单片机定义一个大数组存在idata与xdata中有什么区别
存储的区域不同
idata 是存在 内部RAM 80H--FFH,(对汇编指令来说,不可直接寻址,只能间接寻址)。
xdata 是存在外部RAM ,有些单片机会在芯片内扩展一些RAM,这部分也要用 xdata,因为是同外部RAM共同编址的,汇编指令中都是用 MOVX来寻址。
Ⅳ msp430单片机超大数组问题
如果你担心程序在初始化之前,看门狗会溢出
你可以用以下代码在初始化前先关掉看门狗,代码如下:
__intrinsic sword __low_level_init(void)
{
WDTCTL = WDTPW + WDTHOLD;
return 1;
}
将这个代码放在主函数外面,如:
#include <msp430.h>
__intrinsic sword __low_level_init(void)
{
WDTCTL = WDTPW + WDTHOLD;
return 1;
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//add your code
return 0;
}
Ⅵ 单片机的RAM大小是256B,那么我想建立一个int 型数组,最多可以建多大的
我不熟悉MSP430单片机,但我想基本原理差不多吧。
首先明确你的数组需要定义的区间,是全局的还是局部的。
如果是全局的就只考虑你程序RAM量分配和MSP430内部RAM情况就可以了。
如果是局部的就要考虑IAR的局部变量存储方式,看是压堆栈的形式还是类似KEIL编译器的内存复用的形式。
如果是压栈方式存储局部变量就考虑你程序预留堆栈多少空间,不要在堆栈里面弄递归就行。
如果是内存复用的方式有点浪费了感觉...
Ⅶ 怎么确定STC单片机可定义数组的大小
试验一下 unsigned int pdata Data[90],
指定存储类型为pdata,用寄存器间接寻址才能访问高128字节的ram
Ⅷ 单片机原理及应用求数组中最大元素时常采用“打擂台”算法,其编程原理是什么
电机原理及其他的应用,它的除数的它的最大颜色,我们市场还是可以用打擂台的算法了,并且他的编程原理我觉得能够给大家带来一种更好的是。