久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 有關(guān)STC單片機芯片的軟件復(fù)位系統(tǒng) [打印本頁]

作者: dalaoshi    時間: 2023-9-24 06:18
標題: 有關(guān)STC單片機芯片的軟件復(fù)位系統(tǒng)
為何我的以下代碼不起作用?

RESETHERE:
MOV A, #56H
LCALL SENTONEBYTE1
CLR P5.4
LCALL DELAY4
MOV 0C7H, #00100000B ;RESET TO AP
SJMP $
DIGITINPUTEXIT:
RET


執(zhí)行此命令后并沒有重新啟動,會在附近重復(fù)打轉(zhuǎn),之前已經(jīng)送出一個#56H的字節(jié)到串口,確定是有執(zhí)行到這里的。

這問題從STC12開始到現(xiàn)在STC8H了都沒有解決,是否之前還要設(shè)定什么寄存器呢?




作者: 188610329    時間: 2023-9-24 15:37
軟件 復(fù)位  只需要
MOV 0C7H, #20H
這一句 就能實現(xiàn)。不存在任何前置條件。
你不如考慮一下, 你復(fù)位前的幾個操作,是否阻止了復(fù)位代碼的運行。
假定,P01 是 LED,  P00 是按鍵開關(guān)。

CLR  P0.1    ; 點亮 LED
Roop1:
DJNZ R2,Roop1
DJNZ R3,Roop1
SETB P0.1   ;  滅LED
JB   P0.0,$   ; 等待按鍵按下
MOV 0C7H,#20H   ;請求復(fù)位
SJMP  $

這種方法應(yīng)該是最簡單測試 復(fù)位是否成功的方法吧?

作者: dalaoshi    時間: 2023-9-24 23:39
很難理解為何會有這樣的情況,照我理解軟件重置后所有寄存器和記憶體都應(yīng)該歸零,然后從0000開始執(zhí)行,我的板沒有按鈕,只有一顆指示燈P5.4,無法用你的方法檢測,因此我在代碼加上四個重置命令,并關(guān)閉中斷,如果重置無效會看到LED閃滅,結(jié)果證明第一次重置就有效,但沒有回到0000開始執(zhí)行,而在這個副程式不斷重復(fù)。我這副程式有一個寫藍牙模塊的副程式,可以看到不斷有字節(jié)送往串口。

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 次, 然后 執(zhí)行 你的其他代碼,  
然后, 在  執(zhí)行  MOV 0C7H, #20H  之前,先點亮  LED,   然后 執(zhí)行重起 再用 SJMP $  停住代碼。
你就可以通過  LED 有沒有常亮 來知道 重啟是否有效了。  然后在 各代碼 出 分別 追加 快閃 來確定問題出在哪里。
作者: dalaoshi    時間: 2023-9-25 22:06
這問題終于有了答案,原來是我高估了軟件重置的功能,重置后只是將各個功能寄存器恢復(fù)DEFAULT值,然后從0000開始執(zhí)行,并沒有將內(nèi)部RAM全部請零,這就影響程式的路徑了,必須在MAIN開始處加上清零代碼,這樣就和重新開機一樣了。

MAIN:
;LCALL OSC
LCALL IOSET8G            ;8G初始時IO腳全為高阻,必須設(shè)定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 發(fā)表于 2023-9-25 22:06
這問題終于有了答案,原來是我高估了軟件重置的功能,重置后只是將各個功能寄存器恢復(fù)DEFAULT值,然后從000 ...

那個…… 一般 沒必要全IDATA清零吧?
通常只有 用 C51 的,才會需要 全IDATA 甚至 XDATA 上電 清0吧?
玩匯編的,一般都是 用什么 給什么上初值吧?  就好比  R0~R7  以及 A  你都是用之前會 上初值吧? 不會說默認以為他是0 的不是么?
作者: dalaoshi    時間: 2023-9-28 03:28
本帖最后由 dalaoshi 于 2023-9-28 14:25 編輯

上電是應(yīng)該所有RAM都是零的,特殊功能寄存器都被系統(tǒng)設(shè)定為初始值(不一定是零),然后用戶軟件開始賦值跑動。

我納悶為何軟件重置系統(tǒng)是看門狗必須使用的關(guān)鍵功能,卻沒有看過軟件開始時必須將RAM清零的論述,否則看門狗軟件重置后,可能會在故障原地繼續(xù)打轉(zhuǎn),因此我做了一項實驗,將

MOV 0C7H, #00100000B ;RESET TO AP 改成:
MOV 0C7H, #01100000B ;RESET TO ISP 重置后從系統(tǒng)ISP開始執(zhí)行代碼

再把開始清零的代碼去除。

這樣運行軟件代碼后,也能完全重啟,這是因為系統(tǒng)ISP里有代碼能清除RAM為零。

所以以后軟件重置必須是:

MOV 0C7H, #01100000B ;RESET TO ISP ;60H






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一区二区在线播放 | 香蕉久久久久久 | 国产精品色一区二区三区 | 国产精品久久久久久福利一牛影视 | 黄色大片视频 | 一区二区三区四区在线免费观看 | 视频一区二区中文字幕 | 综合久久网| 欧美精品一区久久 | 中文字幕人成乱码在线观看 | 日韩精品一区二区三区视频播放 | 午夜精品一区二区三区在线 | 99九九视频 | 一区二区精品 | 国产视频精品在线 | 亚洲天堂色 | 国产高清视频 | 欧美日韩专区 | 亚洲精品中文字幕 | 国产情侣一区 | 久草.com| 国产精品一区二区三区99 | 久久一二区 | 91大神在线资源观看无广告 | yiren22 亚洲综合 | 欧美特级黄色 | 日韩成人免费在线视频 | 国产馆 | 亚洲成人一二三 | 日韩一区二区三区在线观看 | 91久久精品国产免费一区 | 亚洲一区在线免费观看 | 亚洲综合天堂 | 日日摸夜夜爽人人添av | 久草电影网 | 在线国产一区二区 | 久久久久国产精品人 | 免费国产一区 | 久久精品久久久久久 | 久久夜视频 | 在线欧美日韩 |