娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月19日(星期四)

正在發(fā)生

2018年12月19日 | 51單片機(jī) 主循環(huán)和中斷共享全局變量的沖突

發(fā)布者:skyshoucang 來源: eefocus關(guān)鍵字:51單片機(jī)  主循環(huán)  中斷共享  全局變量 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

現(xiàn)象:工作中遇到一個(gè)大坑,STC11F32的運(yùn)行燈閃的不均勻,大多數(shù)是500ms低電平和500ms高電平,但偶爾會(huì)有40ms左右的高、低電平出現(xiàn),對(duì),就這么簡(jiǎn)單的一個(gè)程序,奇哉怪哉!


//定義全局變量:ms計(jì)數(shù)器

unsigned int cnt_ms;

//定義全局變量:ms計(jì)數(shù)器備份

unsigned int cnt_ms_bk;

//定義LED對(duì)應(yīng)的IO口

sbit LED = P3 ^ 3;

//主循環(huán)讀訪問


int main(void)

{

 ......

 if ((cnt_ms - cnt_ms_bk) > 500)

 {

  led = ~led;

  cnt_ms_bk = cnt_ms;

 }

 ......

}


void timer0_interrupt(void) interrupt 1

{

 ......

 TL0 = 0x0cd; //裝在1ms定時(shí)初值

 TH0 = 0x0f8;

 count_1ms++;

 ......

}


解決方法:主循環(huán)程序修改如下,用示波器觀察led的閃爍,結(jié)果是正常的。

int main(void)

{

 ......

 EA = 0;    //關(guān)中斷

 if ((cnt_ms - cnt_ms_bk) > 500)

 {

  led = ~led;

  cnt_ms_bk = cnt_ms;

 }

 EA = 1;    //開中斷

 ......

}

原因分析:反匯編如下,為分析方便采用16位示例。


 ......

      101:    if ((cnt_ms - cnt_ms_bk) >= 500)

C : 0x0F18    900036   MOV      DPTR, #msLedCtr(0x0036)

C : 0x0F1B    E0       MOVX     A, @DPTR

C : 0x0F1C    F8       MOV      R0, A

C : 0x0F1D    A3       INC      DPTR

C : 0x0F1E    E0       MOVX     A, @DPTR

C : 0x0F1F    F9       MOV      R1, A

C : 0x0F20    A3       INC      DPTR

C : 0x0F21    E0       MOVX     A, @DPTR

C : 0x0F22    FA       MOV      R2, A

C : 0x0F23    A3       INC      DPTR

C : 0x0F24    E0       MOVX     A, @DPTR

C : 0x0F25    FB       MOV      R3, A

C : 0x0F26    900031   MOV      DPTR, #count_1ms(0x0031)

C : 0x0F29    E0       MOVX     A, @DPTR

C : 0x0F2A    FC       MOV      R4, A

C : 0x0F2B    A3       INC      DPTR

C : 0x0F2C    E0       MOVX     A, @DPTR       //在此處被中斷

C : 0x0F2D    FD       MOV      R5, A

C : 0x0F2E    A3       INC      DPTR

C : 0x0F2F    E0       MOVX     A, @DPTR

C : 0x0F30    FE       MOV      R6, A

C : 0x0F31    A3       INC      DPTR

C : 0x0F32    E0       MOVX     A, @DPTR

C : 0x0F33    C3       CLR      C

C : 0x0F34    9B       SUBB     A, R3

C : 0x0F35    FF       MOV      R7, A

C : 0x0F36    EE       MOV      A, R6

C : 0x0F37    9A       SUBB     A, R2

C : 0x0F38    FE       MOV      R6, A

C : 0x0F39    ED       MOV      A, R5

C : 0x0F3A    99       SUBB     A, R1

C : 0x0F3B    FD       MOV      R5, A

C : 0x0F3C    EC       MOV      A, R4

C : 0x0F3D    98       SUBB     A, R0

  C : 0x0F3E    FC       MOV      R4, A

 ......


 ......

      282 :   cnt_ms++;

C : 0x09D1    900031   MOV      DPTR, #cnt_ms(0x0031)

C : 0x09D4    E0       MOVX     A, @DPTR

C : 0x09D5    FC       MOV      R4, A

C : 0x09D6    A3       INC      DPTR

C : 0x09D7    E0       MOVX     A, @DPTR

C : 0x09D8    FD       MOV      R5, A

C : 0x09D9    A3       INC      DPTR

C : 0x09DA    E0       MOVX     A, @DPTR

C : 0x09DB    FE       MOV      R6, A

C : 0x09DC    A3       INC      DPTR

C : 0x09DD    E0       MOVX     A, @DPTR

C : 0x09DE    2401     ADD      A, #0x01

C  :0x09E0    FF       MOV      R7, A

C : 0x09E1    E4       CLR      A

C : 0x09E2    3E       ADDC     A, R6

C : 0x09E3    FE       MOV      R6, A

C : 0x09E4    E4       CLR      A

C : 0x09E5    3D       ADDC     A, R5

C : 0x09E6    FD       MOV      R5, A

C : 0x09E7    E4       CLR      A

C : 0x09E8    3C       ADDC     A, R4

C : 0x09E9    FC       MOV      R4, A

C : 0x09EA    900031   MOV      DPTR, #count_1ms(0x0031)

C : 0x09ED    1218B7   LCALL    C ? LSTXDATA(C : 18B7)

 ......

假設(shè)在上述位置被中斷前cnt_ms的值為0x00FF,cnt_ms_bk的值為0x0000時(shí):R4裝載的值為0xFF,本打算給R5裝載值0x00,結(jié)果被中斷打斷,中斷后cnt_ms++,后其值變?yōu)?x0100,中斷執(zhí)行完返回后繼續(xù)主循環(huán)中裝載R5,結(jié)果給R5裝載值0x01,各位現(xiàn)在主循環(huán)中使用的cnt_ms為0x01FF了,這樣就會(huì)造成脈沖的變窄。

我起先老糾結(jié)中斷時(shí)會(huì)壓棧,會(huì)將變量保存。實(shí)際中斷時(shí)保存的是ACC, B, DPTR等寄存器,但是全局變量cnt_ms被保存到了xdata區(qū),DPTR中斷前后不變,但其指向的內(nèi)容(xdata區(qū))已被修改。

關(guān)鍵字:51單片機(jī)  主循環(huán)  中斷共享  全局變量 引用地址:51單片機(jī) 主循環(huán)和中斷共享全局變量的沖突

上一篇:單片機(jī) uart中斷處理函數(shù)例子
下一篇:C51 單片機(jī) 讀取93C64

推薦閱讀

ARM有七種異常中斷類型,優(yōu)先級(jí)、工作模式(有七種工作模式)、地址、功能都不一樣。如其中軟件中斷SWI優(yōu)先級(jí)為6,工作模式管理模式,異常向量地址為0x00000008,功能是用戶定義的中斷指令,可用于用戶模式下的程序調(diào)用特權(quán)操作。當(dāng)中斷產(chǎn)生后,除了復(fù)位中斷立即中止當(dāng)前指令外,其余情況都是處理器完成當(dāng)前指令后,才去執(zhí)行異常處理程序。(1)將CPSR的...
美光科技發(fā)布了該公司的2020財(cái)年第一財(cái)季財(cái)報(bào)。報(bào)告顯示,美光科技第一財(cái)季營(yíng)收為51.44億美元,與去年同期的79.13億美元相比下降35%;凈利潤(rùn)為4.91億美元,與去年同期的32.93億美元相比下降85%。美光科技第一財(cái)季業(yè)績(jī)超出華爾街分析師預(yù)期,從而推動(dòng)其盤后股價(jià)漲逾3%。主要業(yè)績(jī):在截至11月28日的這一財(cái)季,美光科技的凈利潤(rùn)為4.91億美元,每股攤薄收益為0...
分享一個(gè)基于51單片機(jī)的煙霧報(bào)警器,當(dāng)煙霧濃度和溫度達(dá)到設(shè)定值時(shí),點(diǎn)亮對(duì)應(yīng)的發(fā)光二極管并控制蜂鳴器發(fā)出警報(bào)。(仿真中MQ-2傳感器用滑動(dòng)變阻器代替)單片機(jī)源程序:#include <reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義#include "intrins.h" ...
中國(guó)儲(chǔ)能網(wǎng)訊:內(nèi)蒙古自治區(qū)發(fā)展和改革委員會(huì) 關(guān)于蒙東電網(wǎng)試行分時(shí)電價(jià)政策有關(guān)事項(xiàng)的通知 內(nèi)發(fā)改價(jià)費(fèi)字〔2021〕1129號(hào) 呼倫貝爾市、興安盟、通遼市、赤峰市、滿洲里市發(fā)展改革委,國(guó)網(wǎng)內(nèi)蒙古東部電力有限公司: 為充分發(fā)揮分時(shí)電價(jià)信號(hào)作用,引導(dǎo)用戶削峰填谷和提高電力系統(tǒng)運(yùn)行效率,更好服務(wù)以新能源為主體的新型電力系統(tǒng)建設(shè),促進(jìn)能源綠色低碳...

史海拾趣

問答坊 | AI 解惑

DSP入門

DSP入門教程…

查看全部問答∨

中國(guó)機(jī)構(gòu)獲微軟授權(quán)可查看Win7大部分源碼

  來源:新浪科技  新浪科技訊 6月2日下午消息,微軟中國(guó)今天發(fā)布消息稱,該公司日前已與中國(guó)信息安全測(cè)評(píng)中心續(xù)簽了新一期的政府安全計(jì)劃源代碼協(xié)議。微軟稱,該中心和相關(guān)被授權(quán)機(jī)構(gòu)將被允許查看包括Windows 7, Windows Server 2008 R2在 ...…

查看全部問答∨

請(qǐng)教下為什么我一按外中斷按鈕系統(tǒng)就復(fù)位

請(qǐng)教下為什么我一按外中斷按鈕系統(tǒng)就復(fù)位  …

查看全部問答∨

請(qǐng)問WCE Application做出來的軟件,為何在wince下無法拖曳視窗

請(qǐng)問WCE Application做出來的軟件,為何在wince下無法拖曳視窗 ???還是有什麼方法可以做到拖曳視窗…

查看全部問答∨

關(guān)于allegro pcb中的封裝問題。

例如實(shí)際中需要畫一塊8層的PCB板子(TOP GND ART03 POWER GND ART06 GND BOT),在畫插件封裝時(shí),焊盤的各層的參數(shù)設(shè)置中,是否需要設(shè)置除DEFAULT INTERNALR外再加上"GND ART03 POWER GND ART06 GND "這中間幾層的參數(shù)? 或是只設(shè)置“TOP/DEFA ...…

查看全部問答∨

太陽(yáng)能跟隨系統(tǒng)

效果:        系統(tǒng)啟動(dòng)后,太陽(yáng)板,會(huì)左右旋轉(zhuǎn)尋找太陽(yáng)的中心位置。當(dāng)太陽(yáng)板正對(duì)太陽(yáng)之后,停止。隨著時(shí)間推移,太陽(yáng)板會(huì)自動(dòng)跟隨旋轉(zhuǎn),始終保持與光線垂直角度。遇到陰天或者夜晚,太陽(yáng)板會(huì)旋轉(zhuǎn)為水平位置,以保護(hù)電池板。系 ...…

查看全部問答∨

基于at89c51制作數(shù)字時(shí)鐘,(必須用兩個(gè)4位數(shù)碼管)求程序。電路圖。急求、

本帖最后由 害羞的小黃瓜 于 2014-5-10 10:22 編輯 。。。。求發(fā)郵箱634494591@qq.com …

查看全部問答∨

FLASH擦出問題

這個(gè)問題蹊蹺的很,肚子都嘔爆,最近好衰的樣子.... 好吧,進(jìn)入正題,我的目的是擦出FLASH的infoA段全部,代碼是這樣的(和他人的都一樣的): void erase_Flash(char* add) {     while(FCTL3 & BUSY);       ...…

查看全部問答∨

有沒有這樣一種差壓式傳感器

公司讓尋找一種傳感器,要求測(cè)量水下的一種作用力,但是受到水壓的干擾作用,要將水壓干擾消除,得到可用的力作用信號(hào)。本想用惠思登電橋測(cè)量,用兩個(gè)應(yīng)變片,一個(gè)測(cè)量水壓,一個(gè)測(cè)量水壓與作用力的壓力,兩個(gè)由于電橋電路直接將水壓消除掉,得到近 ...…

查看全部問答∨

不可不知的PCB布局陷阱 2

引線長(zhǎng)度 Maxim ISM-RF產(chǎn)品的數(shù)據(jù)資料往往建議使用盡可能短的高頻輸入、輸出引線,從而將損耗和輻射降至最小。另一方面,這種損耗通常是由于非理想寄生參數(shù)引起的, 所以寄生電感和電容都會(huì)影響電路布局,使用盡可能短的引線有助于降低寄生參數(shù)。 ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 葫芦岛市| 达孜县| 台江县| 遂宁市| 大关县| 通渭县| 伊宁县| 宁国市| 竹溪县| 丽江市| 石城县| 农安县| 德兴市| 筠连县| 盐亭县| 从江县| 洪湖市| 浦东新区| 三门县| 长宁县| 古丈县| 平果县| 瓮安县| 孟津县| 恩施市| 金溪县| 濉溪县| 静安区| 乌拉特后旗| 呼图壁县| 德化县| 黑河市| 河东区| 禄丰县| 汶川县| 湖南省| 永兴县| 临澧县| 鹿泉市| 兴文县| 介休市|