新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > EM78P153定时器的应用

EM78P153定时器的应用

作者: 时间:2016-11-13 来源:网络 收藏
义隆单片机定时器的使用,以EM78P153为例,练习了下TCC内部定时的使用。选了个现成的电路做调试来做练习。

具体电路如下:

本文引用地址:https://www.eepw.com.cn/article/201611/316076.htm

源程序:

/*******************************************************

em78p153 TCC内部定时器的学习

DAT=P61 CLK=P60 KON=P62 K_UP K_DOWN LED1=P51 LED2=P52

*******************************************************/

;*********************寄存器及变量定义****************************

R0 EQU 0X00 ;间接地址寄存器

TCC EQU 0X01 ;计时,计数器

CONT EQU 0X01 ;控制寄存器

PC EQU 0X02 ;程序计数器

STATUS EQU 3 ;状态寄存器

Z_FLAG EQU 2 ;零标志位

C_FLAG EQU 0 ;进位标志位

;***************************************************************

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

DATA==0X23

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 ;进入中断

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 data to TB_NUM

MOV LEDH ,A

MOV LEDL ,A

;;;;;;;;;;;;;;;;;;;;;

ST:

BS PORT5,1

BC PORT5,2

MOV A,LEDH

CALL TABLE

MOV DATA,A

CALL SEND

CALL DELAYMS

BS PORT5,2

BC PORT5,1

MOV A,LEDL

CALL TABLE

MOV DATA,A

CALL SEND

CALL DELAYMS

BC STATUS,C_FLAG ;进位清零

;;;;;judge TB_NUMData;;;;;;;;

MOV A,LEDL

SUB A,@0x09

JBS STATUS,C_FLAG

JMP RESET

JMP ST

;;;;;;;;;;;;;;;

RESET:

MOV A,@0X00 ;give the first data to TB_NUM

MOV LEDL ,A

INC LEDH

JMP ST

;;***********************************************

;;***********74hc164 send*************************

SEND: MOV A,@8 ;one data=8 Bit

MOV SEND_BIT_NUM,A

SEND_LOOP:

RLC DATA ;Send The Data

JBC STATUS,0 ;DATA=1

BS PORT6,1

JBS STATUS,0 ;DATA=0

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 ;预分频器分给TCC,分频比为 1:8

CONTW ;上升沿触发,内部时钟源,中断屏蔽。

;P54当I/O口用时,TS_bit5必须为0

MOV A,@0B11111000 ;P5口定义为输出,输入口: 1为输入 ,0为输出

IOW IOC5

MOV A,@0B00111100 ;P6口定义为输出口: 0为输出 ,1为高阻状态

IOW IOC6

MOV A,@0B11111111 ;设置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表示外部中断输入引脚,此时引脚必须设置为输入状态

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 ;清零定时器中断溢出标志位

ENI ;开中断

;DISI

RET

;**********************TCC中断处理**************************************

INT_TCC: DISI ;先关闭中断

MOV BACC,A ;保护ACC和STATUS

SWAPA STATUS

MOV BSTATUS,A

JBS RF,0 ;判断是否为计数器中断,如果是得话进入

JMP INTQUIT ;计数器中断服务程序,不是则退出

MOV A,@6

MOV TCC,A

BC RF,0 ;清中断标志位

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 ;恢复寄存器

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



关键词: EM78P153定时

评论


技术专区

关闭