中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 互聯網科技 > 
  • atmega128a單片機程序設計談原理和重點以及如何解決串口接收數據錯位

atmega128a單片機程序設計談原理和重點以及如何解決串口接收數據錯位

發布時間:2021-12-06 15:51:43 來源:億速云 閱讀:241 作者:柒染 欄目:互聯網科技

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

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

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

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

對于程序中沒有用到的中斷,切不可將中斷標記置位寫1。我在串口中初始化時,將串口的發送中斷置一了。結果導致CPU復位。如果你無法檢測到CPU是否復位,這時你需要在你的開發板上設計一個led指示燈。當程序初始化時,點亮指示燈。程序進入主循環運行時關閉指示燈。這樣,如果你在調試的時候發生CPU運行異常。就可以通過指示燈來判斷程序的運行狀態。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富顺县| 黄龙县| 新源县| 仲巴县| 罗源县| 南郑县| 沙雅县| 赫章县| 湖州市| 搜索| 花莲市| 敦化市| 诸城市| 湘潭市| 宝山区| 巴林右旗| 咸阳市| 沁阳市| 汽车| 涟源市| 金昌市| 遂川县| 贵德县| 长海县| 湖南省| 米易县| 博湖县| 班玛县| 噶尔县| 兴文县| 通城县| 鄂州市| 黑河市| 庐江县| 昌黎县| 丹凤县| 隆昌县| 黔江区| 响水县| 大邑县| 安新县|