📄 tim1ch0i.asm
字号:
*---------------------------------------------------------------------------*
*文件名:Tim1Ch0I.ASM--定时器接口模块编程实验2-输入捕捉 *
*硬件接线:PTA.1接指示灯 PTD.4接开关 *
*程序描述: *
* ① 系统初始化:CONFIG2、1、PTCL、堆栈 *
* ② 以输入捕捉中断方式, *
* 开关拨动使捕捉中断取反指示灯PTA1,使其闪动 *
*说明:本例是将定时器1通道0(21脚)设为"跳变沿捕捉"(即电平发生变化时产生中断), *
* 验证方法是将21脚不断接高电平、低电平,此时指示灯PTA1状态跟随改变 *
*---------------------------------------------------------------------------*
*----------寄存器地址--------------------------------------------------------
DDRA equ $0004 ;A口数据方向寄存器
PTA equ $0000 ;A口数据寄存器
*
T1SC equ $0020 ;定时器1状态和控制寄存器
T1CNTH equ $0021 ;定时器1计数寄存器(高位)
T1CNTL equ $0022 ;定时器1计数寄存器(低位)
T1MODH equ $0023 ;定时器1模数寄存器(高位)
T1MODL equ $0024 ;定时器1模数寄存器(低位)
T1SC0 equ $0025 ;定时器1通道0状态和控制寄存器
T1CH0H equ $0026 ;定时器1通道0的通道寄存器(高位)
T1CH0L equ $0027 ;定时器1通道0的通道寄存器(低位)
RAMstartAddr equ $0040 ;RAM的起始地址(因芯片不同可以更改)
FlashStartAddr equ $8000 ;程序开始地址(因芯片不同可以更改)
*-------------------主程序开始-----------------------------------------------
org FlashStartAddr
MainInit: ;复位后程序从此开始执行
;系统初始化
SEI ;禁止所有中断
LDHX #$023F ;堆栈初始化,放入GP32的RAM最高端
TXS
JSR Init0 ;调系统初始化子程序Init0,初始学习时跳过此处
;I/O初始化
;------------------------------------------------------------------
BSET 1,DDRA ;定义PTA.1为输出(指示灯)
BSET 1,PTA
;定时器1通道0初始化
LDA #%00110000 ;不允许溢出中断、不启动计数、分频因子=1
STA T1SC ;定时器1状态和控制寄存器
LDA #%01001100 ;设为输入捕捉模式,允许输入捕捉中断,
;跳变沿捕捉(即电平发生变化时产生中断)
STA T1SC0 ;定时器1通道0状态和控制寄存器
BCLR 5,T1SC ;允许定时器1计数寄存器计数
CLI ;开放中断
;---------------------初始化结束-------------------------------------
*========主循环开始处=======================================================
MainLoop:
NOP ;仅为实验例程,无其它事务处理
JMP MainLoop ;转总循环
*------以下为子程序存放处----------------------------------------
*----系统初始化子程序(Init0)----------------------------------*
*功能:系统初始化 *
*入口:无 *
*出口: *
*占用CPU内寄存器:A *
*-------------------------------------------------------------*
Init0: ;系统初始化Init0子程序
LDA #%00000001 ;初始化CONFIG2
STA $001E
LDA #%00111101 ;初始化CONFIG1
STA $001F
CLR $0036 ;初始化PTCL
MOV #$01,$0036
MOV #$01,$0038
MOV #$2C,$0039
MOV #$80,$003A
BSET 5,$0036
BSET 7,$0037
BSET 4,$0036
RTS
*-----定时器1通道0输入捕捉中断子程序(Timer1CH0In)-------------*
*功能:定时器输入捕捉中断处理,取反指示灯 *
*入口:无 *
*出口: *
*占用CPU内寄存器:HX,A *
*-------------------------------------------------------------*
Timer1CH0In:
PSHH ;保护 H 寄存器
;至此,可读取计数器的值,可在此处添加用户的程序
;本程序仅为实验例程,用指示等状态改变,说明发生了中断
BRCLR 1,PTA,PTA1Set ;指示灯状态变换,若原来是亮,则转变暗处理
BCLR 1,PTA
BRA PTA1Clr
PTA1Set:
BSET 1,PTA ;将灯变暗
PTA1Clr:
LDA T1SC0 ;清除定时器1通道0输入捕捉中断标志位
BCLR 7,T1SC0
PULH ;释放 H 寄存器
RTI
*----------向量区-----------------------------------------------------------
ORG $FFF6 ;定时器1通道0输入捕捉中断向量
DW Timer1CH0In
ORG $FFFE ;复位向量
DW MainInit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -