原创 PIC单片机RB0/INT引脚中断功能详述

2009-3-11 18:58 7480 9 9 分类: MCU/ 嵌入式

基本上所有中档以上的PIC单片机,其PORTB的RB0引脚都可以作为一个外部中断信号输入,可以对输入信号的上升沿或者下降沿产生一个中断响应,该功能同时可以实现唤醒睡眠状态的单片机。


一个小小的例子来说明一下PORTB的RB0口的外部中断功能。



list  p=16f73,r=dec


#include <p16f73.inc> 


__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC


;**********************************************************
;用户寄存器定义
;********************************************************** 
w_temp   equ  0x20
status_temp  equ  0x21
pch_temp  equ     0x22
fsr_temp  equ  0x23  
count   equ     0x24


    org  0000h
    nop
    goto    main
    org  0004h
    goto Int_Ask
;**********************************************************
;主程序
;**********************************************************    
main   clrf PORTA
          clrf PORTB
         bcf  STATUS,RP1
         bsf  STATUS,RP0   ;bank1
         movlw 0x00
         movwf TRISA
         movwf TRISB
         call RB0_Int_Init
loop   goto loop
;**********************************************************
;RB0/INT引脚中断初始化
;**********************************************************
RB0_Int_Init bsf  TRISB,0    ;RB0为输入状态
    bcf  OPTION_REG,INTEDG ;OPTION_REG寄存器也位于bank0,选择下降沿中断有效
    bcf  OPTION_REG,NOT_RBPU ;选择使用PORTB内部弱上拉
    clrf INTCON    ;INTCON寄存器全部数据位清0
    bsf  INTCON,INTE   ;允许RB0/INT中断
    bsf  INTCON,GIE   ;打开全局中断使能位
    return


;**********************************************************
;中断源查询程序
;**********************************************************  
Int_Ask
Tmr0_Int_Ask btfss INTCON,T0IE   ;TMR0中断使能标志T0IE是否为1
    goto RB0_Int_Ask   ;T0IE=0,说明不是TMR0中断,转而执行判断是否为RB0/INT中断
    btfsc INTCON,T0IF   ;判断是否为TMR0产生的中断
    goto  Tmr0_Int_Start  ;是,跳转到TMR0的中断服务
RB0_Int_Ask  btfsc INTCON,INTF   ;判断是否为RB0/INT中断
    goto RB0_Int_Start  ;是,跳转到RB0/INT中断服务


   ......................;加其他中断源的查询
;**********************************************************
;RB0/INT中断服务程序    
;**********************************************************
;中断现场保护程序
RB0_Int_Start movwf w_temp    ;W寄存器的内容复制到备份寄存器中
    movf STATUS,w   ;交换前后4位后存入W寄存器中
    clrf STATUS    ;清除STATUS状态寄存器
    movwf status_temp   ;将W寄存器中的数据复制到status_temp中
    movf PCLATH,w   ;将PCLATH中的数据传送给W寄存器中
    movwf pch_temp   ;将PCLATH中的数据经W寄存器保存到其备份单元
    movf FSR,w    ;将FSR寄存器中的内容传送至W寄存器
    movwf fsr_temp   ;通过W,将FSR当中的数据存入FSR_TEMP当中


;**********************************************************
;RB0/INT中断处理程序 
RB0_Int_Del  bcf  INTCON,INTF      ;清INTF标志位
                       ..........................加自己的代码


;**********************************************************
;中断现场恢复程序
RB0_Int_Exit movf fsr_temp,w   ;取出FSR保护的内容
    movwf FSR     ;恢复FSR的内容
    movf pch_temp,w   ;取出PCLATH保护的内容
    movwf PCLATH    ;恢复PCLATH
    movf status_temp,w  ;取出STATUS保护的内容
    movwf STATUS    ;恢复STATUS
    swapf w_temp,f   ;先把w_temp内容高低半字节交换一次
    swapf w_temp,w   ;再把w_temp内容高低半字节交换一次,结果存入W
    
    retfie


Tmr0_Int_Start


...............................加自己代码


    end

文章评论0条评论)

登录后参与讨论
相关推荐阅读
alexlove2003_360056471 2010-10-31 20:35
【大学电子类专业】【经典书籍和课本】【推荐下载】【地址汇总】
一级学科 电子科学与技术(0809) 主要包括有以下几个二级学科:物理电子学                     080901电路与系统                     080902微电子...
alexlove2003_360056471 2010-10-31 20:31
【初学者必知必会】【电子技术:数电 模电 单片机】【基础概念和小知识点】详解
电阻相关:; Z- D" M( X2 V, X9 n1、上拉电阻和下拉电阻的总结~~权威版倾情奉献 http://www.dzcny.com/thread-1138-1-1.html2、上拉电阻、下拉...
alexlove2003_360056471 2010-03-23 22:30
【电子菜鸟园】【电子类软件】【图文安装原创教程】下载地址汇总
【原创】Altium.Designer 6.6(Protel DXP)图文安装教程:http://www.dzcny.com/thread-525-1-1.html【原创】NI的Multisim和Ul...
alexlove2003_360056471 2010-03-23 22:26
欢迎访问电子菜鸟论坛
最近跟朋友们一起弄了个电子技术论坛 名叫 电子菜鸟园 在里面会共享电子方面的一些资料 我们在工作中的一些技术交流希望大家多多支持 !论坛地址   http://www.dzcny.com/      ...
alexlove2003_360056471 2010-03-23 22:25
电子菜鸟园免费赠送USB转串口PCB活动开始了!
电子菜鸟园免费赠送USB转串口PCB活动开始了!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"...
alexlove2003_360056471 2010-03-23 22:24
【电子菜鸟园】【日本欧姆社电子学入门丛书】【下载地址】【汇总】
电子菜鸟园收藏整理的OHM日本欧姆社的电子学入门系列丛书,特别分享给大家!欢迎访问下载。《图解电子电路》http://www.dzcny.com/thread-595-1-1.html《图解运算放大器...
我要评论
0
9
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条