第一篇:單片機教學總結
2014—2015學年第二學期《單片機應用技術》課教學總結
本學期本人擔任電氣中職13-1班《單片機應用技術》課的教學任務,為了順利完成本門課的教學任務,本人能從各方面作起,現總結如下:
1.課前準備:根據學院教務處制定的實施性教學計劃,認真研究組織同專業人員一起編寫教學大綱,并根據教學大綱的要求選用合適的教材及參考資料。認真閱讀教材和參考資料,根據教學進度計劃認真制定本學期本課程的授課計劃。2.認真備課:在多年的教學體驗中感覺到,單片機方面的專業基礎課的教學有一定的難度,同時,此類課程較抽象。因此在備課之前,必須對所有內容進行熟悉,參考多方面的資料,認真深入鉆研教材,確定重點難點。根據本院現有的條件和學生的實際情況,認真授課、認真聽課,虛心學習,不斷反思教學,使教學有秩序、有組織、有步驟地進行。
3.認真組織課堂教學。上課時,本著“傳道、授業、解惑”的原則,努力提高教學質量,使講解有條理、清晰、準確、生動。使每堂課上學生都有所獲,努力使學生學好理論知識,培養能力,發展智慧,培養學生的正確思維方式,學會好的學習方法。堅持做到以學生的學為主體,教師的教為主導,鞏固和運用為主線。在課堂上,特別注意調動學生的積極性,采用啟發性教學,讓學生主動學習,輕松愉快地學習,并不斷樹立學生的自信心,從各方面提高學生的能力。
4.組織實踐教學。在教學活動現有的條件下,盡量帶學生去實驗室參觀,并做一些實際實驗,以滿足基本需要。
5.虛心請教。教師的教學過程即是一個不斷學習的過程。因此,在此過程中,遇到疑難問題,虛心向經驗豐富的教師請教。跟他們學習好的教學方法,好的教學經驗,并向年輕教師學習他們的新知識,新理念,做到思想和認識上不落伍,跟上時代發展。
6.認真批改作業。堅持布置適量的作業,使學生所學知識得到鞏固和提高。布置作業時,堅持做到有針對性,認真及時地批改作業。并針對學生的作業情況,認真透徹地進行講評,及時掌握學生的學習情況。
7.認真反思教學。教學這一活動,沒有反思就不會有進步。堅持每次授課后,認真回想,認真反思。
8.完成情況:本學期計劃完成理論42學時,實驗14學時。實際完成56學時。9.教學效果: 成績最高分82分,平均分55分,及格率達到62%。
總之,在這一學期的教學過程中,我盡力地做好每項工作。其中學到的東西固然不少,但不足之處也有。在以后的教學工作中,我將不斷總結經驗,發揚優點,改進缺點,提高自己的教學水平和教學質量。
任課教師:買爾孜艷
2015年7月4日
第二篇:單片機總結
單片機總結
——20120921030黃國林 我所在的專業生物醫學工程專業,是一個理工醫相結合的專業,但是側重的方向還是工程學,對于計算機,單片機的要求比較高,雖然我們在大三的時候會有單片機的專業課,但是我們院也成立的相關的創新實驗室,進行單片機的學習,組建自己的相關團隊,做創新研發。但自己的只是還是有限,因此但是選修了這門課來擴寬自己的視野,對以后的單片機的學習打一定得基礎。
51單片機的運用涉及到我們生活中的方方面面,為我們的生活提供了諸多便利,小到我們平時調動車流的交通信號燈,再到我們平時使用的形形色色的數碼管,液晶顯示屏等等,下面介紹一個我學習過的單片機的報警裝置與旋轉燈的應用./* 名稱:報警與旋轉燈
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit SPK=P3^7;
uchar FRQ=0x00;
//延時
void DelayMS(uint ms)
{
}
//INT0中斷函數 uchar i;while(ms--)for(i=0;i<120;i++);說明:定時器控制報警燈旋轉顯示,并發出仿真警報聲。
void EX0_INT()interrupt 0
{
}
//定時器0中斷
void T0_INT()interrupt
1{
}
//定時器1中斷
void T1_INT()interrupt
3{
}
//主程序
void main()
{
P2=0x00;SPK=0x00;TMOD=0x11;TH0=0x00;//T0、T1方式1 TH1=-45000/256;TL1=-45000%256;P2=_crol_(P2,1);TH0=0xfe;TL0=FRQ;SPK=~SPK;TR0=~TR0;//開啟或停止兩定時器,分別控制報警器的聲音和LED旋轉 TR1=~TR1;if(P2==0x00)P2=0xe0;//開3個旋轉燈 elseP2=0x00;//關閉所有LED
}
TL0=0xff;IT0=1;IE=0x8b;IP=0x01;TR0=0;TR1=0;while(1){} FRQ++;DelayMS(1);//定時器啟停由INT0控制,初始關閉//開啟0,1,3號中斷 //INT0設為最高優先
同時,51單片機只是單片機的一類,單片機的應用十份廣泛,以后我會更加努力的學習相關的內容。
20120921030黃國林
第三篇:單片機項目總結
單片機項目總結
段紹峰、王春光、于和善
一、團隊遇到的難題及解決方案
1、我們再買器件時,由于不知道型號以及性能指標,所以買了很多并不需要的器件,并且有時買不到需要的器件,所以被迫更改電路設計。
2、在設計的過程中,編輯的程序不能應用到我們的硬件中,比如時鐘的程序不能使始終運行,以及溫濕度顯示不夠準確。在這種情況下,我們不斷更改程序,比如調整LCD的偏置電壓,有時還更改連接的端口,最后解決了兩個顯示問題。
3、起始時,我們并沒有弄懂數碼管的共陰以及共陽接法,導致電路連接錯誤,最后檢查后改正了電路焊接。并且初始時并沒有搞懂窗簾控制芯片的輸入電壓的定義,所以導致輸入電壓過高,燒壞了芯片,解決方法就是換了一個芯片重新進行了連接。
4、在編寫時鐘的程序時,開始不會編寫音樂的程序,經過Google后,明白音樂的編寫時通過改變輸出信號的頻率以及長短來改變聲音,最后實現了音樂的編寫。而且開始時并不知道DHT11芯片的信號的讀取,所以便在網上搜索數據手冊,弄懂其信號的輸出時輸出二進制數,并且通過時間長短代表0和1,于是懂得了其程序的編寫。
5、由于我們的智能家居是由三部分實現,所以需要的端口很多,一個單片機不夠,最后在我們減少端口使用未果后,便采取了使用三
個單片機的策略,實現了我們的項目。
二、團隊管理
通過單片機課上的系統設計項目,作為一個三人組成的團隊,我們在團隊管理方面都深有體會。
團隊成員都要有責任感,每個人都要積極做項目,對單片機有很高的興趣,遇到困難決不退縮。并且對項目的總體要有一定的把握與了解,能夠做到相互監督,相互督促。在遇到問題是相互幫助,齊心協力解決。但是團隊也是需要責任分配的,每個人都要負責好自己的職責,最后能夠保證完成自己的任務,最后能夠經過大家的共同努力完成單片機項目。
三、課程設計體會
1、在項目的制作中,能夠充分利用我們學過的知識,并且能增強我們對知識的利用能力,電路的設計與焊接,以及程序的編輯都得到了充分的鍛煉。并且在項目的制作過程中,我們根據自己的需要學習知識,并且把知識應用到制作中,這是先明確問題所在,通過一切渠道尋找知識來源,學習,再應用。這是我們在高中沒有接觸過的全新的學習方法,讓我們受益匪淺。
2、在設計的過程中,我們先是設計溫室控制,以及窗簾的定時的半自動升降,但是在制作過程發現這些并不是很好做,而且我們還把繼電氣控制電路和窗簾控制芯片燒掉,這些都是我們未曾想到的問題,但是我們及時改正思路,最后完成了我們的項目。這是我們明白
不要盲目自信,有時要量力而行。
3、我們在做單片機時,花費了很多的時間,而且更改了好幾次電路,浪費了不少的東西,成本控制的有點高,超出了我們的預期。所以我們以后再做項目需要更加詳細的計劃,爭取能夠以最小的成本收獲最好的結果。
四、項目成員貢獻排序
段紹峰完成了窗簾控制電路,并且制作了小房子,完成網站設計;王春光完成了音樂始終的設計與制作,并且完成了我們的結題論文。于和善完成了溫濕顯示電路的設計與制作,并且制作了PPT以及單片機項目總結。三人共同完成了我們的實驗進程與感想。
所以三人的貢獻為:段紹峰33%,王春光 33%,于和善33%。
五、課程改革建議
1、希望能夠更新我們的實驗裝備,讓我們使用更加方便。
2、望能夠每星期都有實驗,并且每天都能開放實驗室。并且希望老師以及學長能夠給我們更多的幫助。
3、能夠推薦更加適應我們的輔助叢書,幫助我們學習。
第四篇:單片機課程設計總結
單片機課程設計總結
做了兩周的課程設計,有很多的心得體會,有關于單片機方面的,更多的是關于人與人之間關系方面的。
我們組一共有三個人,但其他兩個人是真的神龍見首不見尾,除了在最后答辯的時候他們一起坐在了我旁邊,冠冕堂皇的指著我畫了幾遍的圖說了幾嘴,我想可能他們自己都不知道自己在說怎么,雖然有的東西他們也答出來了。我佩服他們的勇氣,羨慕他們的運氣(我見到的很多做了10 天的人最后的成績都有不如他們的),但是鄙視他們的做法。
所幸的是,我得到了很多同學的幫助。我想沒有他們我可能都要放棄了,因為我本人對單片機也并不是很熟悉,學的東西好像它是它,我是我似的,理論聯系不了實際。以前的匯編語言沒學好,一開始的程序這塊兒就要令我抓狂了。后來請教我們班的一個男生,每次跟他一起到試驗室調試程序(他們組也只有他一個人動手),看他邊做邊給我講解。最后在開發機上做出來的時候,雖然不是我自己寫的,但看他那么高興,我也有一種分享到的成就感。后來我們組就用了他寫的程序,他自己又抽空做了些拓展。
接下來就是做硬件方面的焊接工作了。沒想到這項看起來不需要多少技術的工作卻是非常的勞心勞力。很多次是早上起來帶瓶水帶些吃的到實訓中心,一泡就是一天。我看到有很多人跟我一樣,不同的是他們是三三兩兩,而我大部分時間都是一個人做。在這個時候也有很多人幫助我,或是熱心的幫我帶飯,或是在我打盹兒的時候幫我做點焊接。大家都鼓勵我,即使最后出不來東西,但是一定要堅持把它做完。當我想放棄的時候,我也這么對自己說,即使你做出來的是次品甚至不合格品,但是你一定要拿出來一件成品。
在要驗收前,終于做了一件成品出來,不幸的是它真的是一件不合格品。幫我的那個男生做的已經出來了,所以最后應該還是我的焊接方面的問題。有一點灰心,想再重做來不及了,單是檢查線路卻也查不出來什么問題。那么就準備答辯吧。我對著電路圖再看課本,發現以前很多覺得很難記的東西現在記起來容易多了,因為整天都在同它們打交道。51的引腳及其功能,A/D轉換器的,驅動器的,所有我用到的我都一再的看書了解,同時請教同學我看書過程當中的疑惑。在這個過程中又發現了以前焊接當中出的一些問題,能改的就改,不能改的,咳,要是時間再多一些,或者我能早點做好,要是不只是我一個人動手……算了吧,不要想那些如果,還是準備我自己的,做好我現在能做的吧。
還好,驗收還算成功,得了3分,不是很高,但是我覺得對我來說已經很好,代表了我真實的水平,我覺得我對單片機的一些知識在這個動手的過程中真的是從無到有增長的。同時我也盡量不去想別人得了多少分,沒有什么不平衡的,有些人付出的是努力,有些人付出的是風險代價,其實這也沒有什么不一樣,這一點我早就了解。
最后,我發現自己對單片機竟然也有了一點興趣,想暑假回家以后自己去買一些
東西來做,再補一補匯編語言。有什么問題請教下以前的那些老同學好了,他們好厲害,在高中勞動課就成功的做出過調頻收音機,大一暑假的時候參加了學校的電子競賽培訓接著比賽,不過后來怎么樣我就不知道了。汗。看來要多保持聯絡,這次回家就好好找他們敘敘舊。
內容簡介:
單片機課程設計總結報告:電子萬年歷的設計與制作
一、設計目的及意義
(1)在學習了《數字電子技術》和《單片機原理及接口技術》課程后,為了加深對理論知識的理解,學習理論知識在實際中的運用,培養動手能力和解決實際問題的經驗讓學生接觸專用時鐘芯片DS1302,并會用DS1302芯片開發時鐘模塊,應用到其他系統中去。熟悉WAVE軟件調試程序和仿真.(2)通過實驗提高對單片機的認識;
(3)通過實驗提高焊接、布局、電路檢查能力;
(4)通過實驗提高軟件調試能力;
(5)進一步熟悉和掌握單片機的結構及工作原理。
(6)通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。
(7)通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。
(8)通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今后從事相應打下基礎。
二、設計內容要求
電子萬年歷能顯示陽歷年、月、日、星期、[小]時、分、秒和陰歷月、日,在顯示陰歷時間時能標明是否為閏年。
內容預覽:
課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新日異,單片機已經成為當今計算機應用中空前活躍的領域,在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發技術是十分重要的。回顧起此次單片機課程設計,我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在接近四星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。
在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說不懂一些元器件的使用方法,對單片機匯編語言掌握得不好……通過這次課程設計之后,一定把以前所單片機課程設計總結心得……
……單片機課程設計總結心得的開發技術是十分重要的。回顧起此次單片機課程設計,我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在接近四星期的日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說不懂一些元器件的使用方法,對單片機匯編語言掌握得不好……通過這次課程設計之后,一定把以前所學過的知識重新溫故。這次課程設計終于順利完成了,在設計中遇到了很多編程問題,最后在**、**、**老師的辛勤指導下,終于游逆而解。同時,在**、**、**老師那里我學得到很多實用的知識,在次我表示感謝!同時,對給過我幫助的所有同學和各位指導老師再次表示忠心的感謝
第五篇:單片機串口總結
51單片機串口總結
有句話說“盡信書不如無書”,要學好單片機就要不斷的、大膽的實驗,要多懷疑,即使我們的懷疑最終被證明是錯誤的那么這也是進步(人們認識事物很多情況下來源于懷疑),當懷疑出現時就要去實踐。有很多東西如果不通過實踐是不可能掌握其中隱藏的奧秘,就拿51單片機串口通訊這一塊,我認為掌握很好了,可以很輕松的實現數據的接收、發送,但這段時間當我重新學習串口時,我才發現里面還有很多小細節從沒注意,更別說研究了。對于接收發送程序永遠是按照別人的模式來編寫程序,并沒有真真正正的挖掘深層次的內容。我身邊太多的人在臨摹別人的程序,當然我不反對,但是希望自己多問幾個問什么,單純的會編程是學不好單片機的,畢竟單片機有自己獨特的硬件結構。
開講之前先簡要說一下同步、異步通信:
同步通信:發送方時鐘對接收方時鐘控制,使雙方達到完全同步。
異步通信:發送與接受設備使用各自的時鐘控制數據的發送和接受過程(雖然時鐘不同,但一般相差不大)。
51單片機串行口結構
從上圖中我們看到,51單片機有兩個物理上獨立的接收、發送緩沖器SBUF,它們共用同一個地址99H,但是請注意:接收緩沖器只能讀而不能寫,發送緩沖器只寫不讀。單片機可以同時實現數據的發送與接收功能。
特別注意:接收器是雙緩沖結構:當前一個字節從接收緩沖區取走之前,就已經開始接收第
二個字節(串行輸入至移位寄存器),此時如果在第二個字節接收完畢而前一個字節還未被讀走,那么就會丟失前一個字節。
51單片機串口控制寄存器
關于51單片機的控制寄存器各個位表示的含義在這里我只談SM2。
SM2為多機控制位,主要用于工作方式2和3,當接收機的SM2=1時,可以利用接收到的RB8來控制是否激活RI(RB8=0不激活RI,收到的數據丟失;RB8=1時收到的數據進入SBUF,并激活RI ,進而在中斷服務程序中將數據從SBUF中讀走)。當SM2=0時,不論收到的RB8為何值都將使接收到的數據進入SBUF,并激活RI,通過控制SM2實現多機通信。
51單片機串口通訊方式
51串口通訊方式有3種,方式0、方式
1、方式2與方式3,他們的工作模式不盡相同。首先他們的波特率很容易忽視。方式0與方式2的波特率固定,而方式1和3的波特率由T1的溢出率決定。
方式0的波特率=f/12
系統晶振的12分頻,換句話說12M晶振的情況下,其波特率可達1M,速度是很高的(當我們在選用串行器件并采用方式0時需要特別注意器件所能允許的最大時鐘頻率)。
方式2 =f/64或f/32(當SMOD=1時為f/32,SMOD=0時為f/64)。
曾經我用方式2進行MODBUS通信時,總是通訊失敗,我仔細檢查程序,沒有發現邏輯錯誤,特別是當我參考別人的程序時,發現很少有人用方式2進行MODBUS通訊,所以當時自己妄下結論51單片機的串行方式2不可用,直到有一天夜里我突然想起方式2的波特率是固定的,試想晶振11.0592M/32或11.0592M/64怎么也不可能是9600啊,怎么可能通信成功。這才恍然大悟,看來還是自己太武斷了,沒有認真看書啊。有時我們認為我們犯這樣的錯誤很低級,其實我們很多次都是因為這樣的小細節導致我們整個系統不正常,正所謂“千里之堤毀于蟻穴”,這些細節真的傷不起啊。
方式1、3波特率=(2smod/32)*T1的溢出率,其中TI的溢出率=f/{12*[256-(TH1)]}.關于3種通訊方式其中有幾點特別容易出錯:
1、無論采用哪種通訊方式,數據發送和接受都是低位在先,高位在后。、3種方式作為輸出,由于輸出是CPU主動發送,不會產生重疊錯誤,當數據寫入SBUF后,發送便啟動(通過單片機內部邏輯控制,與程序無關),當該字節發送結束(SBUF空),置TI。不要理解為當數據一寫入SBUF就置位TI,如果中斷允許則在中斷中發送數據,這就大錯特錯了。同樣作為輸入,可能會產生重疊錯誤(主要依賴于特定的環境),當一個字節的數據接收完畢(SBUF滿)置位RI,表示緩沖區有數據提示CPU讀取。
接下來通過一些實驗具體說明串口通信中需要注意的地方 方式0輸出
方式0主要功能是作為移位寄存器,將數據從SBUF中逐位移出,最常見的用法就是外接串入并出的移位寄存器,如74LS164。之前在做這一部分實驗時總是利用單片機I/O端口模擬實現,現在想想在串口未被占用的情況下,方式0是最好的實現方式。
利用串口方式0,向74LS164輸出字符“0”的編碼,程序如下:
該程序采用了中斷方式實現,結果是通過74LS164使數碼管顯示“0”。實驗結果如下:
這里我說明幾點: 如果采用查詢方式,并且只發送一遍,那么程序最后的while(1);不可以省略,否則會出現數碼管閃爍的現象(在KEIL環境下,main()函數也是作為一個調用函數,最后也有返回RET,它不像C中的main()函數,當執行完畢后就停止,而是重新復位執行,如此反復,這一點要特別注意)
這是查詢方式下不加while(1);的現實效果 如果采用中斷方式發送,請記得中斷中清除TI,僅僅是為了解除中斷標志,而不是等待發送結束,因為此時數據早已離開了SBUF跑到外邊去了。3 74LS164最高25MHZ,采用方式0,沒有問題。
方式0作為輸入模式
以74ls165(最高時鐘25MHZ)為例,可以滿足要求。
對應結果如下:
(注意:74ls165線傳送高位,而串口通信低位在先,所以顯示的數據和實際數據高低位正好相反
P1.7---P1.0對應D0---D7)。
本程序只接收一次,也許有人會問,中斷程序中REN=0,表示什么意思?可不可以改成ES=0?
這個問題很好,首先REN=0表示接收禁止,即不允許串口接收數據;ES=0是禁止中斷和單片機是否接收數據沒有關系,不接收數據自然中斷允許也是徒勞,這兩者有很大的區別。我們在很多接收程序中經常可以看到在判斷RI標志后緊跟著清除標志位,我想問一下,為什么?)
如果我們也按照這種模式改寫會怎樣呢?
實驗結果如下
兩次結果差異怎么這么大?為什么會這樣子?
為了便于理解,也為了說明問題方便,對中斷程序做了如下處理:
結果又變了
是不是感覺很奇怪,究竟咋回事呢?
首先中斷程序中當判斷RI置位標志后緊跟著清零是為了接收下一個字節的數據,也為了避免單片機重復中斷。
當51單片機串口方式0作輸入時,在REN=1且RI=0的條件下就啟動了單片機串口接收過程。如果有一個條件不滿足就不能啟動接收過程,以上出現的錯誤正式由于忽略了這個重要的因素造成的。在RI清零后由于REN仍然為1,單片機已經開始接收第二字節的數據,由于串口速度很快,RI仍會置位,而緊接著將REN清零只能阻止單片機接收數據,但是卻
不能阻擋第二次中斷。由于只接收了部分外部引腳數據(此時外部引腳為高電平,即邏輯1,其實單片機只接收了一位,對于12M晶振而言,方式0大約8us接收一個字節數據)。相反在RI=0與REN=0之間加上適當的延遲,就可以保證一個字節的數據全部接收完畢,故此時我們讀上來的一個字節為0xff。
我在中斷程序中添加了一個中斷計數器(不加延遲),發現中斷服務程序的確執行了兩次
結果如下
加上延遲結果
這就驗證了剛才的結論。
至于說可不可以換做ES=0,回答是可以的,盡管同樣可以實現數據的讀取,但是實質不同,當禁止中斷后,單片機仍在接收外部數據,只是不再請求中斷,自然的不再讀取第2、3。。。字節的數據,那么P1將保留第一次中斷時從SBUF中讀出的數據。如果某一時刻打開中斷發現結果不正常,如果理解了上面的機制就不會覺得驚訝了。建議:單次接收時,中斷服務程序中REN清零放在RI之前。
還有一個問題非常重要:
如果我在中斷服務程序中不清除RI,會怎樣?
很少有人會這樣用,但是經常有人忘記了(包括我)。課本上寫得很清楚,務必在中斷中用軟件清除RI,為什么要這樣呢?難道僅僅是為了接收下一次數據并且避免單片機不斷的響應中斷?的確如此,如果對于一個小系統而言,不清除中斷標志,那么單片機將不停的中斷,影響接下來任務的執行,系統必然癱瘓,而且不能正常的接收數據。總結:方式0作為發送方,只要向SBUF中寫入數據就啟動了發送過程;
方式0在座位接收模式時,REN=
1、RI=0的情況下就已經啟動了接收過程。在中斷程序中要注意兩者清零的順序。
還有一種情況要特別注意:單片機復位時SCON自動清零,如果單片機不工作在方式0,那么如果采用位操作SCON時也要注意REN=1與SM0、SM1的書寫順序,總之切記方式0啟動發送、接收數據的條件。
方式1 方式1為10位異步通信模式。作為輸出和方式0沒有本質的區別,不同的是數據幀的形式,但是對于接受模式則有點不同,當REN=1且RI=0時,單片機并不啟動接收過程。而是以已選擇波特率的16倍速率采樣RXD引腳的電平,當檢測到輸入引腳發生1---0負跳變時,則說明起始位有效,才開始接受本幀數據。方式1模式下 單片機可以工作在全雙工以及半雙工方式。下面舉兩個例子
半雙工
主機發送某一字符,從機接收到數據后返回數據加1的值 比如 主機發送“1“,從機收到后回復主機”2“。實驗結果如下:
方式1工作方式主要注意: 1 波特率可變。數據接收以起始位為標志,停止位結束。當RI=0且SM2=0或接收到有效停止位時,單片機將接收到的數據移入SBUF中,兩個條件缺一不可。
方式2和方式3 方式2和3不同的只是波特率,這里以方式3為例
作為輸出模式同方式1沒有區別,只是增加了第八位數據位,第八位數據可以用作校驗位或在多機通信中用作數據/地址幀的判別位。
首先我們來做模擬主從奇偶校驗模式
主機發送一幀數據,并發送奇偶校驗位,從機接收數據后,判斷數據是否正確,如果正
確,接收指示燈亮,并且回送主機數據加1,反之回送0;主機接收從機信息,如果校驗正確點亮LED指示燈.(從機、主機接收數據無論校驗正確與否,均顯示接收到的字節數據)。奇校驗模式 演示結果如下:
(注:從接接收不正確,返回0)
主從機接收正確效果
之前我們已經介紹了SM2的具體用法,主要用于多機通信,將SM2作為數據/地址幀 的判別位,在接收地址時令SM2=1,當接收到的第八位數據為1時激活RI產生中斷,然后比較地址,如果地址符合則清除SM2準備接受數據信息,反之不理睬。
特別注意 當RI=0且SM2=0(或SM2=1時接收到第9位數據為1)時,單片機將接收到的數據移入SBUF中,兩個條件缺一不可。
在這里我只舉一個簡單的例子 一個主機,兩個從機 起始時,主機從機的SM2均置位,所有的從機等待主機發送地址幀,主機令TB8=1,發送地址幀。所用的從機將接受到的地址和自己的地址比較,如果符合,點亮LED指示燈,清除SM2(準備接受主機發送的數據幀),并將自己的地址發送到主機。主機接收從機發送的地址信息,如果地址符合則數碼管顯示從機地址并開始準備發送數據,反之發復位信號,TB8=1。從機接收數據先判斷RB8,如果RB8=1,則復位,重新開始接收主機發送的地址幀,反之通過P1口外接數碼管顯示接收到的數據。實驗結果如下:
注意:如果主機沒有得到正確的地址,則將按照一定的速率發送地址幀,直到接收正確的地址為止,該試驗主機向從機2發送信息。
另外在這里我補充兩點: 我們可以很方便的利用串口通信的工作方式2或3實現奇偶校驗,注意技巧,當為偶校驗時TB8=P,奇校驗時TB8=~P;
2當單片機利用中斷發送大量數據時,盡量采用中斷發送,因為單片機在寫入SBUF數據后由硬件將數據發送完,在發送過程中,單片機還可以做很多事情,利用中斷發送數據可以提高CPU利用率。尤其在低波特率時效果更明顯。