EM78P153定時器的應(yīng)用
具體電路如下:
本文引用地址:http://www.ex-cimer.com/article/201611/316076.htm源程序:
/*******************************************************
em78p153 TCC內(nèi)部定時器的學(xué)習(xí)
DAT=P61 CLK=P60 KON=P62 K_UP K_DOWN LED1=P51 LED2=P52
*******************************************************/
;*********************寄存器及變量定義****************************
R0 EQU 0X00 ;間接地址寄存器
TCC EQU 0X01 ;計時,計數(shù)器
CONT EQU 0X01 ;控制寄存器
PC EQU 0X02 ;程序計數(shù)器
STATUS EQU 3 ;狀態(tài)寄存器
Z_FLAG EQU 2 ;零標(biāo)志位
C_FLAG EQU 0 ;進(jìn)位標(biāo)志位
;***************************************************************
IOC5 EQU 0X05
PORT5 EQU 0x05
;**************************************************************
IOC6 EQU 0X06
PORT6 EQU 0x06
;**************************************************************
IOCB EQU 0X0B ;下拉控制寄存器
IOCC EQU 0X0C ;開漏控制寄存器
IOCD EQU 0X0D ;上拉控制寄存器
IOCE EQU 0X0E ;WDT控制寄存器
RF EQU 0X0F ;中斷屏蔽寄存器
IOCF EQU 0X0F
NUM==0X20
LP_CNT0==0X21
LP_CNT1==0X22
DA
SEND_BIT_NUM==0X24
LEDH==0X26
LEDL==0X25
TCC_Count EQU 0X2F
;************************************************************
BACC EQU 0X2D ;ACC備份寄存器
BSTATUS EQU 0X2E ;STATUS備份寄存器
;**********************************************************
ORG 00H
JMP START
ORG 0008H
JMP INT_TCC ;進(jìn)入中斷
TABLE:
ADD PC,A
RETL 0X11;0
RETL 0XDB;1
RETL 0X23;2
RETL 0X43;3
RETL 0XC9;4
RETL 0X45;5
RETL 0X05;6
RETL 0XD3;7
RETL 0X01;8
RETL 0X41;9
RETL 0X11;9
START:
CALL INITAITE ;程序開始前的初始化
BS PORT5,1
BS PORT5,2
MOV A,@0X00 ;give the first da
MOV LEDH ,A
MOV LEDL ,A
;;;;;;;;;;;;;;;;;;;;;
ST:
BS PORT5,1
BC PORT5,2
MOV A,LEDH
CALL TABLE
MOV DA
CALL SEND
CALL DELAYMS
BS PORT5,2
BC PORT5,1
MOV A,LEDL
CALL TABLE
MOV DA
CALL SEND
CALL DELAYMS
BC STATUS,C_FLAG ;進(jìn)位清零
;;;;;judge TB_NUMDa
MOV A,LEDL
SUB A,@0x09
JBS STATUS,C_FLAG
JMP RESET
JMP ST
;;;;;;;;;;;;;;;
RESET:
MOV A,@0X00 ;give the first da
MOV LEDL ,A
INC LEDH
JMP ST
;;***********************************************
;;***********74hc164 send*************************
SEND: MOV A,@8 ;on
MOV SEND_BIT_NUM,A
SEND_LOOP:
RLC DA
JBC STATUS,0 ;DA
BS PORT6,1
JBS STATUS,0 ;DA
BC PORT6,1
BC PORT6,0 ;do Clock
NOP
BS PORT6,0
DJZ SEND_BIT_NUM ;for 8 loops
JMP SEND_LOOP
RET
;;*******************************************
INITAITE:
MOV A,@0B00000100 ;預(yù)分頻器分給TCC,分頻比為 1:8
CONTW ;上升沿觸發(fā),內(nèi)部時鐘源,中斷屏蔽。
;P54當(dāng)I/O口用時,TS_bit5必須為0
MOV A,@0B11111000 ;P5口定義為輸出,輸入口: 1為輸入 ,0為輸出
IOW IOC5
MOV A,@0B00111100 ;P6口定義為輸出口: 0為輸出 ,1為高阻狀態(tài)
IOW IOC6
MOV A,@0B11111111 ;設(shè)置P60口,為下拉: 0為下拉使能 1為下拉禁止
IOW IOCB ;bit0_P50 bit1_P51 bit2_P52
;bit4_P60 bit5_P61 bit6_P62
MOV A,@0B00000000 ;開漏控制寄存器: 1為使能 ,0為禁止
IOW IOCC
MOV A,@0B00110001 ;上拉控制寄存器: 0為使能 ,1為禁止
IOW IOCD ;bit0=P60 ,bit1=P61 ,bit2=P62 ,bit3
;bit4=P64 ,bit5=P65 ,bit6=P66 ,bit7=P67
MOV A,@0B00000000 ;WDT控制寄存器
IOW IOCE ;WDTE_bit7 看門狗使能控制: 0為禁止,1為使能
;EIS_bit6 P60引腳功能定義: 0表示為P60為雙向IO口
; 1表示外部中斷輸入引腳,此時引腳必須設(shè)置為輸入狀態(tài)
MOV A,@0B00000001 ;中斷屏蔽寄存器: 0禁止中斷,1允許中斷
IOW IOCF
; EXIE_bit2=0 ICIE_bit1=0 TCIE_bit0=1
;開定時器中斷
MOV A,@6
MOV TCC,A
BC RF,0 ;清零定時器中斷溢出標(biāo)志位
ENI ;開中斷
;DISI
RET
;**********************TCC中斷處理**************************************
INT_TCC: DISI ;先關(guān)閉中斷
MOV BACC,A ;保護(hù)ACC和STATUS
SWAPA STATUS
MOV BSTATUS,A
JBS RF,0 ;判斷是否為計數(shù)器中斷,如果是得話進(jìn)入
JMP INTQUIT ;計數(shù)器中斷服務(wù)程序,不是則退出
MOV A,@6
MOV TCC,A
BC RF,0 ;清中斷標(biāo)志位
INC TCC_Count
JBS STATUS,Z_FLAG
JMP INTQUIT
MOV A,@200
MOV TCC_Count,A
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,@001000000B
XOR PORT6,A ;蜂鳴器取反
INC LEDL ;LED加1
INTQUIT: SWAPA BSTATUS ;恢復(fù)寄存器
MOV STATUS,A
SWAP BACC
SWAPA BACC
RETI
;;******************************************
DELAYMS:
MOV A, @200
MOV LP_CNT0, A
NOP
P0_DLY:
NOP
MOV A, @20
MOV LP_CNT1, A
P0_LP:
NOP
NOP
NOP
DJZ LP_CNT1
JMP P0_LP
DJZ LP_CNT0
JMP P0_DLY
RET
END
評論