?? timer.asm
字號:
.mmregs
.include "c5xx.inc" ;"init54x.inc"
.def MAIN_START
.def timer0_rev
STACK .usect "STACK",20h
.data
TIM0 .set 0024h ;定時器0的TIM 寄存器地址
PRD0 .set 0025h ;定時器0的PRD 寄存器地址
TCR0 .set 0026h ;定時器0的TCR 寄存器地址
t0_flag .set 0060h ;定義輸出判別標志
t0_counter .usect "vars", 1 ;定義計數長度變量
SWCR .set 2BH
.text
MAIN_START:
STM #0000h,SWWSR
STM #0010h,TCR0 ; TCR TSS=1 ,關斷定時器0
STM #39999,TIM0 ;TIM0賦初值
STM #39999,PRD0 ;PRD0賦初值
ST #0,t0_flag
STM #0269h,TCR0 ;ON TIM0 in TCR TSS=0
STM #0008h,IFR ;TINT0=1 ,清除未處理完的定時器中斷
STM #0008h,IMR ; TINT0=1 ,開放(允許)定時器中斷
RSBX INTM ;開放全部中斷
;jj:
; NOP
; NOP
; NOP
; B jj
RET
; 定時器0中斷服務子程序.其功能是:每定時中斷一次計數器減1,這樣減100次就延時1s,并改變一次XF的值,使XF高低電平各持續1s,形成2s周期.
timer0_rev:
PSHM TRN
PSHM T
PSHM ST0
PSHM ST1
RSBX CPL ;復位CPL,選用頁指針DP的直接尋址方式
ADDM #-1,*(t0_counter) ;計數器減1
CMPM *(t0_counter),#0 ;判斷計數器是否減至0: 如果t0_counter=0,則TC=1 ,否則TC=0
BC wait ,NTC ;如果沒有減至0,即TC=0,則執行wait程序段
;如果減至0,即TC=1,計數器重新開始計數
ST #100,*(t0_counter)
BITF t0_flag,#1
BC xf_out,NTC ;TC=0時,執行xf_out程序段
SSBX XF ;TC=1時
ST #0,t0_flag ;t0_flag=0,為下次XF變低電平作準備
B wait
xf_out:
RSBX XF
ST #1,t0_flag ;t0_flag=1,為下次XF變高電平作準備
wait:
POPM ST1
POPM ST0
POPM T
POPM TRN
RETE
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -