真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

atmega128a單片機(jī)程序設(shè)計(jì)談原理和重點(diǎn)以及如何解決串口接收數(shù)據(jù)錯位

這篇文章將為大家詳細(xì)講解有關(guān)atmega128a單片機(jī)程序設(shè)計(jì)談原理和重點(diǎn)以及如何解決串口接收數(shù)據(jù)錯位,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、東山ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的東山網(wǎng)站制作公司

atmega128a作為8位單片機(jī)中的精英,實(shí)在是低端中端產(chǎn)品研發(fā)的理想主控芯片。個人覺得它之所以適合這個級別的產(chǎn)品開發(fā)。是因?yàn)樗闹黝l只能在16M赫茲以內(nèi)。相對其他動不動就幾百兆赫茲的mcu產(chǎn)品來說,它實(shí)在不算是高端。對于8位單片機(jī)來說,它內(nèi)置128k的程序存儲空間。還有4k的ROM,4k的永久存儲數(shù)據(jù)的epprom,還具有各種串行開發(fā)接口。這些都是他的優(yōu)點(diǎn)。我們的軟件可以良好的運(yùn)行在3大操作系統(tǒng)上,滿足您在不同系統(tǒng)下的相同需要.
下面我將結(jié)合我的項(xiàng)目來說明幾處用法和實(shí)驗(yàn)現(xiàn)象,供大家借鑒。
本項(xiàng)目中使用了定時(shí)器定時(shí)發(fā)送數(shù)據(jù)最低一秒鐘發(fā)送一次。串口零與傳感器進(jìn)行數(shù)據(jù)交換,并用液晶顯示接收到的傳感器數(shù)據(jù),也是一秒鐘采集一次。串口一用于定時(shí)發(fā)送數(shù)據(jù),發(fā)送頻率取決于定時(shí)器在這里是最低一秒鐘。項(xiàng)目初始化時(shí)初始化了定時(shí)器,串口兒零和串口一,然后開啟全局中斷。這些都是在初始化中完成的。串口進(jìn)行數(shù)據(jù)接收時(shí)出現(xiàn)了一個奇怪的現(xiàn)象,這在我以前的項(xiàng)目中也經(jīng)常出現(xiàn)。在這里還是一樣。奇怪的現(xiàn)象是串口接收8個字節(jié)數(shù)據(jù),但是有時(shí)會發(fā)生數(shù)據(jù)錯位。例如發(fā)送0102030405060708,接收后變成了0801020304050607.是不是很奇怪呢?造成串口接收數(shù)據(jù)錯位的主要原因是發(fā)送數(shù)據(jù)的頻率過快,少于串口中斷程序處理的時(shí)間。

串口來不及處理完畢就又響應(yīng)了新的串口中斷。有的朋友可能會說我清空串口緩沖區(qū)的數(shù)組不就可以了嗎?但是你試試吧,這樣是不行的。通過實(shí)驗(yàn)我得出的結(jié)論是,串口發(fā)送的每幀數(shù)據(jù)的每個字節(jié)兒都會產(chǎn)生一個中斷,而每個中斷產(chǎn)生之后都放入了單片機(jī)的串口接收緩沖區(qū)中,這個緩沖區(qū)不是udr寄存器。我從中看到的現(xiàn)象是,寄存器UDR讀取的是單片機(jī)的串口接收緩沖區(qū)的數(shù)據(jù)。這個串口接收緩沖區(qū)應(yīng)該是在單片機(jī)的內(nèi)部。數(shù)據(jù)發(fā)送時(shí)所有的數(shù)據(jù)首先進(jìn)入了單片機(jī)的串口接收緩沖區(qū),然后從緩沖區(qū)中讀取數(shù)據(jù)到寄存器udr,這時(shí)我們在中斷程序中讀取寄存器udr0或者udr1就讀到了串口接收的數(shù)據(jù)。我們?nèi)绾文芊乐???shù)據(jù)接收錯位呢?那就是清空單片機(jī)內(nèi)部串口接收緩沖區(qū)的數(shù)據(jù)即可。如何做呢?很簡單。只需要將串口重新進(jìn)行初始化即可,這樣單片機(jī)的串口緩沖區(qū)數(shù)據(jù)就會清空,也就是忽略了錯位的數(shù)據(jù)繼續(xù)接收。

對于定時(shí)器和串口的初始化。各種寄存器的值該如何設(shè)置?這里我推薦一個工具。iccavr.這個小工具設(shè)置CPU后設(shè)置晶振大小,就可以對定時(shí)器定時(shí)時(shí)間,分頻和串口波特率等進(jìn)行寄存器設(shè)置。特別方便。

對于程序中沒有用到的中斷,切不可將中斷標(biāo)記置位寫1。我在串口中初始化時(shí),將串口的發(fā)送中斷置一了。結(jié)果導(dǎo)致CPU復(fù)位。如果你無法檢測到CPU是否復(fù)位,這時(shí)你需要在你的開發(fā)板上設(shè)計(jì)一個led指示燈。當(dāng)程序初始化時(shí),點(diǎn)亮指示燈。程序進(jìn)入主循環(huán)運(yùn)行時(shí)關(guān)閉指示燈。這樣,如果你在調(diào)試的時(shí)候發(fā)生CPU運(yùn)行異常。就可以通過指示燈來判斷程序的運(yùn)行狀態(tài)。

關(guān)于atmega128a單片機(jī)程序設(shè)計(jì)談原理和重點(diǎn)以及如何解決串口接收數(shù)據(jù)錯位就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


分享標(biāo)題:atmega128a單片機(jī)程序設(shè)計(jì)談原理和重點(diǎn)以及如何解決串口接收數(shù)據(jù)錯位
轉(zhuǎn)載來源:http://weahome.cn/article/godeeg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部