欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)怎樣對(duì)從串口接收到的數(shù)學(xué)運(yùn)算式進(jìn)行運(yùn)算 [打印本頁(yè)]

作者: henanljh    時(shí)間: 2016-3-24 21:56
標(biāo)題: 51單片機(jī)怎樣對(duì)從串口接收到的數(shù)學(xué)運(yùn)算式進(jìn)行運(yùn)算
51中單片機(jī)怎樣對(duì)從串口接收到的數(shù)學(xué)運(yùn)算式進(jìn)行運(yùn)算,并把運(yùn)算結(jié)果再輸出到串口?

作者: 來(lái)時(shí)莫徘徊    時(shí)間: 2016-3-25 00:05
通過(guò)程序控制。
作者: luoluoluo136    時(shí)間: 2016-3-25 11:08
什么數(shù)學(xué)運(yùn)算式?如果傳過(guò)來(lái)的是字符串“1+1”這樣的話,你需要自己解釋這個(gè)字符串,再做運(yùn)算

作者: 129    時(shí)間: 2016-3-25 11:21
一般單片機(jī)收到的數(shù)據(jù)是根據(jù)你定的協(xié)議來(lái)的,你的傳輸協(xié)議應(yīng)該規(guī)定了哪個(gè)字符是什么意思。如果像你說(shuō)的串口收到數(shù)學(xué)運(yùn)算式,那么你收到數(shù)據(jù)后對(duì)數(shù)據(jù)一個(gè)一個(gè)解析出來(lái)再運(yùn)算就可以了。
作者: 129    時(shí)間: 2016-3-25 11:22
算出來(lái)結(jié)果以后再通過(guò)串口發(fā)出去啊
作者: a510731092    時(shí)間: 2016-3-25 13:09
我也想知道,求解答
作者: henanljh    時(shí)間: 2016-3-25 15:18
luoluoluo136 發(fā)表于 2016-3-25 11:08
什么數(shù)學(xué)運(yùn)算式?如果傳過(guò)來(lái)的是字符串“1+1”這樣的話,你需要自己解釋這個(gè)字符串,再做運(yùn)算

就是像(2+3)*3這樣計(jì)算器的功能,具體怎么解釋
作者: henanljh    時(shí)間: 2016-3-25 15:20
129 發(fā)表于 2016-3-25 11:21
一般單片機(jī)收到的數(shù)據(jù)是根據(jù)你定的協(xié)議來(lái)的,你的傳輸協(xié)議應(yīng)該規(guī)定了哪個(gè)字符是什么意思。如果像你說(shuō)的串口 ...

怎樣對(duì)字符進(jìn)行解析啊
作者: luoluoluo136    時(shí)間: 2016-3-26 16:11
先在字符串中找運(yùn)算符號(hào),然后運(yùn)算符號(hào)之間的就是數(shù)值了,然后就是字符串轉(zhuǎn)數(shù)值,再進(jìn)行運(yùn)算
作者: 3263065307    時(shí)間: 2016-5-5 19:16
luoluoluo136 發(fā)表于 2016-3-26 16:11
先在字符串中找運(yùn)算符號(hào),然后運(yùn)算符號(hào)之間的就是數(shù)值了,然后就是字符串轉(zhuǎn)數(shù)值,再進(jìn)行運(yùn)算

可是串口接收的時(shí)候會(huì)出現(xiàn)數(shù)據(jù)不完整的情況呀比如123456可能會(huì)顯示12356少一些數(shù)據(jù)怎么辦呀

作者: luoluoluo136    時(shí)間: 2016-5-6 08:45
3263065307 發(fā)表于 2016-5-5 19:16
可是串口接收的時(shí)候會(huì)出現(xiàn)數(shù)據(jù)不完整的情況呀比如123456可能會(huì)顯示12356少一些數(shù)據(jù)怎么辦呀

這個(gè)就是你串口處理的問(wèn)題了額。。。數(shù)據(jù)基礎(chǔ)問(wèn)題沒(méi)有解決好。。。建議你先去做一下串口收發(fā)的程序,調(diào)通了再去搞運(yùn)算
作者: 3263065307    時(shí)間: 2016-5-7 20:45
luoluoluo136 發(fā)表于 2016-5-6 08:45
這個(gè)就是你串口處理的問(wèn)題了額。。。數(shù)據(jù)基礎(chǔ)問(wèn)題沒(méi)有解決好。。。建議你先去做一下串口收發(fā)的程序,調(diào)通 ...

我感覺(jué)我的數(shù)據(jù)處理沒(méi)問(wèn)題呀,就是會(huì)出現(xiàn)那種現(xiàn)象你看看我的代碼
void uart() interrupt 4
{
           unsigned char dat;
           if(RI)
          {
                   dat = SBUF;            //接收到的數(shù)據(jù)暫存在dat中
                  datebuf[ i]=dat;
                  SBUF = dat;                //接收到的數(shù)據(jù)發(fā)送給PC機(jī)
                  while(TI==0);        //等待發(fā)送完成,發(fā)送使用的查詢方式
                  i++;
                   TI = 0;                        //清除發(fā)送結(jié)束標(biāo)志
                  RI = 0;                        //清除接收中斷標(biāo)志
          }
}
作者: tjk18110695857    時(shí)間: 2021-4-23 17:01
luoluoluo136 發(fā)表于 2016-3-25 11:08
什么數(shù)學(xué)運(yùn)算式?如果傳過(guò)來(lái)的是字符串“1+1”這樣的話,你需要自己解釋這個(gè)字符串,再做運(yùn)算

請(qǐng)問(wèn)解釋完字符串后,如何計(jì)算數(shù)據(jù)得到結(jié)果,并輸出

作者: 嘿!小子    時(shí)間: 2021-4-24 07:46
51單片機(jī)的串口,是個(gè)全雙工的串口,發(fā)送數(shù)據(jù)的同時(shí),還可以接收數(shù)據(jù)。
當(dāng)串行發(fā)送完畢后,將在標(biāo)志位 TI 置 1,同樣,當(dāng)收到了數(shù)據(jù)后,也會(huì)在 RI 置 1。
無(wú)論 RI 或 TI 出現(xiàn)了 1,只要串口中斷處于開(kāi)放狀態(tài),單片機(jī)都會(huì)進(jìn)入串口中斷處理程序。
在中斷程序中,要區(qū)分出來(lái)究竟是發(fā)送引起的中斷,還是接收引起的中斷,然后分別進(jìn)行處理。
看到過(guò)一些書(shū)籍和文章,在串口收、發(fā)數(shù)據(jù)的處理方法上,很多人都有不妥之處。
接收數(shù)據(jù)時(shí),基本上都是使用“中斷方式”,這是正確合理的。
即:每當(dāng)收到一個(gè)新數(shù)據(jù),就在中斷函數(shù)中,把 RI 清零,并用一個(gè)變量,通知主函數(shù),收到了新數(shù)據(jù)。
發(fā)送數(shù)據(jù)時(shí),很多的程序都是使用的“查詢方式”,就是執(zhí)行 while(TI ==0); 這樣的語(yǔ)句來(lái)等待發(fā)送完畢。
這時(shí),處理不好的話,就可能帶來(lái)問(wèn)題。
看了一些網(wǎng)友編寫的程序,發(fā)現(xiàn)有如下幾條容易出錯(cuò):
1.有人在發(fā)送數(shù)據(jù)之前,先關(guān)閉了串口中斷!等待發(fā)送完畢后,再打開(kāi)串口中斷。
這樣,在發(fā)送數(shù)據(jù)的等待期間內(nèi),如果收到了數(shù)據(jù),將不能進(jìn)入中斷函數(shù),也就不會(huì)保存的這個(gè)新收到的數(shù)據(jù)。
這種處理方法,就會(huì)遺漏收到的數(shù)據(jù)。
2.有人在發(fā)送數(shù)據(jù)之前,并沒(méi)有關(guān)閉串口中斷,當(dāng) TI = 1 時(shí),是可以進(jìn)入中斷程序的。
但是,卻在中斷函數(shù)中,將 TI 清零!
這樣,在主函數(shù)中的while(TI ==0);,將永遠(yuǎn)等不到發(fā)送結(jié)束的標(biāo)志。
3.還有人在中斷程序中,并沒(méi)有區(qū)分中斷的來(lái)源,反而讓發(fā)送引起的中斷,執(zhí)行了接收中斷的程序。
對(duì)此,做而論道發(fā)表自己常用的方法:
接收數(shù)據(jù)時(shí),使用“中斷方式”,清除 RI 后,用一個(gè)變量通知主函數(shù),收到新數(shù)據(jù)。
發(fā)送數(shù)據(jù)時(shí),也用“中斷方式”,清除 TI 后,用另一個(gè)變量通知主函數(shù),數(shù)據(jù)發(fā)送完畢。
這樣一來(lái),收、發(fā)兩者基本一致,編寫程序也很規(guī)范、易懂。
更重要的是,主函數(shù)中,不用在那兒死等發(fā)送完畢,可以有更多的時(shí)間查看其它的標(biāo)志。
作者: hmhahaha    時(shí)間: 2021-4-24 11:14
以查詢?yōu)槔?jiǎn)單來(lái)說(shuō),就是利用軟件(代碼)去判斷、查詢TI和RI標(biāo)志位的狀態(tài),然后依據(jù)其狀態(tài)去執(zhí)行各種操作。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1