一、任務需求
指示燈LED4閃爍,亮0.5秒,滅0.5秒,無限循環?
二、針對硬件的編程
- 1、確定原理圖
- 2、確定硬件的物理關系
三、設計步驟
1.用自己的語言描述工作流程
- 1.1指示燈LED4亮
- 1.2延時0.5秒
- 1.3指示燈LED4滅
- 1.4延時0.5秒
- 1.5跳轉到1.1步?
?2.確定硬件連接關系,確定驅動邏輯
- CLR 清零
- SETB 置高電平
3. 延時子程序
實現方法:
軟件延時 | 與單片機相關? 指令執行周期相關 | 工程里面這種做法不可取 |
硬件延時? | 與單片機相關 與硬件定時器相關 | 均與系統時鐘相關 |
軟硬結合 | 取長補短 |
?軟件延時
3.1確定系統時鐘
系統時鐘 | 12MHZ |
單周期指令 | 1us |
雙周期指令 | 2us |
四周期指令 | 4us |
時鐘頻率f:12MHZ
時鐘周期T:1/f
機器周期:1/12MHZ*12=1us
指令周期:執行一條指令所花費的時間 以機器周期為基本單位
?
3.2確定指令周期數
?總線的位寬? 8位 1字節 0-255(不能超過這個范圍)
?
R7==0 順序執行(執行下一條指令)?
循環嵌套?
更簡潔的寫法
C語言中的函數在匯編語言中叫子程序 ——D500ms
LCALL——長調用 長指的是64k空間里面都能調用到
?
D1ms 代表的是地址 是子程序的名字
RET返回(主函數)
?
四、完整的匯編指令
ORG不是匯編指令,是給匯編器看的?
?
PC決定了程序執行的位置
地址總線:16位
數據總線:8位
單片機讀取機器碼的 思考過程
?執行指令的方式
?PC指針初始是0000H 由硬件決定 復位后為0
做了長跳轉到main 是為了把中斷服務程序的入口地址給預留出來
堆棧指針
PC默認值為07H,永遠用不到的?
壓進去的第一個數是PC的低八位
本文來自【手工匯編_004_程序執行過程】