16F870单片机的中断应用程序

发布者:GoldenSunrise最新更新时间:2011-02-24 手机看文章 扫描二维码
随时随地手机看文章
; Filename: WK_PCHG.asm *
; Date: Mar/13/2001 *

;**********************************************************************
list p=16f870
#include

; __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF


FLAG EQU 0x20
Var1 EQU 0x21
Var2 EQU 0x22

INT_Var1 EQU 0x30
INT_Var2 EQU 0x31

W_Temp EQU 0x72
STATUS_Temp EQU 0x73
FSR_Temp EQU 0x74

#define VAL_1MS .248

#define FLAG_INC 0
#define FLAG_DEC 1


org 0x00 ; RESET  0x000
nop
clrf PCLATH
goto Main

org 0x004
INT_ISRs
;***************************************************************
movwf W_Temp ; save off current W register contents
movf STATUS,W ; move status register into W register
bcf STATUS,RP0 ; ensure file register bank set to 0
movwf STATUS_Temp ; save off contents of STATUS register
movf FSR,W
movwf FSR_Temp

BANKSEL PORTB
movf PORTB,W
bcf INTCON,RBIF
bcf INTCON,RBIE ; RBIE Disable

call Bounce_Delay

btfsc PORTB,4
goto Check_DEC_KEY

bsf FLAG,FLAG_INC ; FLAG_INC  1
goto Exit_ISRs

Check_DEC_KEY
btfss PORTB,5
bsf FLAG,FLAG_DEC

Exit_ISRs
movf FSR_Temp,W
movwf FSR
bcf STATUS,RP0 ; ensure file register bank set to 0
movf STATUS_Temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf W_Temp,F
swapf W_Temp,W ; restore pre-isr W register contents
retfie ; return from interrupt

;******************************************************************************
;**** Delay 10 ms 
;******************************************************************************
Bounce_Delay
movlw .10
movwf INT_Var1

Bounce_Loop1
movlw .248
movwf INT_Var2
Bounce_Loop2
nop
decfsz INT_Var2,F
goto Bounce_Loop2
decfsz INT_Var1,F
goto Bounce_Loop1
return

******************************************
Main

BANKSEL TRISB
movlw B'11110000'
movwf TRISB ; RB4..RB7
clrf TRISC
movlw B'00000000' ; Enable PORTB  Pull UP
movwf OPTION_REG

BANKSEL PORTB
movlw B'11111111'
movwf PORTB
clrf PORTC

bsf INTCON,GIE
clrf FLAG
bsf FLAG,FLAG_INC

Prog_Loop
btfss FLAG,FLAG_INC
goto Dec_Process

Inc_Process
call Delay_50ms
incfsz PORTC,F
goto Inc_Process
goto SLEEP_Process

Dec_Process
call Delay_50ms
decfsz PORTC,F
goto Dec_Process

SLEEP_Process
clrf PORTC
clrf FLAG
movf PORTB,W
bcf INTCON,RBIF
bsf INTCON,RBIE
SLEEP
nop
nop
goto Prog_Loop


;****************************************************************************
;**** Delay 50ms 
;****************************************************************************
Delay_50ms
movlw .50
movwf Var2
Delay_200ms_Loop
call Delay_1ms
decfsz Var2,F
goto Delay_200ms_Loop
return

;****************************************************************************
;**** Delay 1ms 
;****************************************************************************
Delay_1ms
nop
nop
nop
movlw VAL_1MS
movwf Var1
Delay_1ms_Loop nop
decfsz Var1,F
goto Delay_1ms_Loop
return


END


引用地址:16F870单片机的中断应用程序

上一篇:16C84单片机的RB口中断程序
下一篇:PIC单片机的I2C应用程序1

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved