久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2814|回復: 7
打印 上一主題 下一主題
收起左側

單片機串口通信,怎么添加算法

[復制鏈接]
跳轉到指定樓層
樓主

接受數據后,對receiveData進行算法處理,比如加上5,或者乘以5之類的,最后返回電腦是計算好的值。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2018-5-4 17:53 | 只看該作者
此處注釋只是告訴你可以對收到的數據進行處理,如無此必要就不必處理,就按原樣回傳給上位機。
回復

使用道具 舉報

板凳
ID:302865 發表于 2018-5-4 20:07 | 只看該作者
wulin 發表于 2018-5-4 17:53
此處注釋只是告訴你可以對收到的數據進行處理,如無此必要就不必處理,就按原樣回傳給上位機。

不是,這是我注釋的,我想在這里添加算法,如果直接用加法或者乘法,比如10加2,結果會顯示32.(兩位同時相加了)
回復

使用道具 舉報

地板
ID:213173 發表于 2018-5-4 20:31 | 只看該作者
sacredyy 發表于 2018-5-4 20:07
不是,這是我注釋的,我想在這里添加算法,如果直接用加法或者乘法,比如10加2,結果會顯示32.(兩位同時 ...

串口助手按16進制數或字符傳送,在上位機發10其實是0x10,就是16,乘以2當然是32,你再把32回傳,在串口助手上顯示20.
回復

使用道具 舉報

5#
ID:322318 發表于 2018-5-4 20:55 | 只看該作者
可以給你一個最簡單的串口計算器的程序參考一下。
回復

使用道具 舉報

6#
ID:322318 發表于 2018-5-4 20:58 | 只看該作者
#include "reg52.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,c;
uchar receivedata[12] ;
double number1,number2,result1;
uint number3,number4;
uchar number[1][4] ;
uint length,count,i,point,j,k,result2;
uchar yunsuanfu;
uchar senddata[10];
void UsartInit()
{
SCON=0x50;
TMOD=0X20;
PCON=0X80;
TH1=0XF3;
TL0=0XF3;
ES=1;
EA=1;
TR1=1;
}

void Usart() interrupt 4
{
if(RI==1)
{
receivedata[count]=SBUF;
if(receivedata[count]=='=')
{
flag=1;
length=count;
}
count++;
RI=0;
}
}

void main()
{
UsartInit();
while(1)
{
if(flag==1)
{
ES=0;
while(receivedata[i])
{
if(receivedata[i]=='=')
break;
if((receivedata[i]>=48 && receivedata[i]<=57) || receivedata[i]=='.')
{
if(receivedata[i]=='.')
point=1;
number[j][i-k]=receivedata[i];
i++;
}
else
{
yunsuanfu=receivedata[i];
i++;
k=i;
j++;
}
}

if(point==1)
{
number1=atof(number[0]);
number2=atof(number[1]);
switch(yunsuanfu)
{
case '+':result1=number1+number2;break;
case '-':result1=number1-number2;break;
case '*':result1=number1*number2;break;
case '/':result1=number1/number2;break;
default: break;
}
sprintf(senddata,"%.3f",result1);
}
else
{
number3=atoi(number[0]);
number4=atoi(number[1]);
switch(yunsuanfu)
{
case '+':result2=number3+number4;break;
case '-':result2=number3-number4;break;
case '*':result2=number3*number4;break;
case '/':result2=number3/number4;break;
default: break;
}
sprintf(senddata,"%d",result2);
}
for(c=0;c<10;c++)
{
SBUF=senddata[c];
while(!TI);
TI=0;
}
ES=1;
flag=0;
}
}
}


你發送的字符,程序的操作對象其實是它的ASCII碼,你可以先用函數轉化成整型或者浮點型數
Atof()函數:
其作用是把括號內的一個字符串轉化為浮點數:
Atoi()函數:
其作用是把括號內的一個字符串轉化為整數;
Sprintf()函數:
其作用是將一個數變成字符串存到一個數組中去;
sprintf(senddata,"%d",result2);例如這個的意思就是把數據result2變成字符串再存到senddata數組中去。
回復

使用道具 舉報

7#
ID:318768 發表于 2018-5-4 21:04 | 只看該作者
你可以用 printf函數 試試,可好玩了
回復

使用道具 舉報

8#
ID:302865 發表于 2018-5-9 10:31 | 只看該作者
hexinghua666 發表于 2018-5-4 20:58
#include "reg52.h"
#include "string.h"
#include "stdlib.h"

請問輸入 5*2=   ,結果輸出為0,是什么原因
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区三区免费观看 | 99在线资源| 日本免费在线看 | 四虎最新地址 | 中文字幕1区 | 日本成人区 | 一本一道久久a久久精品综合蜜臀 | 超碰97av| 毛片一区 | 精精国产xxxx视频在线 | 99国产精品99久久久久久粉嫩 | www.一区二区三区 | 日韩一区二区免费视频 | 久草网站 | 日韩欧美一区二区三区免费看 | 欧美日韩精品一区二区 | 亚洲国产精品自拍 | 91中文在线观看 | 国产最好的av国产大片 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 二区三区av| 久久成人一区二区三区 | 一区二区三区免费在线观看 | 成人蜜桃av| 国产一区二区观看 | 91高清在线视频 | 成人免费在线视频 | 久久久精品综合 | 91久久国产精品 | 91资源在线播放 | 午夜视频免费网站 | 日批的视频| 国产乱码精品一区二区三区五月婷 | 国产成人精品免费视频大全最热 | 懂色中文一区二区三区在线视频 | 国产视频福利一区 | 欧美专区在线 | 伊人影院在线观看 | 中文字幕国产精品 | 美女国内精品自产拍在线播放 | 国产在线播放一区二区三区 |