單片機(jī)接收電腦四個字節(jié),并判斷返回一個確認(rèn)值,+兩個按鍵發(fā)送給電腦四個字節(jié).docx_第1頁
單片機(jī)接收電腦四個字節(jié),并判斷返回一個確認(rèn)值,+兩個按鍵發(fā)送給電腦四個字節(jié).docx_第2頁
單片機(jī)接收電腦四個字節(jié),并判斷返回一個確認(rèn)值,+兩個按鍵發(fā)送給電腦四個字節(jié).docx_第3頁
單片機(jī)接收電腦四個字節(jié),并判斷返回一個確認(rèn)值,+兩個按鍵發(fā)送給電腦四個字節(jié).docx_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

/*本程序設(shè)計(jì)為主程序內(nèi)循環(huán)檢測中斷標(biāo)示位TI,如果有接收中斷就進(jìn)入計(jì)數(shù)式接收,每接收到一位,接收儲存在數(shù)據(jù)shujui里的0到3并將接收到的字節(jié)反回發(fā)送給電腦,菜母鱟紙?,i就計(jì)數(shù)加一,并且每次都判斷一次夠了四位,就再次判斷第一位是否為0X05,如果是置P0口為0x00,并發(fā)送0x00這個字符到電腦,電腦通過串口助手接收后顯示,如果接收的第一位不是0x05,就只發(fā)送每次接收的字節(jié),P0口不改變,不發(fā)送識別用電腦的串口助手發(fā)送任意四個16進(jìn)制數(shù)字字符,單片機(jī)就可以接收并識別,如果只發(fā)送3個以下,單片機(jī)接收并發(fā)回接收到的3個字符,但不作處理,按K1、K2 健,單片機(jī)會發(fā)送4個預(yù)定的字符,但第一位強(qiáng)行改成了0x01 /0x02,第二、三位是預(yù)定的數(shù)字加自己的第幾個位數(shù)的數(shù)字,第四位是第2+3位的和,K1只取了和,沒有求模,但它如果大于256應(yīng)該會自己益出,就是自己減去256從新開始顯示,K2是直接加入了第2+3位數(shù)據(jù)的和的求模就是直接除以256只要于數(shù),這個作用相當(dāng)于數(shù)據(jù)校驗(yàn)讓接收方可以根據(jù)同樣的方法校驗(yàn)一下接收過來的數(shù)據(jù)是否正確,*/#include #include unsigned char j,k;unsigned char shuju4=0,0,0,0; /待發(fā)送的數(shù)據(jù)unsigned char daifa4=0,0,0,0; /待發(fā)送的數(shù)據(jù)unsigned char m,i,tmp; /m、i 為收發(fā)數(shù)據(jù)的位數(shù),tmp為接收數(shù)據(jù)的時(shí)間限制等待時(shí)間數(shù)sbit K1=P10;/定義按鍵1sbit K2=P11;/定義按鍵2sbit K3=P33;/定義按鍵2void delay(unsigned int a)/延時(shí),省略了一個定時(shí)器,定時(shí)器用tmp來代替了while(-a);void send_char(unsigned char txd)/ 傳送一個字符的調(diào)用子程序SBUF = txd;/ 傳送一個字符while(!TI);/ 等特?cái)?shù)據(jù)傳送TI = 0;/ 清除數(shù)據(jù)傳送標(biāo)志main()/ 傳送一個字符主程序REN=1;/ 定時(shí)器1工作于8位自動重載模式, 用于產(chǎn)生波特率 SM0=0;/ 波特率9600SM1=1;TMOD=0x20;/ 設(shè)定串行口工作方式TH1=0xFD;/ 波特率不倍增TL1=0xFD;/ 啟動定時(shí)器1 TR1=1; EA=1; ES=1;P0=0xff;while(1)if(RI)/ 是否有中斷,有就開始準(zhǔn)備好收數(shù)據(jù)了 RI = 0;/先把串口接收中斷標(biāo)志清0復(fù)位,好讓它接收下一個字節(jié) m+;/要接收的個數(shù),接收 一位,就加一 tmp=0;/ 等待接收時(shí)間清0 shujum=SBUF;/ 暫存接收到的數(shù)據(jù) send_char(shujum);/ 回傳接收到的數(shù)據(jù)i if(m=4)/判斷是否接收夠了四個字節(jié),如果夠了四個字節(jié),進(jìn)入 m=0;/如果夠了四個字節(jié) ,m的任務(wù)完成,就可以清0if(shuju1=0x05)/然后判斷第一個字節(jié)是否為0X05 m=0;/ 所以就把m清0 P0=0x00;/如果是0X05,Po口顯示0x00,點(diǎn)亮8個LED send_char(P0);/同時(shí),通過串口把Po狀態(tài)0x00發(fā)送到電腦,這個相當(dāng)于 /給電腦發(fā)了一個反饋信號,告訴電腦收到了正常的數(shù)據(jù)包 else /判斷如果第一個字節(jié)不是0X05就執(zhí)行 P0=0xff;/Po口關(guān)閉led,不給電腦上傳數(shù)據(jù) if(m)/m說明前面只要有一次發(fā)生接收中斷,就開始進(jìn)入tmp 計(jì)數(shù),沒有就不進(jìn)入可以節(jié)省/cpu的負(fù)擔(dān),不用時(shí)刻都在讓tmp計(jì)數(shù), tmp+;/執(zhí)行完上面的循環(huán)接收時(shí),不管接收到幾個,tmp都做為計(jì)數(shù)器功能,加一if(tmp=10)/經(jīng)測試正常接收四個字節(jié),tmp會加到4, m=0;/所以不管接收了幾個,等tmp加到了10,不管接收幾位,就把m和tpm強(qiáng)行tmp=0;/給清0.目的是防止接收3個以下數(shù)量的字節(jié),少于4個都是錯包強(qiáng)行丟棄 /下次再有數(shù)據(jù)中斷時(shí),重新開始接收四個字節(jié)/發(fā)送方也必需從新發(fā)送四個完整字節(jié),否則一律丟棄/if(K1=0)/如果有健按下delay(5000);/延時(shí)一下 if(K1=0)/確實(shí)有按鍵按下while(!K1);/等待忪手 j=2;/設(shè)定一個將要發(fā)送的第一個起始數(shù)據(jù)為2for(i=0;i4;i+)/循環(huán)發(fā)送四個字節(jié),i 自動加一, daifai=j;/待發(fā)的數(shù)據(jù)等于數(shù)據(jù)位數(shù)i 默認(rèn)從0開始if(i=0)/確認(rèn)如果是第一個將要發(fā)送的字節(jié) daifai=0x01;/把第一個字節(jié)強(qiáng)行改成0x01,用第一位當(dāng)作數(shù)據(jù)包識別位if(i=3)/確認(rèn)如果是第四個字節(jié),強(qiáng)行把它用第二個和第三個字節(jié)的相加daifa3=daifa1+daifa2;/之和的值附給將要發(fā)送的第四個/字節(jié) daifa3send_char(daifai);j+; / 正常先發(fā)第一個字節(jié) ,這是第二、三個字節(jié),最后發(fā)第四個字節(jié)delay(1000);/ 等特?cái)?shù)據(jù)傳送 / 清除數(shù)據(jù)傳送標(biāo)志 / 代表發(fā)送位數(shù)的j自動加一位,/ 延時(shí)一會,等待接收方有足夠的時(shí)間來處理/if(K2=0)/這個上面的定法基本上是相同的,按k1發(fā)送的第一個字節(jié) 是0x01/k2 按下發(fā)送的第一個字節(jié)是0x02, 兩個第四個字節(jié)的delay(5000); if(K2=0)/校驗(yàn)位,一個求模了,一個沒有,但結(jié)果是一樣的,while(!K2);/本人也是在觀察之中,中是給大家演示一下, j=128;/設(shè)定一個將要發(fā)送的第一個起始數(shù)據(jù)為128 for(i=0;i4;i+) daifai=j;if(i=0)daifai=0x02;if(i=3)/確認(rèn)如果是第四個字節(jié),強(qiáng)行把它用第二個和第三個字節(jié)的相加/之和然后再除以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論