LED闪烁程序如下:
- ;外设端口切换寄存器 2 的地址
- P_SW2 DATA 0BAH
- ;端口模式配置寄存器的地址
- P1M0 DATA 092H
- P1M1 DATA 091H
- ORG 0000H
- LJMP MAIN
- ORG 0100H
- ; 主程序:
- MAIN:
- MOV SP, #5FH
- ORL P_SW2,#80H ;使能访问 XFR
-
- MOV P1M0, #00H
- MOV P1M1, #00H
-
- MOV P1M0, #08H ;设置 P1.3 为推挽输出模式
- MOV P1M1, #00H
-
- LJMP LOOP
- ; 循环
- LOOP:
- SETB P1.3 ; (1) P1.3 口输出高电平,点亮小灯
- LCALL DELAY_1S ; (2) 延时一段时间
- CLR P1.3 ; (3) P1.3 口输出低电平,熄灭小灯
- LCALL DELAY_1S ; (4) 延时一段时间
- AJMP LOOP ; (5) 跳转到第一句 LOOP 处
- ;====================延时1秒子程序====================
- DELAY_1S: ;延时子程序,12MHz晶振延时1.002035秒
- MOV R4, #10 ;1指令周期
-
- L3:
- MOV R2, #200 ;1指令周期
-
- L1:
- MOV 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
复制代码
烧录到 STC8H8K64U 芯片中,使用的时钟频率是 1MHz,这个频率是 12MHz 的 1/12
LED小灯点亮1秒钟、熄灭1秒钟、点亮1秒钟、熄灭1秒钟……闪烁
|