日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

總結(jié):

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

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

請(qǐng)不要反駁我用了這么長(zhǎng)的時(shí)間去研究,只能使單片機(jī)執(zhí)行快2us,而說(shuō)我鉆牛角尖,只是因?yàn)?,這個(gè)錯(cuò)誤導(dǎo)致我整個(gè)程序無(wú)法正常運(yùn)行,這不是一件小事。

至于為什么要用到累加器ACC來(lái)接收實(shí)參,是因?yàn)楹竺娴某绦蛞岩粋€(gè)8位的實(shí)參一位一位地輸出到一個(gè)io口,自定義一個(gè)變量的話,按位尋址好像比較麻煩,要經(jīng)過(guò)一系列 位運(yùn)算 ,或者用bit定義8個(gè)位(有好的方法請(qǐng)告訴我,哈),而且我寫不出來(lái)。而用ACC的話,可以很輕易地操作ACC的任意一位,如ACC0,ACC7。在網(wǎng)上查了一下,好像還有一種方法是定義 一種叫 位域 的東東,我看的c語(yǔ)言的書(shū)都沒(méi)介紹,所以還不是很了解。

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

剛剛想了一下,不用ACC 的方法,作一個(gè)位運(yùn)算dat &0x01,修改如下:

想到了這個(gè)方法后,覺(jué)得自己好白癡,以后都不用ACC了。

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

    關(guān)注

    6078

    文章

    45596

    瀏覽量

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

    關(guān)注

    1

    文章

    61

    瀏覽量

    23657

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    S9KEA128AMLK單片機(jī)上,請(qǐng)告訴如何判斷CAN通信超時(shí)丟幀?

    S9KEA128AMLK單片機(jī)上,請(qǐng)告訴如何判斷CAN通信超時(shí)丟幀?感謝
    發(fā)表于 04-23 07:47

    紐扣電池給單片機(jī)供電問(wèn)題

    在我的項(xiàng)目中,單片機(jī)供電是3V的紐扣電池。單片機(jī)上電就進(jìn)入STOP省電模式,等待工作時(shí)候由引腳喚醒,項(xiàng)目主要使用單片機(jī)的adc功能,基準(zhǔn)電壓是單片機(jī)內(nèi)部VEFBUFF。目前主要問(wèn)題是,
    發(fā)表于 03-14 14:57

    單片機(jī)里的程序運(yùn)行方式

    RAM)中,并建立一個(gè)它的運(yùn)行環(huán)境(當(dāng)然這里邊還有內(nèi)存映射,虛擬內(nèi)存,連接與加載,等一些其他東西),準(zhǔn)備執(zhí)行。 由以上可知,單片機(jī)上的程序和平時(shí)在系統(tǒng)上運(yùn)行的程序,在啟動(dòng)時(shí)差異是很大的,如果將程序調(diào)用
    發(fā)表于 01-16 06:57

    電機(jī)控制是不是就綁死在單片機(jī)上

    電機(jī)控制這個(gè)行當(dāng),說(shuō)來(lái)說(shuō)去總繞不開(kāi)單片機(jī),許多人一干就是十幾年,調(diào)來(lái)調(diào)去都是那幾個(gè)芯片,看波形、改參數(shù)、寫驅(qū)動(dòng),日子好像就這么定下來(lái)了。你說(shuō)綁死在單片機(jī)上了嗎?表面上確實(shí)是,畢竟現(xiàn)在的電機(jī)控制器
    的頭像 發(fā)表于 12-10 10:50 ?1769次閱讀
    電機(jī)控制是不是就綁死在<b class='flag-5'>單片機(jī)上</b>了

    單片機(jī)程序的執(zhí)行

    。 但是單片機(jī)上只有幾K的RAM,而flash一般有幾十K甚至1M,這個(gè)時(shí)候指令和數(shù)據(jù)都在內(nèi)存中嗎(這里指的內(nèi)存僅指RAM,因?yàn)镻C上我們常說(shuō)的內(nèi)存就是DDR RAM memory,先入為主以至于認(rèn)為
    發(fā)表于 12-04 06:20

    單片機(jī)系統(tǒng)硬件的調(diào)試方法

    ,單片機(jī)的系統(tǒng)硬件調(diào)試,需要從硬件的靜態(tài)調(diào)試和動(dòng)態(tài)調(diào)試兩個(gè)角度人手: 單片機(jī)系統(tǒng)硬件的靜態(tài)調(diào)試 1、邏輯故障的排除在制板設(shè)計(jì)和加工的過(guò)程中.由于工藝性的錯(cuò)誤.單片機(jī)容易出現(xiàn)錯(cuò)線、開(kāi)路和
    發(fā)表于 12-03 06:10

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

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

    芯海單片機(jī) 燒錄器提示“燒錄文件錯(cuò)誤”怎么解決

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

    人工智能行業(yè)如何使用for循環(huán)語(yǔ)句進(jìn)行循環(huán)

    人工智能行業(yè)可以使用以下是關(guān)于for循環(huán)在不同編程語(yǔ)言中的基本用法說(shuō)明: Python中的for循環(huán): 主要用于遍歷序列(列表、元組、字符串等) 典型結(jié)構(gòu):for item in sequence
    的頭像 發(fā)表于 09-10 12:55 ?718次閱讀

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

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

    怎么測(cè)單片機(jī)系統(tǒng)頻率

    單片機(jī)系統(tǒng)頻率是指單片機(jī)工作時(shí)的時(shí)鐘頻率,它直接影響單片機(jī)的運(yùn)行速度和處理能力,準(zhǔn)確測(cè)量系統(tǒng)頻率對(duì)單片機(jī)應(yīng)用開(kāi)發(fā)、程序調(diào)試和性能優(yōu)化具有重要意義。測(cè)量
    的頭像 發(fā)表于 07-25 11:39 ?1110次閱讀

    單片機(jī)怎么驅(qū)動(dòng)電機(jī)?

    在各類自動(dòng)化設(shè)備和智能裝置中,電機(jī)是重要的執(zhí)行部件,而單片機(jī)作為控制核心,需要通過(guò)特定的方式驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)。單片機(jī)驅(qū)動(dòng)電機(jī)并非直接連接即可,而是要根據(jù)電機(jī)類型和功率,搭配合適的驅(qū)動(dòng)電路,才能實(shí)現(xiàn)穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?1368次閱讀

    單片機(jī)怎么燒程序

    單片機(jī)燒程序是將編寫好的程序代碼寫入單片機(jī)內(nèi)部存儲(chǔ)單元,讓單片機(jī)按照預(yù)設(shè)邏輯工作的過(guò)程,是單片機(jī)應(yīng)用開(kāi)發(fā)中不可或缺的環(huán)節(jié)。無(wú)論是簡(jiǎn)單的燈光控制程序,還是復(fù)雜的工業(yè)控制算法,都需要通過(guò)燒
    的頭像 發(fā)表于 07-23 11:47 ?2089次閱讀

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

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

    單片機(jī)實(shí)例項(xiàng)目:485與CAN總線運(yùn)用實(shí)例

    單片機(jī)實(shí)例項(xiàng)目:485與CAN總線運(yùn)用實(shí)例,推薦下載!
    發(fā)表于 06-03 20:48
    保定市| 丘北县| 丰县| 涟水县| 太保市| 汽车| 兰考县| 永春县| 兴化市| 福州市| 建阳市| 台湾省| 全南县| 昌都县| 芜湖县| 邵阳市| 潜江市| 丰都县| 文安县| 新竹市| 和林格尔县| 凤庆县| 大宁县| 武冈市| 麻栗坡县| 临泽县| 新安县| 三河市| 临潭县| 永吉县| 通山县| 贞丰县| 伊金霍洛旗| 渭源县| 水城县| 营口市| 新田县| 台湾省| 襄樊市| 大宁县| 汾西县|