chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

干貨 | 關(guān)于單片機(jī)上for循環(huán)中運用ACC的隱蔽錯誤

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

總結(jié):

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

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

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

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45259

    瀏覽量

    660125
  • ACC
    ACC
    +關(guān)注

    關(guān)注

    1

    文章

    60

    瀏覽量

    23395

原文標(biāo)題:關(guān)于單片機(jī)上for循環(huán)中運用ACC的隱蔽錯誤

文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    第1章 如何學(xué)習(xí)單片機(jī)

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

    在消費者循環(huán)中如何分離數(shù)據(jù)采集任務(wù)和響應(yīng)用戶操作任務(wù)

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

    STM32單片機(jī)片上數(shù)字濾波器操作文檔 快速入門數(shù)字濾波器在單片機(jī)上的實現(xiàn)

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

    單片機(jī)實例項目:485與CAN總線運用實例

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

    51+單片機(jī)TCP-IP+協(xié)議棧ZLIP源碼

    概述 單片機(jī)上網(wǎng)技術(shù),是當(dāng)前的一個熱門技術(shù)。單片機(jī)上網(wǎng)技術(shù)中的一個重要部分是在單片上實現(xiàn) TCP/IP 協(xié)議?!,F(xiàn)在可獲得的 TCP/IP 源代碼一般并不為 51 單片機(jī)設(shè)計,而 51
    發(fā)表于 04-22 15:11

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

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

    技術(shù)干貨驛站 ▏深入理解C語言:嵌套循環(huán)循環(huán)控制的底層原理

    多重循環(huán),還是控制循環(huán)的執(zhí)行流程,掌握這些知識都將為你的編程之路打下堅實的基礎(chǔ)。嵌套循環(huán)在C語言中,循環(huán)語句可以嵌套使用,即在一個循環(huán)中再使
    的頭像 發(fā)表于 02-21 18:26 ?889次閱讀
    技術(shù)<b class='flag-5'>干貨</b>驛站  ▏深入理解C語言:嵌套<b class='flag-5'>循環(huán)</b>與<b class='flag-5'>循環(huán)</b>控制的底層原理

    單片機(jī)控制ADS7953讀取每個通道電壓,返回值異常的原因?

    單片機(jī)IO模擬SCK, MOSI, MISO 控制ADS7953,在電路中沒有使用到ADS7953的四個GPIO口,程序在16次的for循環(huán)中實現(xiàn)16次SCK脈沖,同時控制MOSI,并讀取
    發(fā)表于 01-23 06:34

    單片機(jī)Debug工具性能對比 單片機(jī)調(diào)試常用命令

    單片機(jī)(Microcontroller Unit, MCU)調(diào)試是嵌入式開發(fā)中的一個重要環(huán)節(jié),它幫助開發(fā)者發(fā)現(xiàn)和修復(fù)代碼中的錯誤,優(yōu)化程序性能。不同的單片機(jī)和開發(fā)環(huán)境可能使用不同的調(diào)試工具和命令
    的頭像 發(fā)表于 12-19 09:56 ?1930次閱讀

    單片機(jī)Debug與仿真區(qū)別

    單片機(jī)的開發(fā)是一個復(fù)雜的過程,涉及到硬件設(shè)計、軟件開發(fā)和測試等多個環(huán)節(jié)。為了確保單片機(jī)能夠按照預(yù)期工作,開發(fā)者需要使用Debug和仿真技術(shù)來檢測和修正代碼中的錯誤。 Debug(調(diào)試) Debug
    的頭像 發(fā)表于 12-19 09:47 ?1225次閱讀

    LabVIEW與單片機(jī)無法串口通信 提示串口打開錯誤 端口設(shè)置有問題嗎?

    0xBFFF0000) 未知系統(tǒng)錯誤(其它錯誤)。 重啟計算機(jī)也無法解決這個錯誤。 通過虛擬串口,LabVIEW與串口助手通信正常, 單片機(jī)與串口助手通信也正常, 但LabVIEW與
    發(fā)表于 12-06 22:28

    請問TPA3112D1的datasheet上的control system要連在單片機(jī)上嗎?

    請問TPA3112D1的datasheet上的control system 要連在單片機(jī)上嗎?AVCC是連在單片機(jī)上的某個引腳嗎?PVCC是連接電源嗎?附件是datasheet上給的參考電路圖。
    發(fā)表于 10-31 08:32

    西門子博途中循環(huán)中斷功能的編程示例

    在以下示例中,將讀取循環(huán)中斷 OB (OB31) 的相位和循環(huán)時間,并設(shè)置一個新的循環(huán)時間。
    的頭像 發(fā)表于 10-28 10:11 ?4679次閱讀
    西門子博途中<b class='flag-5'>循環(huán)中</b>斷功能的編程示例

    TAS5711用GDE生成的EQ cfg配置文件怎么加載到單片機(jī)上?

    TAS5711 的用GDE 生成的EQcfg配置文件怎么加載到單片機(jī)上。
    發(fā)表于 10-25 13:48

    智能記錄隱蔽工程管理系統(tǒng)

    ? ? ? 隱蔽工程管理是現(xiàn)代建筑工程中一個至關(guān)重要的環(huán)節(jié)。為了提高工程質(zhì)量和管理效率,智能記錄隱蔽工程管理系統(tǒng)應(yīng)運而生。本文將從隱蔽工程APP、工程臺賬、管理系統(tǒng)和云端存儲四個方面介紹該系統(tǒng)的功能
    的頭像 發(fā)表于 10-18 10:18 ?710次閱讀
    智能記錄<b class='flag-5'>隱蔽</b>工程管理系統(tǒng)