📄 file4.asm
字号:
;内部定时器程序 ,定时器T0工作在方式1
;现象:LED1不断闪烁,
;由于我们的定时器中断以后,只是简单地给P1.0(LED1)翻转,我们看到的就是LED1闪烁
;扩展这个功能,我们能够做成精度很高的信号源,比如,输出一定频率的方波信号等。
beep bit p3.7
led1 bit p1.0
led2 bit p1.1
led3 bit p1.2
led4 bit p1.3
led5 bit p1.4
led6 bit p1.5
led7 bit p1.6
led8 bit p1.7
int_data equ 45h
count_data equ 44h
timer_data equ 43h
;以上为预定义部分
;以下程序代码开始
org 00h ;程序开始
jmp main ;引导跳转到主程序
org 0bh ;中断服务程序入口
jmp tim0 ;跳转到服务程序
org 030h ;主程序代码开始地址
main:
mov sp,#30h ; 初始化SP
mov a,#00h ; 累加器初始化
mov b,#00h
mov p1,0ffh ; 灭掉LED显示
clr beep ; 禁止蜂鸣器
mov r0,#4 ; 定时器发生次数,每次250ms,4次 1秒
lcall pro_timer ; 开始调用定时器初始化程序
jmp $ ; 程序停止,等待中断
tim0:clr tr0 ; 定时中断服务程序,首先
; 清除定时器运行标志
mov th0,#91h ; 重新设置定时常数
mov tl0,#5fh ; 为了提高定时精度,不能简单代入计算结果
; 还需要减去中断服务程序执行以下代码的时间
djnz r0,tend ; 每次定时250ms,共计4次为1s
mov r0,#4 ; 计数完成,重新设置定时
cpl p1.0 ; 输出结果
tend: setb tr0 ; 开始运行定时器
reti ; 中断服务结束,返回
pro_timer: ;
mov tmod,#91h ; 设置定时器T1为方式1
mov th0,#58h ; 根据计算确定 定时器初始值
mov tl0,#0a1h ; x = 65536us - t ;换算成十六进制
setb ea ; 总的中断允许
setb et0 ; 允许定时T0中断
setb tr0 ; 定时器开始运行
ret ; 子程序返回
end ;整个程序结束,以后的代码无效
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -