?? file4.asm
字號:
;內(nèi)部定時器程序 ,定時器T0工作在方式1
;現(xiàn)象:LED1不斷閃爍,
;由于我們的定時器中斷以后,只是簡單地給P1.0(LED1)翻轉(zhuǎn),我們看到的就是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
;以上為預(yù)定義部分
;以下程序代碼開始
org 00h ;程序開始
jmp main ;引導(dǎo)跳轉(zhuǎn)到主程序
org 0bh ;中斷服務(wù)程序入口
jmp tim0 ;跳轉(zhuǎn)到服務(wù)程序
org 030h ;主程序代碼開始地址
main:
mov sp,#30h ; 初始化SP
mov a,#00h ; 累加器初始化
mov b,#00h
mov p1,0ffh ; 滅掉LED顯示
clr beep ; 禁止蜂鳴器
mov r0,#4 ; 定時器發(fā)生次數(shù),每次250ms,4次 1秒
lcall pro_timer ; 開始調(diào)用定時器初始化程序
jmp $ ; 程序停止,等待中斷
tim0:clr tr0 ; 定時中斷服務(wù)程序,首先
; 清除定時器運行標(biāo)志
mov th0,#91h ; 重新設(shè)置定時常數(shù)
mov tl0,#5fh ; 為了提高定時精度,不能簡單代入計算結(jié)果
; 還需要減去中斷服務(wù)程序執(zhí)行以下代碼的時間
djnz r0,tend ; 每次定時250ms,共計4次為1s
mov r0,#4 ; 計數(shù)完成,重新設(shè)置定時
cpl p1.0 ; 輸出結(jié)果
tend: setb tr0 ; 開始運行定時器
reti ; 中斷服務(wù)結(jié)束,返回
pro_timer: ;
mov tmod,#91h ; 設(shè)置定時器T1為方式1
mov th0,#58h ; 根據(jù)計算確定 定時器初始值
mov tl0,#0a1h ; x = 65536us - t ;換算成十六進制
setb ea ; 總的中斷允許
setb et0 ; 允許定時T0中斷
setb tr0 ; 定時器開始運行
ret ; 子程序返回
end ;整個程序結(jié)束,以后的代碼無效
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -