📄 main.a51
字号:
;*******************************************************************************
;程序名称:LED闪烁发光
;硬件接法:P1.1控制LED,低电平点亮
;运行效果:LED亮200ms,灭800ms,反复循环
;*******************************************************************************
;*******************************************************************************
;定义I/O接口
;*******************************************************************************
LED BIT P1.1
;*******************************************************************************
;复位入口
;*******************************************************************************
ORG 0x8000
LJMP PreMain
;*******************************************************************************
;程序段:PreMain
;功能:进入主程序之前的初始化操作
;*******************************************************************************
PreMain:
MOV SP, #0x30
LJMP main
;*******************************************************************************
;函数:void Delay(unsigned char t)
;功能:延时0.01s~2.56s
;参数:t = R7
; t>0时,延时(t*0.01)s
; t=0时,延时2.56s
;说明:定时10ms的定时器初值=65536-0.01/(1/(f/12)),其中f为晶振频率
;*******************************************************************************
Delay:
MOV TH0, #0xDC ;设置定时器初值(定时10ms)
MOV TL0, #0x00
SETB TR0 ;启动定时器
JNB TF0, $ ;等待定时器溢出
CLR TR0 ;停止定时器
CLR TF0 ;清除溢出标志
DJNZ R7, Delay ;循环t次
RET
;*******************************************************************************
;函数:void main()
;功能:主函数
;*******************************************************************************
main:
ANL TMOD, #0xF0 ;T0设置在方式1,即16位定时器(不改变T1的模式)
ORL TMOD, #0x01
main_Loop:
CLR LED ;点亮LED
MOV R7, #20 ;延时200ms
CALL Delay
SETB LED ;熄灭LED
MOV R7, #80 ;延时800ms
CALL Delay
SJMP main_Loop
;*******************************************************************************
;程序结束
;*******************************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -