blink.a51 內容如下:
- ; 外設端口切換寄存器 2 的地址
- P_SW2 DATA 0BAH
- ; 端口模式配置寄存器的地址
- P1M0 DATA 092H
- P1M1 DATA 091H
- ORG 0000H ; 設置程序的起始地址為 0000H,即程序的入口點
- LJMP MAIN ; 通過長跳轉指令 (LJMP) 跳轉到 MAIN 主程序的地址
- ORG 0100H ; 設置程序的重定位地址為 0100H,用于存放中斷向量等信息
- ; 主程序:
- MAIN:
- MOV SP, #5FH ; 設置堆棧指針
-
- ORL P_SW2, #80H ; 使能訪問 XFR
-
- MOV P1M0, #00H ; 清空 P1M0 寄存器
- MOV P1M1, #00H ; 清空 P1M1 寄存器
-
- MOV P1M0, #0FFH ;設置 P1 為推挽輸出模式。#0FFH 中的 0 不能省略
- MOV P1M1, #00H
-
- LJMP LOOP ; 跳轉到循環體
- ; 循環體
- LOOP:
- MOV P1, #0FFH ; 將 0xFF 賦值給 P1 寄存器,即將端口 P1 的所有引腳設為高電平,熄滅小燈
- LCALL DELAY_1S ; 延時一段時間
- MOV P1, #00H ; 將 0 賦值給 P1 寄存器,即將端口 P1 的所有引腳設為低電平,點亮小燈
- LCALL DELAY_1S ; 延時一段時間
- AJMP LOOP ; 無條件跳轉到循環體
- ; ====================延時1秒子程序====================
- DELAY_1S: ; 延時子程序,12MHz 晶振延時 1.002035 秒
- MOV R4, #10 ; 設置 R4 寄存器為 10,1 指令周期
-
- L3:
- MOV R2, #200 ; 設置 R2 寄存器為 200,1 指令周期
-
- L1:
- MOV R3, #249 ; 設置 R3 寄存器為 249,1 指令周期
- L2:
- DJNZ R3, L2 ; 2 指令周期
-
- DJNZ R2, L1 ; 2 指令周期
- DJNZ R4, L3 ; 2 指令周期
-
- RET ; 2 指令周期
- ; 循環體延時時間: [(249*2+1+2)*200+1+2]*10*12/12000000=1.002032s
- ; 加上 LCALL 指令和第一條 MOV 指令以及最后一條 RET 指令算出來整個函數的時間為 1.002035s
- ; =====================================================
- END
復制代碼
Proteus 8 Professional 仿真結果如下圖:
51hei.gif (223.82 KB, 下載次數: 464)
下載附件
2024-1-6 19:14 上傳
|