T1為定時模式,定時65.536ms,P2.0對應的LED等閃爍一次,T0計數模式,計數脈沖從P3.4腳用按鍵輸入,按一次,記一次,所以計數初值為0FFFFh,沒按一次,產生一個溢出,P2.5對應的LED閃爍,同時數碼管加1顯示。
一、定時/計數器終端模式
org 0000h
ljmp bb ;跳轉到主程序入口bb處
org 000bh ;定時器0中斷響應從這里開始執行
cjne r2,#9d,xx
mov r2,#00h
ljmp xx11
org 001bh ;定時器1中斷響應從這里開始執行
ljmp xxx
bb: mov p1,#3fh ;主程序入口處
mov tmod,#05h ;05h=0000 0101B設置T1定時T0計數模式,0定時,1計數
;00是13位二進制計數模式0,高4位控制T1
;01是16位二進制計數模式1,低4位控制T0
mov dptr,#0300h ;查表入口地址存放
mov r2,#00h
setb et0 ;和setb 0afh效果相同
setb ea ;和setb 0abh相同
setb et1 ;和setb 0a9h相同
mov tmod,#05h ;05h=0000 0101B設置T1定時T0計數模式,0定時,1計數
;00是13位二進制計數模式0,高4位控制T1
;01是16位二進制計數模式1,低4位控制T0
mov dptr,#0300h ;查表入口地址存放
mov r2,#00h
setb et0 ;和setb 0afh效果相同
setb ea ;和setb 0abh相同
setb et1 ;和setb 0a9h相同
setb tr0
setb tr1
mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0fdh ;計數器0的計數初值的低8位(第一次開始計數初值)
sjmp $ ;程序執行時,原地踏步等待語句,在沒有中斷請求時,
;在此位置原地踏步計數定時計數,有請求時跳到中斷入口執行中斷
xx: inc r2
xx11: mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0fdh ;計數器0的計數初值的低8位(第二次以后開始計數初值)
mov a,r2
movc a,@a+dptr
cpl p2.5
mov p1,a
reti
setb tr1
mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0fdh ;計數器0的計數初值的低8位(第一次開始計數初值)
sjmp $ ;程序執行時,原地踏步等待語句,在沒有中斷請求時,
;在此位置原地踏步計數定時計數,有請求時跳到中斷入口執行中斷
xx: inc r2
xx11: mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0fdh ;計數器0的計數初值的低8位(第二次以后開始計數初值)
mov a,r2
movc a,@a+dptr
cpl p2.5
mov p1,a
reti
xxx: mov th1,#00h ;計數器1的計數初值的高8位
mov tl1,#00h ;計數器1的計數初值的低8位
cpl p2.0
reti
mov tl1,#00h ;計數器1的計數初值的低8位
cpl p2.0
reti
org 0300h ;七段顯示嗎表格入口
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end
二、定時/計數器查詢模式
org 0000h
ljmp bb ;跳轉到主程序入口bb處
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end
二、定時/計數器查詢模式
org 0000h
ljmp bb ;跳轉到主程序入口bb處
bb: mov tmod,#15h ;主程序入口處
;設置T1定時模式,工作在計數方式0,設置T0計數模
;式工作在計數方式1
;設置T1定時模式,工作在計數方式0,設置T0計數模
;式工作在計數方式1
mov dptr,#0300h ;查表入口地址存放
clr et0 ;關定時/計數器0中斷
setb ea ;和setb 0abh相同,開總中斷開關
setb et1 ;和setb 0a9h相同,開定時/計數器1中斷
setb tr0
setb tr1
mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0ffh ;計數器0的計數初值的低8位(第一次開始計數初值)
CX: JBC TF0, xx ;查詢定時/計數器0溢出標志位,有溢出跳轉xx執行
JBC TF1, xxx ;查詢定時/計數器1溢出標志位,有溢出跳轉xxx執行
sjmp CX ;無溢出,跳CX繼續查詢
;溢出是在THi和TLi計數滿,超過FFFFH時,TFi被自動置1,中斷和查詢都是根
;據這個標志是否為1來響應的。
xx: mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0ffh ;計數器0的計數初值的低8位(第二次以后開始計數初值)
cjne r2,#10d,xx11
mov r2,#00h
xx11: mov a,r2
movc a,@a+dptr ;查表,用七段碼顯示計數數字
cpl p2.5 ;并讓P2.5上的LED有閃爍效果
mov p1,a ;顯示數字效果從P1口輸出
inc r2 ;加1計數
ret
clr et0 ;關定時/計數器0中斷
setb ea ;和setb 0abh相同,開總中斷開關
setb et1 ;和setb 0a9h相同,開定時/計數器1中斷
setb tr0
setb tr1
mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0ffh ;計數器0的計數初值的低8位(第一次開始計數初值)
CX: JBC TF0, xx ;查詢定時/計數器0溢出標志位,有溢出跳轉xx執行
JBC TF1, xxx ;查詢定時/計數器1溢出標志位,有溢出跳轉xxx執行
sjmp CX ;無溢出,跳CX繼續查詢
;溢出是在THi和TLi計數滿,超過FFFFH時,TFi被自動置1,中斷和查詢都是根
;據這個標志是否為1來響應的。
xx: mov th0,#0ffh ;計數器0的計數初值的高8位
mov tl0,#0ffh ;計數器0的計數初值的低8位(第二次以后開始計數初值)
cjne r2,#10d,xx11
mov r2,#00h
xx11: mov a,r2
movc a,@a+dptr ;查表,用七段碼顯示計數數字
cpl p2.5 ;并讓P2.5上的LED有閃爍效果
mov p1,a ;顯示數字效果從P1口輸出
inc r2 ;加1計數
ret
xxx: mov th1,#00h ;計數器1的計數初值的高8位
mov tl1,#00h ;計數器1的計數初值的低8位
cpl p2.0 ;t0定時模式,定時到讓P2.0取反,LED達到閃爍效果
ret
mov tl1,#00h ;計數器1的計數初值的低8位
cpl p2.0 ;t0定時模式,定時到讓P2.0取反,LED達到閃爍效果
ret
org 0300h ;七段顯示嗎表格入口
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end