⑴ 求单片机高手回答~RAM中有130个字节,起始地址为500H,找出中间的最大值,放在600H中,试编
ORG 0000H
MOV R7,#00H
MOV R6,#130
MOV DPTR,#0500H
LOOP:MOVX A,@DPTR
CJNE A,R7,L1
L1:JC L2
MOV R7,A
L2:INC DPTR
DJNZ R6,LOOP
MOV DPTR,#0600H
MOV A,R7
MOVX @DPTR,A
SJMP $
END
⑵ 单片机收到的字符串中取中间字符,长度固定
接收的时候将字符转存入数组,取长度一半的序数那个数组元素就是。比如7个,接收到R[0]-R[6],R[3]里面就是你要的中间字符
⑶ 我给单片机用串口发送“A”“B”“C”三个数据,但是我想单独提取其中一个该怎么办
串口向单片机发送数据,不论发送多少个,单片机也是一个一个接收的,如果单片机的串口设置成中断方式,则每接收一个数据都会中断一次,这样,在中断程序中按顺序接收并保存在一个数组中,要先定义一个数组。假如,串口发送3个数据,那定义数组就3个元素。当接收完3个数据后,再从数组中逐个判断所要的字符就行了。
⑷ 如何迅速取0至10000中间数
如果你要是取了数字单,那就是1万1万÷2就可以了,那也就是5000,所以说5000了,就是他们中间数字就这首位相加除以二就可以了
⑸ 我想把51单片机程序运行中的一个中间数据(变量n的值)存储起来,使之掉电不丢失,重新上电后,
现在多数51单片机里都带eeprom存储空间的,例如:at89s系列和stc89c52,查找芯片手册直接调用相关函数读写就可以了。如果51芯片不带eeprom可以使用at24c02芯片,通过i2c和单片机通信,也是很简单的。单片机的flash空间只是用来存储程序的,一般单片机指令是不能直接修改自己的flash空间的。
⑹ 51单片机怎样从一个非常大的数字里面提取个十百千万位等......
下面举例说明万千百十个的表示方法。其实很简单,用除法取余就行。
i=a/b ;//取商
i=a%b;//取余
方法很多,以下是一例:
unsigned int wan,qian,,shi ,ge,
wan=i/10000;//除一万取商,是万位。
qian=(i/1000)%10;//先除1000,取商,商的个位是千位,所以再除10 取余。
=(i%100)/10%10;//先除100,取商,商的个位是百位,所以再除10 取余。
shi=(i%100)/10;//先除100,取余,商再除10 取余。
ge==(i%10;//除10取余。
不过阁下要知道整形量最大是65535,假如你的数据达到999999,你就要定义长整形量了。
unsigned long int i=999999;
如当I<10的时候 P0=table[i/10]; 个位
这样的算法 我写的不行 ,请高手写下 ,我看下我的出错在什么地方
i/10是取商啊,怎么可能是个位呢?是十位。I<10的话,一定是0了。
移位的方法不行,移位是2进制运算。你这个是十进制。
⑺ 51单片机串口接收到一串16进制的数据,怎样能取出中间的一个字节然后做处理呢
这里和几进制的数据没关系,不管是16进制,还是10进制,还是二进制,它所存储的数值,都是不变的。要处理接到数据,必须做协议,否则,你不知道这一串数据,哪个是第一个字节,哪个又是中间字节。
⑻ 在单片机中通常将一些中间计算结果放在什么地一万
单片机中,计算的中间结果一般放在自己定义的变量中,放置位置根据变量的数据类型而定
DATA型数据,放置位置为内部寄存器。
XDATA型数据,放置位置为扩展的外部数据存储器。
⑼ 单片机串口向电脑串口调试助手发送一组数字,取这组数的前两位给a中间3位给b最后两个给c : 用C语言编程
程序太大,这里字数有限
我也曾为此懊恼很久,查阅大量资料
后来还是自己研究出来的,有效的解决办法
如果你真想研究这个,我倒是可以帮你研究研究
我的资料里面有我的群号,你可以加进来
⑽ 怎么取数组的中间值
已知数组 a[N],目前我想到两种方法:
先排序(一般使用快排 qsort),时间为 O(nlogn),取中间数 a[N/2]
利用选择排序,或冒泡排序,控制循环次数为 N/2 即可。因为这些排序每趟都能得到一个当前最大或最小值,所以执行完 N/2 趟后,就能取得中间数。时间为 O(N^2)