這篇文章將為大家詳細講解有關(guān)atmega128a單片機程序設(shè)計談原理和重點以及如何解決串口接收數(shù)據(jù)錯位,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、東山ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的東山網(wǎng)站制作公司
atmega128a作為8位單片機中的精英,實在是低端中端產(chǎn)品研發(fā)的理想主控芯片。個人覺得它之所以適合這個級別的產(chǎn)品開發(fā)。是因為它的主頻只能在16M赫茲以內(nèi)。相對其他動不動就幾百兆赫茲的mcu產(chǎn)品來說,它實在不算是高端。對于8位單片機來說,它內(nèi)置128k的程序存儲空間。還有4k的ROM,4k的永久存儲數(shù)據(jù)的epprom,還具有各種串行開發(fā)接口。這些都是他的優(yōu)點。我們的軟件可以良好的運行在3大操作系統(tǒng)上,滿足您在不同系統(tǒng)下的相同需要.
下面我將結(jié)合我的項目來說明幾處用法和實驗現(xiàn)象,供大家借鑒。
本項目中使用了定時器定時發(fā)送數(shù)據(jù)最低一秒鐘發(fā)送一次。串口零與傳感器進行數(shù)據(jù)交換,并用液晶顯示接收到的傳感器數(shù)據(jù),也是一秒鐘采集一次。串口一用于定時發(fā)送數(shù)據(jù),發(fā)送頻率取決于定時器在這里是最低一秒鐘。項目初始化時初始化了定時器,串口兒零和串口一,然后開啟全局中斷。這些都是在初始化中完成的。串口進行數(shù)據(jù)接收時出現(xiàn)了一個奇怪的現(xiàn)象,這在我以前的項目中也經(jīng)常出現(xiàn)。在這里還是一樣。奇怪的現(xiàn)象是串口接收8個字節(jié)數(shù)據(jù),但是有時會發(fā)生數(shù)據(jù)錯位。例如發(fā)送0102030405060708,接收后變成了0801020304050607.是不是很奇怪呢?造成串口接收數(shù)據(jù)錯位的主要原因是發(fā)送數(shù)據(jù)的頻率過快,少于串口中斷程序處理的時間。
串口來不及處理完畢就又響應(yīng)了新的串口中斷。有的朋友可能會說我清空串口緩沖區(qū)的數(shù)組不就可以了嗎?但是你試試吧,這樣是不行的。通過實驗我得出的結(jié)論是,串口發(fā)送的每幀數(shù)據(jù)的每個字節(jié)兒都會產(chǎn)生一個中斷,而每個中斷產(chǎn)生之后都放入了單片機的串口接收緩沖區(qū)中,這個緩沖區(qū)不是udr寄存器。我從中看到的現(xiàn)象是,寄存器UDR讀取的是單片機的串口接收緩沖區(qū)的數(shù)據(jù)。這個串口接收緩沖區(qū)應(yīng)該是在單片機的內(nèi)部。數(shù)據(jù)發(fā)送時所有的數(shù)據(jù)首先進入了單片機的串口接收緩沖區(qū),然后從緩沖區(qū)中讀取數(shù)據(jù)到寄存器udr,這時我們在中斷程序中讀取寄存器udr0或者udr1就讀到了串口接收的數(shù)據(jù)。我們?nèi)绾文芊乐???shù)據(jù)接收錯位呢?那就是清空單片機內(nèi)部串口接收緩沖區(qū)的數(shù)據(jù)即可。如何做呢?很簡單。只需要將串口重新進行初始化即可,這樣單片機的串口緩沖區(qū)數(shù)據(jù)就會清空,也就是忽略了錯位的數(shù)據(jù)繼續(xù)接收。
對于定時器和串口的初始化。各種寄存器的值該如何設(shè)置?這里我推薦一個工具。iccavr.這個小工具設(shè)置CPU后設(shè)置晶振大小,就可以對定時器定時時間,分頻和串口波特率等進行寄存器設(shè)置。特別方便。
對于程序中沒有用到的中斷,切不可將中斷標(biāo)記置位寫1。我在串口中初始化時,將串口的發(fā)送中斷置一了。結(jié)果導(dǎo)致CPU復(fù)位。如果你無法檢測到CPU是否復(fù)位,這時你需要在你的開發(fā)板上設(shè)計一個led指示燈。當(dāng)程序初始化時,點亮指示燈。程序進入主循環(huán)運行時關(guān)閉指示燈。這樣,如果你在調(diào)試的時候發(fā)生CPU運行異常。就可以通過指示燈來判斷程序的運行狀態(tài)。
關(guān)于atmega128a單片機程序設(shè)計談原理和重點以及如何解決串口接收數(shù)據(jù)錯位就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站題目:atmega128a單片機程序設(shè)計談原理和重點以及如何解決串口接收數(shù)據(jù)錯位
分享路徑:http://aaarwkj.com/article46/godeeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、軟件開發(fā)、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、App設(shè)計、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)