欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
有關STC單片機芯片的軟件復位系統
[打印本頁]
作者:
dalaoshi
時間:
2023-9-24 06:18
標題:
有關STC單片機芯片的軟件復位系統
為何我的以下代碼不起作用?
RESETHERE:
MOV A, #56H
LCALL SENTONEBYTE1
CLR P5.4
LCALL DELAY4
MOV 0C7H, #00100000B ;RESET TO AP
SJMP $
DIGITINPUTEXIT:
RET
執行此命令后并沒有重新啟動,會在附近重復打轉,之前已經送出一個#56H的字節到串口,確定是有執行到這里的。
這問題從STC12開始到現在STC8H了都沒有解決,是否之前還要設定什么寄存器呢?
作者:
188610329
時間:
2023-9-24 15:37
軟件 復位 只需要
MOV 0C7H, #20H
這一句 就能實現。不存在任何前置條件。
你不如考慮一下, 你復位前的幾個操作,是否阻止了復位代碼的運行。
假定,P01 是 LED, P00 是按鍵開關。
CLR P0.1 ; 點亮 LED
Roop1:
DJNZ R2,Roop1
DJNZ R3,Roop1
SETB P0.1 ; 滅LED
JB P0.0,$ ; 等待按鍵按下
MOV 0C7H,#20H ;請求復位
SJMP $
這種方法應該是最簡單測試 復位是否成功的方法吧?
作者:
dalaoshi
時間:
2023-9-24 23:39
很難理解為何會有這樣的情況,照我理解軟件重置后所有寄存器和記憶體都應該歸零,然后從0000開始執行,我的板沒有按鈕,只有一顆指示燈P5.4,無法用你的方法檢測,因此我在代碼加上四個重置命令,并關閉中斷,如果重置無效會看到LED閃滅,結果證明第一次重置就有效,但沒有回到0000開始執行,而在這個副程式不斷重復。我這副程式有一個寫藍牙模塊的副程式,可以看到不斷有字節送往串口。
DIGITINPUT2: ;WRITE ECB
LCALL DELAYLONGLONG
LCALL ECB_BONDNAMELAH ;寫藍牙
LCALL DELAYLONGLONG
RESETHERE:
;MOV A, #56H
;LCALL SENTONEBYTE1
CLR EA
CLR P5.4
LCALL DELAY3
MOV 0C7H, #00100000B ;RESET TO AP
SETB P5.4
LCALL DELAY3
MOV 0C7H, #00100000B ;RESET TO AP
CLR P5.4
LCALL DELAY3
MOV 0C7H, #00100000B ;RESET TO AP
SETB P5.4
LCALL DELAY3
MOV 0C7H, #00100000B ;RESET TO AP
SJMP $
DIGITINPUTEXIT:
RET
作者:
188610329
時間:
2023-9-25 16:31
開機后 啥事都不干,先讓 LED 慢閃 3 次, 然后 執行 你的其他代碼,
然后, 在 執行 MOV 0C7H, #20H 之前,先點亮 LED, 然后 執行重起 再用 SJMP $ 停住代碼。
你就可以通過 LED 有沒有常亮 來知道 重啟是否有效了。 然后在 各代碼 出 分別 追加 快閃 來確定問題出在哪里。
作者:
dalaoshi
時間:
2023-9-25 22:06
這問題終于有了答案,原來是我高估了軟件重置的功能,重置后只是將各個功能寄存器恢復DEFAULT值,然后從0000開始執行,并沒有將內部RAM全部請零,這就影響程式的路徑了,必須在MAIN開始處加上清零代碼,這樣就和重新開機一樣了。
MAIN:
;LCALL OSC
LCALL IOSET8G ;8G初始時IO腳全為高阻,必須設定LED才會亮
CLEANRAM: ;THIS CLEAR INTERNAL RAM FFH TO 00H 這個不可用副程式,因為SP會不見?
MOV A, #0
MOV R0, #0FFH
CLEANRAM1:
MOV @R0, A
DJNZ R0, CLEANRAM1
作者:
188610329
時間:
2023-9-25 22:37
dalaoshi 發表于 2023-9-25 22:06
這問題終于有了答案,原來是我高估了軟件重置的功能,重置后只是將各個功能寄存器恢復DEFAULT值,然后從000 ...
那個…… 一般 沒必要全IDATA清零吧?
通常只有 用 C51 的,才會需要 全IDATA 甚至 XDATA 上電 清0吧?
玩匯編的,一般都是 用什么 給什么上初值吧? 就好比 R0~R7 以及 A 你都是用之前會 上初值吧? 不會說默認以為他是0 的不是么?
作者:
dalaoshi
時間:
2023-9-28 03:28
本帖最后由 dalaoshi 于 2023-9-28 14:25 編輯
上電是應該所有RAM都是零的,特殊功能寄存器都被系統設定為初始值(不一定是零),然后用戶軟件開始賦值跑動。
我納悶為何軟件重置系統是看門狗必須使用的關鍵功能,卻沒有看過軟件開始時必須將RAM清零的論述,否則看門狗軟件重置后,可能會在故障原地繼續打轉,因此我做了一項實驗,將
MOV 0C7H, #00100000B ;RESET TO AP 改成:
MOV 0C7H, #01100000B ;RESET TO ISP 重置后從系統ISP開始執行代碼
再把開始清零的代碼去除。
這樣運行軟件代碼后,也能完全重啟,這是因為系統ISP里有代碼能清除RAM為零。
所以以后軟件重置必須是:
MOV 0C7H, #01100000B ;RESET TO ISP ;60H
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1