|
ORG 0000H
LJMP MAIN
ORG 000BH ;外部中断0入口
SJMP IF0BREAK
ORG 0030H ;程序的开始地址
MAIN:
SETB EA ;设置让外部中断0起作用,硬件初始化
SETB ET0 ;计数器0溢出中断设置
SETB PT0 ;设置为最高优先级
MOV TMOD,#01H ;设置计数器0工作为方式1,16位计数器
MOV TL0,#0B0H ;设置计数器0初值,12MHz频率,计数器50ms执行一次就溢出中断
MOV TH0,#3CH
MOV R0,#200 ;循环20次为1S,200次为10秒
SETB TR0
FINISH: SJMP $
;子程序:IF0BREAK
;功能:计数器0溢出中断入口
IF0BREAK:
CLR ET0 ;关闭中断响应
CLR TR0 ;停止计数器
MOV TL0,#3CH
MOV TH0,#0B0H
DJNZ R0,EXIT ;满10s就把P1.0位置反,方便查看结果
JB P1.0,SP1 ;如P1.0=1->SP1
SETB P1.0
LJMP STARV ;跳转到赋初值的地方
SP1:
CLR P1.0
STARV: ;200次完毕后重赋初值
MOV R0,#200
MOV TL0,#3CH
MOV TH0,#0B0H
EXIT:
SETB TR0 ;启动定时器
SETB ET0 ;启动中断
RETI
END
编译完后直接用proteus仿真运行,在我的机子上可以正常运行,P1.0每10秒翻转一次
|
|