输入捕捉中断编程实例

阅读: 评论:0

下面程序验证定时器1通道0(引脚21)输入捕捉中断的产生,当中断发生时取反指示灯PTA1。定时器1通道0的输入捕捉中断向量的地址是$FFF6
1)输入捕捉中断编程实例C语言主程序
实例编号:C05_2 路径:\C\C05_2定时器输入捕捉(tim1ch0.prj)
/*-----------------------------------------------------*
*文件名:Tim1Ch0I.prj                                  *
*硬件接线:1:PTA.1接指示灯                              *
*        2:PTD.4,即定时器1通道0(21),接开关              *
*程序描述:以输入捕捉中断方式,                          *
*        开关拨动使捕捉中断取反指示灯PTA1,使其闪动        *
*目的:学习HC08系列定时器溢出捕捉功能                  *
*说明:本例是将定时器1通道0(21)设为"跳变沿捕捉"      *
*    (即电平发生变化时产生中断),验证方法是将21脚不          *
*    断接高电平、低电平,此时指示灯PTA1状态跟随改变      *
*---------《嵌入式应用技术基础教程》教学实例----------*/
#include "GP32C.h"
#define Light_P  PTA      //(Light)接在PTA
#define Light_D  DDRA    //相应的方向寄存器
#define Light_Pin  1        //所在的引脚
#define CH0FBit    7      //定时器1通道标志位
/*函数声明*/
void SetTim1Ch0I(void);    //定时器1和定时器1通道0初始化
void main()
{
      asm("SEI");          //禁止所有中断
    //[I/O初始化]
    Light_D|=1<<Light_Pin;    //令指示灯引脚为输出
    Light_P|=1<<Light_Pin;    //初始时,指示灯""
    //[定时器1和定时器1通道0初始化]
    SetTim1Ch0I();     
    asm("CLI");              //开放中断
    //[主循环开始,为空操作]
    //[等待输入捕捉中断,(开关的拨动)]
    while(1);
}
/*SetTim1Ch0I:定时器1和定时器1通道0 初始化-------------*
* 功能:初始化定时器1和定时器1通道0                *
* 参数:                                            *
* 返回:                                            *
*-----------------------------------------------------*/
void SetTim1Ch0I()
{
  T1SC=0bchevy volt00110000;    //不允许溢出中断、不启动计数、分频因子=1
  T1SC0=0b01001100;    //允许CH0输入捕捉中断,跳变沿捕捉
  T1SC&=~(1<<5);        //允许定时器1计数寄存器计数 
}
2)输入捕捉中断编程实例C语言矢量表文件
输入捕捉中断编程C语言程序例矢量表文件(vectors08.c)
#include "GP32C.h"
/*[引脚定义]*/
#define Light_P  PTA      //(Light)接在PTA
#define Light_D  DDRA    //相应的方向寄存器
#define Light_Pin  1        //所在的引脚
#define CH0FBit    7      //定时器1通道标志位
// vectors08.c 用于定义中断矢量表
/*isrTim1Ch0I:输入捕捉中断处理函数---------------------*
*  : 当前灯的状态                                  *
*-----------------------------------------------------*/
#pragma interrupt_handler isrTim1Ch0I
void isrTim1Ch0I(void)
  {
    unsigned char temp=Light_P; 
    temp&=1<<Light_Pin;    //取得当前灯的状态
    if(temp!=0)              //原来指示灯"",则变""
      Light_P&=1<<Light_Pin; 
    else                    //原来指示灯"",则变""
      Light_P|=1<<Light_Pin;
    T1SC0&=~(1<<CH0FBit);      //清除定时器溢出标志位 
}
王冶平简历#pragma interrupt_handler isrDummy
void isrDummy(void)
{ }
//中断矢量表,如果需要定义其它中断函数,
//请修改下表中的相应项目
#pragma abs_address:0xffdc
void (* const _vectab[])(void) = {
    isrDummy,                //Timebase
    isrDummy,                //ADC     
    isrDummy,              //KBI       
    isrDummy,                //SCI TC/TE   
    isrDummy,                //SCI RF/IDLE 
    isrDummy,                //SCI PE/FE/NF/OR
    isrDummy,                //SPI TE       
    isrDummy,                //SPI MOD/OVR/RF
    isrDummy,                //TIM2 OVR     
    isrDummy,                //TIM2 channel 1
    isrDummy,                //TIM2 channel 0
    isrDummy,                //TIM1 OVR     
    isrDummy,                //TIM1 channel 1   
    isrTim1Ch0I,            //TIM1 channel 0   
    isrDummy,                //CGM             
    isrDummy,                //IRQ             
    isrDummy                //SWI         
/*    RESET也是中断,定义在 crt08.o */
    };
#pragma end_abs_address
3)输入捕捉中断编程实例汇编语言程序
实例编号:A05_2 路径:\ASM\ A05_2定时器输入捕捉(Ch0main.asm)
*------------------------------------------------------*
* :Tim1Ch0.ASM                                  *
*硬件接线:1:PTA.1接指示灯                              *
*        2:PTD.4,即定时器1通道0(21)接开关          *
*程序描述:输入捕捉中断方式,使开关拨动时指示灯PTA.1闪烁 *
*    :学习HC08系列定时器输入捕捉功能              *
*    :本例是将定时器1通道0(21)设为"跳变沿捕捉"  *
*---------《嵌入式应用技术基础教程》教学实例-----------*
*[头文件]
$include "GP32ASM.H"        ;包含GP32的头文件
*[两个起始地址名]
RAMstartAddr  equ  $0040    ;RAM的起始地址
FlashStartAddr equ  $8000      ;程序开始地址
*[指示灯定义]
Light_P    equ  PTA        ;(Light)接在PTA
Light_D    equ  DDRA      ;相应的方向寄存器
Light_Pin  equ  1            ;所在的引脚
CH0FBit    equ  7          ;定时器联通cdma1通道标志位
*======================================================*
*[主程序]
      org  FlashStartAddr    ;程序起始地址
MainInit:                    ;复位后程序从此开始执行
    ;[系统初始化]
    SEI                    ;关总中断
    LDHX #$023F            ;堆栈初始化
    TXS
    JSR  GP32Init          ;调系统初始化子程序GP32Init
    ;[I/O初始化]
    BSET Light_Pin,Light_D  ;令指示灯引脚为输出
    BSET Light_Pin,Light_P    ;初始时,指示灯"
    ;[定时器1通道0初始化]
    ;[不允许溢出中断、不启动计数、分频因子=1]
    LDA  #%00110000       
    STA  T1SC
    ;[输入捕捉模式,允许输入捕捉中断,跳变沿捕捉
    LDA  #%01001100                         
    STA  T1SC0
    ;[允许定时器1计数寄存器计数]           
    BCLR 5,T1SC               
  CLI                        ;开总中断
    ;[主循环开始]
MainLoop:               
    NOP                     
    JMP  MainLoop         
*[内部直接调用子程序存放处]
*Tim1CH0Int:定时器1通道0输入捕捉中断子程序-------------*
*功能:定时器输入捕捉中断处理,开关拨动时指示灯PTA.1闪烁 *
*入口:                                              *
*出口:                                              *
*------------------------------------------------------*
Tim1CH0Int:   
PSHH                    ;保护 H
    ;[至此,可读取计数器的值,可在此处添加用户的程序.本程
    ;序仅为实验例程,用指示等状态改变,说明发生了中断]
    ;指示灯状态变换
    BRCLR Light_Pin,Light_P,Tim1CH0Int_1         
    BCLR  Light_Pin,Light_P    ;若原来灯暗,则变亮
    BRA  Tim1CH0Int_2
Tim1CH0Int_1:
    BSET  Light_Pin,Light_P    ;若原来灯亮,则转暗
Tim1CH0Int_2:
    ;清除定时器1通道0输入捕捉中断标志位
再现辉煌
    LDA  T1SC0   
    BCLR CH0FBit,T1SC0           
    PULH                      ;恢复H
  RTI
*[外部子程序存放处]
决战朝鲜攻略
$include "GP32Init.ASM"
*[中断向量南通宽频]
    ORG  $FFF6              ;定时器1通道0输入捕捉中断向量
    DW  Tim1CH0Int
    ORG  $FFFE              ;复位向量
    DW  MainInit

本文发布于:2023-07-05 13:43:09,感谢您对本站的认可!

本文链接:https://patent.en369.cn/xueshu/173571.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   捕捉   输入   程序   实例   指示灯
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图