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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2697|回復: 7
打印 上一主題 下一主題
收起左側

有關STC單片機芯片的軟件復位系統

[復制鏈接]
跳轉到指定樓層
樓主
ID:283954 發表于 2023-9-24 06:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
為何我的以下代碼不起作用?

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


執行此命令后并沒有重新啟動,會在附近重復打轉,之前已經送出一個#56H的字節到串口,確定是有執行到這里的。

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



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:624769 發表于 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  $

這種方法應該是最簡單測試 復位是否成功的方法吧?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:283954 發表于 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




評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:624769 發表于 2023-9-25 16:31 | 只看該作者
開機后 啥事都不干,先讓 LED  慢閃 3 次, 然后 執行 你的其他代碼,  
然后, 在  執行  MOV 0C7H, #20H  之前,先點亮  LED,   然后 執行重起 再用 SJMP $  停住代碼。
你就可以通過  LED 有沒有常亮 來知道 重啟是否有效了。  然后在 各代碼 出 分別 追加 快閃 來確定問題出在哪里。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:283954 發表于 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
回復

使用道具 舉報

6#
ID:624769 發表于 2023-9-25 22:37 | 只看該作者
dalaoshi 發表于 2023-9-25 22:06
這問題終于有了答案,原來是我高估了軟件重置的功能,重置后只是將各個功能寄存器恢復DEFAULT值,然后從000 ...

那個…… 一般 沒必要全IDATA清零吧?
通常只有 用 C51 的,才會需要 全IDATA 甚至 XDATA 上電 清0吧?
玩匯編的,一般都是 用什么 給什么上初值吧?  就好比  R0~R7  以及 A  你都是用之前會 上初值吧? 不會說默認以為他是0 的不是么?
回復

使用道具 舉報

7#
ID:283954 發表于 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

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频进入 | 中文字幕免费中文 | 精品一二三区 | 成人免费视频在线观看 | 久久久涩 | 日韩久久精品 | 天久久 | 国产一区二区久久 | 欧美激情一区二区三区 | 国产亚洲精品区 | 中文字幕视频在线观看 | 国产99久久久国产精品 | 久久久久久国产精品免费免费男同 | 黄色国产在线视频 | 天天综合久久网 | 亚洲看片网站 | 91精品国产综合久久国产大片 | 91在线资源| 国产精品视频免费 | 天堂在线91 | 久久精品国产一区二区电影 | 伊人精品久久久久77777 | 国产一区| 黄视频免费在线 | 丁香五月网久久综合 | 91精品国产综合久久久动漫日韩 | 久久久久久久久久一区 | 国产99视频精品免费视频7 | 中文av电影 | 久久久国产亚洲精品 | 欧美一级黄视频 | 二区视频 | 亚洲一区二区三区视频 | 一级高清视频 | 91精品国产一区二区三区 | 日韩中文字幕高清 | 国产精品久久 | www.久久精品 | 免费一区二区 | 久久一区二区三区四区 | 亚洲97 |