国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

干貨 | 關于單片機上for循環中運用ACC的隱蔽錯誤

2oON_changxuemc ? 來源:YXQ ? 2019-06-20 10:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

先上代碼:第一個為錯誤代碼,第二個為正確代碼。這是用來向ds1302芯片寫入命令或數據的函數。實現把8位的數據dat一位一位地寫入ds1302的io口。其中ACC0為ACC的第0位。

認真對比這兩個代碼,可能會覺得沒區別,而且這兩個代碼都可以通過編譯(加上reg52.h和一些宏定義)。我也是一直認為for()這里邊沒有錯誤,結果。。。試著修改時鐘信號,增加延時之類的,調了好久還是錯,嚴重打擊我的自信心。這兩個代碼的區別就只有for(i=0;i<8;i++)和for(i=8;i>0;i--)了。學過c語言的人都知道,這兩個句子都是實現一個8次的循環,功能一模一樣。怎么會因為這個句子的區別就導致單片機控制的錯誤呢?神奇!

接著我試著把錯誤程序中的ACC改為51芯片的寄存器B,燒錄進單片機,程序運行成功,跟“for(i=8;i>0;i--),ACC版”一樣,lcd在很囂張地顯示著正確的時間( for(i=0;i<8;i++),ACC版lcd的時間顯示為0)。附:

這樣就知道原因了,使用for(i=0;i<8;i++)的運算中可能有累加器ACC參與了,導致修改了ACC的值,使寫入的命令出現錯誤。但為什么for(i=8;i>0;i--)就沒有ACC的參與呢?一個大大的問號?;谖艺{試了一個星期的程序,皆因為這一個神奇的錯誤,我實在不甘心,決定研究到底。于是,分別查看了這三個程序代碼keil4 編譯后得到的 匯編代碼。(學過匯編就是爽啊,哈)

對比后,可以發現,出錯的原因是for(i=0;i<8;i++)ACC版中,用ACC接收了實參(存儲的為要寫入的指令),然后在 for 循環前要給變量 “ i " 賦值時,要用到ACC清零,再把ACC中的零賦給 R7 ("i"的值存儲在R7)。這樣的話,原來存儲在ACC中的寫入指令就被清零,自然會導致控制出現錯誤,最終沒法讀取ds1302芯片的時間,故顯示為零。

而在for(i=8;i>0;i--)ACC版中,也用ACC接收了實參的值,但在 for 循環前,給變量“ i ” 賦值時,賦值為8,不需要用到ACC,所以ACC一直是存儲著實參中的指令,沒有被清零,所以能夠順利地向ds1302發送指令,從而能夠讀取到時間。

總結:

因為用for(i=0;i0;i--)類的指令多了 CLR A 和 INC R7 兩條指令,CJNE 指令又比較DJNZ指令多了一個字節的程序代碼存儲空間,在頻率為12M的51單片機上體現為執行同樣功能的程序,要多用2us,代碼空間花多一字節。所以前者是毫無優勢的,以后應養成用

for(i=n;i>0;i--)的習慣。

請不要反駁我用了這么長的時間去研究,只能使單片機執行快2us,而說我鉆牛角尖,只是因為,這個錯誤導致我整個程序無法正常運行,這不是一件小事。

至于為什么要用到累加器ACC來接收實參,是因為后面的程序要把一個8位的實參一位一位地輸出到一個io口,自定義一個變量的話,按位尋址好像比較麻煩,要經過一系列 位運算 ,或者用bit定義8個位(有好的方法請告訴我,哈),而且我寫不出來。而用ACC的話,可以很輕易地操作ACC的任意一位,如ACC0,ACC7。在網上查了一下,好像還有一種方法是定義 一種叫 位域 的東東,我看的c語言的書都沒介紹,所以還不是很了解。

/************************************************************/

剛剛想了一下,不用ACC 的方法,作一個位運算dat &0x01,修改如下:

想到了這個方法后,覺得自己好白癡,以后都不用ACC了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6076

    文章

    45500

    瀏覽量

    670694
  • ACC
    ACC
    +關注

    關注

    1

    文章

    61

    瀏覽量

    23597

原文標題:關于單片機上for循環中運用ACC的隱蔽錯誤

文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機里的程序運行方式

    RAM)中,并建立一個它的運行環境(當然這里邊還有內存映射,虛擬內存,連接與加載,等一些其他東西),準備執行。 由以上可知,單片機上的程序和平時在系統上運行的程序,在啟動時差異是很大的,如果將程序調用
    發表于 01-16 06:57

    電機控制是不是就綁死在單片機上

    電機控制這個行當,說來說去總繞不開單片機,許多人一干就是十幾年,調來調去都是那幾個芯片,看波形、改參數、寫驅動,日子好像就這么定下來了。你說綁死在單片機上了嗎?表面上確實是,畢竟現在的電機控制器
    的頭像 發表于 12-10 10:50 ?1680次閱讀
    電機控制是不是就綁死在<b class='flag-5'>單片機上</b>了

    單片機程序的執行

    。 但是單片機上只有幾K的RAM,而flash一般有幾十K甚至1M,這個時候指令和數據都在內存中嗎(這里指的內存僅指RAM,因為PC上我們常說的內存就是DDR RAM memory,先入為主以至于認為
    發表于 12-04 06:20

    單片機系統硬件的調試方法

    ,單片機的系統硬件調試,需要從硬件的靜態調試和動態調試兩個角度人手: 單片機系統硬件的靜態調試 1、邏輯故障的排除在制板設計和加工的過程中.由于工藝性的錯誤.單片機容易出現錯線、開路和
    發表于 12-03 06:10

    第1章 如何學習單片機

    ? 在錯誤的道路上日夜兼程,最終也無法成功,方法和思路絕對是最重要的。本章節講到的學習單片機的方法,都是作者學習單片機的無數經驗和教訓總結出來的瑰寶。通過作者前面的披荊斬棘,開辟了道路,可以告訴讀者
    的頭像 發表于 10-10 10:32 ?528次閱讀

    芯海單片機 燒錄器提示“燒錄文件錯誤”怎么解決

    芯海單片機燒錄器提示“燒錄文件錯誤”怎么解決? 芯海簡易燒錄器 下載到燒錄器正常,讀取燒錄器正常,讀取芯片正常, 但是一燒錄就提示燒錄文件錯誤 燒錄器已更新到 4.20.07 見附圖,謝謝
    發表于 09-25 09:23

    人工智能行業如何使用for循環語句進行循環

    人工智能行業可以使用以下是關于for循環在不同編程語言中的基本用法說明: Python中的for循環: 主要用于遍歷序列(列表、元組、字符串等) 典型結構:for item in sequence
    的頭像 發表于 09-10 12:55 ?577次閱讀

    在消費者循環中如何分離數據采集任務和響應用戶操作任務

    有沒有大佬告訴我為什么這里消費者循環中要按下保存按鈕(進入采集中的狀態)之后我的波形圖表才會出現圖案啊 明明這個在條件結構以外![[大哭]] 另外不進入采集中狀態 隊列的數量也為0
    發表于 08-12 12:18

    怎么測單片機系統頻率

    單片機系統頻率是指單片機工作時的時鐘頻率,它直接影響單片機的運行速度和處理能力,準確測量系統頻率對單片機應用開發、程序調試和性能優化具有重要意義。測量
    的頭像 發表于 07-25 11:39 ?812次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據電機類型和功率,搭配合適的驅動電路,才能實現穩定
    的頭像 發表于 07-25 09:31 ?942次閱讀

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內部存儲單元,讓單片機按照預設邏輯工作的過程,是單片機應用開發中不可或缺的環節。無論是簡單的燈光控制程序,還是復雜的工業控制算法,都需要通過燒
    的頭像 發表于 07-23 11:47 ?1352次閱讀

    STM32單片機片上數字濾波器操作文檔 快速入門數字濾波器在單片機上的實現

    這個文檔,是為了幫助大家快速入門數字濾波器在單片機上的實現。
    的頭像 發表于 06-23 16:53 ?1718次閱讀
    STM32<b class='flag-5'>單片機</b>片上數字濾波器操作文檔 快速入門數字濾波器在<b class='flag-5'>單片機上</b>的實現

    單片機實例項目:485與CAN總線運用實例

    單片機實例項目:485與CAN總線運用實例,推薦下載!
    發表于 06-03 20:48

    51+單片機TCP-IP+協議棧ZLIP源碼

    概述 單片機上網技術,是當前的一個熱門技術。單片機上網技術中的一個重要部分是在單片上實現 TCP/IP 協議?!,F在可獲得的 TCP/IP 源代碼一般并不為 51 單片機設計,而 51
    發表于 04-22 15:11

    單片機方面的大佬嗎?有幾個單片機方面的問題需要請教一下

    如題,有單片機方面的內容需要請教一下 (先疊個甲)純小白 我需要一個單片機控制模塊,我現在的想法是:在一個單片機上,我要讓他控制一個傳感器和一個步進電機(運動系統,運動距離為13.5cm),同時
    發表于 03-29 18:35