⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tim1ch0i.asm

📁 本例是将定时器1通道0(21脚)设为"跳变沿捕捉"(即电平发生变化时产生中断), 验证方法是将21脚不断接高电平、低电平
💻 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 + -