微控制器考試壓軸題程式碼深度解讀---獻給正被微控制器QJ的你
開篇語
在我複習的不可自拔的時候。突然想起,簡書的微控制器版塊~~好吧,根本就沒有這個版塊,但是我想寫點關於微控制器相關的東西,讓大家見識到這個生活中隱藏在我們各種各樣機器內的核心器件。也是很多點子物品的靈魂所在。當然,不是科普微控制器。其實,好吧,這就是我複習的時候寫一點筆記。。。下週三就考試了。我還是很慌的,所以把自己的一些思緒理清,正好簡書是個不錯的記筆記的好傢伙~~~嘿嘿嘿~~所以,就有了這個了。待會投稿都不知道投到哪兒去~。不過,如果你正在被微控制器苦苦折磨,最後一道大題想不清楚怎麼搞,那麼,我這篇筆記一定可以幫到你的。。
題目
接下來讓我逐條解讀,做好筆記~~
題目答案
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP TIMER0
ORG 0030H
一堆虛擬碼,還有無條件跳轉指令。為的,是在對的時間,遇到對的中斷,把它帶到對的地方,其中MAIN是主函式,屬於預備階段;TIMER0是中斷到來之後執行的中斷服務程式~
MAIN: MOV SP,#60H %初始化堆疊地址
CLR RS1
CLR RS0
MOV R0,#100 %由R0計數,一百次讀入兩個數值並且求平均
MOV R1,#0 %記錄最小值是一百次中的第幾次
MOV R4,#0FFH %存入最小值的初值
MOV R5,#0 %最小值低位元組的地址記錄
MOV TL0,#30H %%
MOV TH0,#0F8 %%
MOV TMOD,#21H %% 這個是定時器,由計數原理算出來的初值賦值,對了是定時方式一 16位定時器
SETB ET0 %%
SETB TR0 %%
SETB EA %% 開中斷控制位
SJMP $ %預備工作完畢,等待中斷到來
TIMER0:PUSH ACC %%
PUSH PSW %%
PUSH DPH %%
PUSH DPL %%保護現場
CLR RS0
CLR RS1
MOV DPTR,#2000H %%
MOVX A,@DPTR %% 讀入第一次讀數的其中一個數,地址是2000H 對應74LS245
MOV R2,A %把讀入的資料存入R2暫存器
MOV DPTR,#4000H %%
MOVX A,@DPTR %%讀入第二個資料
ADD A,R2 %讀入的兩數相加
RRC A %%右移A ,等同於A/2 即為求均值
MOV DPH,#10H %%
MOV DPL,R1 %%將DPTR指標指向1000H 即6264中的一個地址
MOVX @DPTR,A %將第一次求得的均值存入6264指定地址
MOV R3,A %保留此次求得的均值,以便與下一次讀入的資料的均值進行比較
CLR C %清除Cy 為後面的計算做準備
SUBB A,R4 %把第一次求得的均值與初始化的最小值(0FFH,這他麼其實是最大的,後面隨便來個數都會頂替掉的)進行比較(比較方式是使用借位減法,使用起對Cy的不同賦值來判定那一個數大)
JC T0A %如果一開始的數大(即Cy=1),那麼直接跳轉到T0A
MOV R4,03H %如果求得的均值大,那麼Cy=0,進行這一步,就是用R3(03H其實就是R3的地址)種儲存的本次求得的均值替代掉原來R4中儲存的最小值
MOV R5,01H %然後把R1(01H)中的地址賦給R5
T0A: DEC R0 %上面不管是直接跳過來還是經過幾步再過來,反正都會過來,R0=R0-1 代表接受資料一次
INC R1 % R1=R1+1 代表均值儲存地址變為下一個地址
MOV A,R0 %取得求均值進行的次數
JNZ T0EX %判斷A是否等於0,等於0則直接往下走,不等於0就跳轉到T0EX
MOV DPTR,#2000H %執行到這兒就代表著A(也就是R0計數器為0了)等於0,執行了一百次,那麼,接下來就要輸出了,這一句的意思是把輸出地址定位為1#74LS373
MOV A,R5 %由上面的中斷服務程式的最後,可以知道,R5是記錄最小值的低位元組地址,也就是R0的,只有在新求的均值小於上一步求出來的均值的時候,才把下一步的均值放到R5種儲存,這樣R5種儲存的永遠是最小值的地址,此時取出R5中的地址資料
MOVX @DPTR,A %輸出最小值低位元組地址資料
MOV DPTR,#6000H %%
MOV A,#10H %%
MOVX @DPTR,A %%將最小值高位元組地址輸出到2#74LS373
MOV R0,#100 %%
MOV R1,#0 %%
MOV R4,#0FFH %%再次對計數器,最小值,最小值低位元組地址,最小值進行初始化,準備下一步的執行
T0EX: POP DPL %%
POP DPH %%
POP PSW %%
POP ACC %%
RETI %%恢復現場,進入中斷前的主程式,也就是SJMP那一段的PC所指地址
整整61行程式碼。而且我們的微控制器試卷還有兩個這種壓軸題,還有不少的小題和大題,當然比起這個不值一提。。絕望~~但還是要學習~!!!
不多廢話了。剛剛是學得累了。玩會電腦補充下戰鬥力,現在,繼續與微控制器鬥爭,看是誰QJ誰!!
相關文章
- 讀取微控制器內部程式的方法
- 51微控制器lcd程式碼
- 51微控制器—矩陣鍵盤-程式碼矩陣
- 2020年高壓電工考試題及高壓電工考試題庫
- 如何給 swoft 貢獻程式碼
- 51微控制器流水燈電路以及C程式碼C程式
- 51微控制器mcp4728驅動程式原始碼原始碼
- 【微控制器學習】第八課:微控制器的LED點陣
- 2024年廣東中考數學壓軸題參考答案
- 51微控制器亮燈程式(入門)
- 求夠微控制器程式下載器
- 如何快速給你的微軟考試證書續期?微軟
- 2020年低壓電工考試題及低壓電工考試資料
- 如何給 GNU 專案貢獻程式碼
- 模擬考試參考程式碼
- 成教考試祕籍——給社群讀專升本的童鞋!
- 2020年高壓電工考試總結及高壓電工作業考試題庫
- 2021年高壓電工證考試題庫及高壓電工試題解析
- 51微控制器學習歷程(二)快速入門51微控制器
- 基於微控制器的紅外電子密碼鎖程式設計思路密碼程式設計
- 【微控制器彙編實戰】基於51微控制器的搶答器設計
- 微控制器工作原理的認識
- 微控制器 MCU 韌體打包指令碼軟體指令碼
- 51微控制器實現數碼管顯示
- 2020年低壓電工模擬考試題庫及低壓電工模擬考試系統
- 應廣微控制器開發案例應廣微控制器11bitPWM配置
- 51微控制器非常簡潔的矩陣掃描程式矩陣
- 51微控制器程式下載失敗原因排查
- 51微控制器程式框架之組合按鍵框架
- 51微控制器程式框架之矩陣按鍵框架矩陣
- 為何大多數MCU微控制器工作電壓為5V?
- 90%的微控制器初學者,都會遇到這些問題
- 微控制器中volatile的應用
- 嚐嚐MicroPython控制微控制器Python
- 51微控制器彙編教程
- 快速入門51微控制器
- AVR微控制器EEPROM學習VR
- 微控制器CPU執行原理