?? t0_2.asm
字號:
;(21)實驗二、T0(定時/計數器0)計數實驗
;檔案名稱:T0_2.ASM
;====================================================================
TIMER0 EQU 30H
TIMER1 EQU 31H
ORG 0000H
JMP START
ORG 000BH
JMP TIME0
ORG 0030H
START: MOV SP,#60H ;設定堆棧區
MOV IE,#10000010B ;中斷致能,EA=ET0=1
MOV IP,#00000000B
MOV TMOD,#05H ;設定計數器 0 為 mode 1
MOV TH0,#0FFH ;3 次計數后產生中斷
MOV TL0,#0FDH
SETB TR0 ;計數器 0 開始計數
LOOP: MOV A,#11110000B
MOV P1,A ;從 P1 輸出到LED
CALL DELAY500 ;延遲約 0.5 秒
MOV A,#00001111B
MOV P1,A ;從 P1 輸出
CALL DELAY500 ;延遲約 0.5 秒
JMP LOOP
;====================================================================
TIME0: CLR TR0 ;計數器 0 停止計數
PUSH ACC
PUSH B
MOV B,#08H
MOV A,#11111110B ;單一燈向左移
LOOP1: MOV P1,A ;從 P1 輸出到 LCD
RL A ;左旋一次
CALL DELAY500
DJNZ B,LOOP1 ;移動 8 次了嗎?
POP B
POP ACC
MOV TH0,#0FFH ;3 次計數后產生中斷
MOV TL0,#0FDH
SETB TR0 ;計數器 0 開始計數
RETI
;=====================================================================
;延時子程序
DELAY: PUSH TIMER1; 延時TIMER1*1 ms for 12MHz
PUSH TIMER0
DELAY1: MOV TIMER0,#250 ;循環一次需要4個機器周期,時間為4*1μS
DELAY2: NOP ; 1個周期
NOP ; 1個周期
DJNZ TIMER0,DELAY2 ;2個周期
DJNZ TIMER1,DELAY1
POP TIMER0
POP TIMER1
RET
NOP;--------------------
DELAY01: NOP; 延時 1 ms
PUSH TIMER1
MOV TIMER1,#01H
LCALL DELAY
POP TIMER1
RET
NOP;--------------------
DELAY10: NOP; 延時 10 ms
PUSH TIMER1
MOV TIMER1,#10
LCALL DELAY
POP TIMER1
RET
NOP;---------------------
DELAY100: NOP; 延時100 ms
PUSH TIMER1
MOV TIMER1,#100
LCALL DELAY
POP TIMER1
RET
NOP;---------------------
DELAY250: NOP; 延時 250 ms
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
POP TIMER1
RET
NOP;---------------------
DELAY500: NOP; 延時 500 ms
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
LCALL DELAY
POP TIMER1
RET
NOP;---------------------
DELAY1S: NOP; 延時 1 sec
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
POP TIMER1
RET
NOP;---------------------
;--------------------------------------------------------------------
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -