1. <em id="3qmea"><ol id="3qmea"></ol></em>
    2. <em id="3qmea"></em>
      (玩电子) 电子技术学习与研究
      当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

      pic单片机采用定时器中断的闪灯实验报告

      作者:未知   来源:互联网   点击数:x  更新时间:2014年08月15日   【字体:

      上接:实验目的

      学习如何使用中断

      2.  任务要求

      用定时器中断方式完成闪灯实验

      设计验证外部边沿中断/电平变化中断

      睡眠唤醒

      3.  实验器材

      单片机PIC16F886一片、LED灯一只、电阻任选、下载器(及相关的线)一个

      4.  实验方案

      图 1 硬件设计图

       

       

       

       

      图 2 定时器中断软件流程图

       


      图 3电平变化中断流程图

       

      图 4 睡眠唤醒流程图

      5.  实验现象分析

      基础实验部分

      仿真模拟,在反转PORTA代码部分加上断点,用STOP WATCH 观察两次运行至断点所需的时间,

       

      然后下载至芯片,LED灯闪动正常。

      电平变化中断实验:

      使用PORTBRB5作为输入端口,RB5电平变化时,RA端口上的灯闪烁4次,从头到尾RC端上的灯只有亮一种状态

      睡眠唤醒实验:触发一?#20301;?#37266;,RA端灯亮灭四次,RC3改变一次状态。

      做电平变化中断和睡眠唤醒实验时遇到两个问题:1.电平变化中断标志位清零前没有对PORTB执行读写操作,导致清除无效;1DELAY函数写在中断内部,总是提前RETURN破坏了现场且多执行了DELAY操作。

       

       

      附:

      定时器中断代码:

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0X04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保存现场

      BANKSEL INTCON

      BCF INTCON,2 ;;;;;;;;;;;;;清除TMR0中断标志位

      BANKSEL PORTA

      COMF PORTA,1 ;;;;;;;;;;;;;;PORTA翻转

      BANKSEL TMR0

      MOVLW B'00001111' ;;;;;;;;;;;;;;TMR0预置数

      MOVWF TMR0

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢复现场

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

      MAIN

      MOVLW B'00001111'

      MOVWF TMR0 ;;;;;;;;;;;;;;;;;;;;;;;TMR0预置数

      BANKSEL OPTION_REG

      MOVLW B'000011'

      MOVWF OPTION_REG ;;;;;;;;;;;;;;;;;;;;;TMR0设置为16分频

       

      BANKSEL INTCON

      BSF INTCON,GIE

      BSF INTCON,T0IE ;;;;;;;;;;;;;;;;;;;;;总中断使能,TMR0中断使能

      ;;;;;;;;;

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON ;;;;;;;;;;;;;;;;;;;;;;振荡器设置为310KHz,内部振荡器

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA;

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA ;;;;;;;;;;;;;;;;;;;;;设置PORTA为输出

      LP

      NOP

      GOTO LP

      END

       

      外部中断代码

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

      LP0 RES 1

      LP1 RES 1

      TIMES RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0x04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保护现场

      BANKSEL PORTB

      BSF PORTB,4

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PORTB,清除中断标志位

      MOVLW D'4'

      MOVWF TIMES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置亮灯次数为4

      MM COMF PORTA,F

      CALL DELAY

      COMF PORTA,F

      CALL DELAY

      DECFSZ TIMES,F

      GOTO MM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;闪烁4

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢复现场

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

       

      DELAY 

      MOVLW 01FH

      MOVWF LP0

      L0 MOVLW 01FH

      MOVWF LP1

      L1 DECFSZ LP1,F

      GOTO L1

      DECFSZ LP0,F

      GOTO L0

      RETURN

       

      MAIN

       

      BANKSEL TRISC

      MOVLW B'11110111'

      MOVWF TRISC

      BANKSEL PORTC

      MOVLW B'00001000'

      XORWF PORTC,F;;;;;;;;;;;;;;;;;;;;;;

      ;;;;;;;;;;;;;;;;;;;;;;设置RC3标志程序执行,用于判断程序是否?#24674;?#22797;执行

       

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;清除中断标志位

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置振荡器频率31KHz

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA;BANK1

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置PORTA为输出

       

      BANKSEL INTCON

      MOVLW B'11011000'

      MOVWF INTCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;使能电平变化中断

       

      BANKSEL OPTION_REG

      MOVLW B'01010000'

      MOVWF OPTION_REG;;;;;;;;;;;;;;;;;;;;;;;;;;;使能PORTB上拉

       

      BANKSEL PORTB

      CLRF PORTB

      BANKSEL TRISB

      MOVLW B'00100000'

      MOVWF TRISB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置RB5为输入

      BANKSEL ANSELH

      CLRF ANSELH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置模拟输入模式为0

      BANKSEL IOCB

      MOVLW B'00100000'

      MOVWF IOCB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;允许PORTB5电平变化使能

       

      LOOP

      GOTO LOOP

       

      END

      睡眠唤醒代码:

      #INCLUDE p16f886.inc  

      __config _CONFIG1, _WDT_OFF

       

      CONTEXT_SAVING UDATA_SHR

      W_TMP RES 1

      S_TMP RES 1

      LP0 RES 1

      LP1 RES 1

      TIMES RES 1

       

      RESET CODE 0x0

      PAGESEL MAIN

      GOTO MAIN

       

      ISR CODE 0x04

      MOVWF W_TMP

      SWAPF STATUS,W

      MOVWF S_TMP

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以上保护现场

      BANKSEL PORTB

      BSF PORTB,4

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;PORTB并清除中断标志位

      MOVLW D'4'

      MOVWF TIMES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置亮灯次数4

      MM COMF PORTA,F

      CALL DELAY

      COMF PORTA,F

      CALL DELAY

      DECFSZ TIMES,F

      GOTO MM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;灯闪烁四次

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下恢复现场

      SWAPF S_TMP,W

      MOVWF STATUS

      SWAPF W_TMP,F

      SWAPF W_TMP,W

      RETFIE

       

      CODE

       

      DELAY 

      MOVLW 01FH

      MOVWF LP0

      L0 MOVLW 01FH

      MOVWF LP1

      L1 DECFSZ LP1,F

      GOTO L1

      DECFSZ LP0,F

      GOTO L0

      RETURN

       

      MAIN

      BANKSEL INTCON

      BCF INTCON,RBIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清除中断标志位

       

      BANKSEL OSCCON

      MOVLW B'00000011'

      MOVWF OSCCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置振荡器31KHz

       

      BANKSEL ANSEL

      CLRF ANSEL

      BANKSEL TRISA

      MOVLW B'00000000'

      MOVWF TRISA

      BANKSEL PORTA

      CLRF PORTA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置PORTA输出

       

      BANKSEL INTCON

      MOVLW B'11011000'

      MOVWF INTCON;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;使能总中断使能和电平变化中断使能

       

      BANKSEL OPTION_REG

      MOVLW B'01010000'

      MOVWF OPTION_REG;;;;;;;;;;;;;;;;;;;;;;;;

       

      BANKSEL PORTB

      CLRF PORTB

      BANKSEL TRISB

      MOVLW B'00100000'

      MOVWF TRISB

      BANKSEL ANSELH

      CLRF ANSELH

      BANKSEL IOCB

      MOVLW B'00100000'

      MOVWF IOCB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置PORTB5电平变化中断使能

       

      BANKSEL PORTC

      MOVLW B'11110111'

      BANKSEL TRISC

      CLRF TRISC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置PORTC3为输出

       

      loop 

      BANKSEL PORTC

      MOVLW B'00001000'

      XORWF PORTC,F

      CALL DELAY;;;;;;;;;;;;;;;;;;;;;;RC3改变一次状态,执行一次SLEEP,?#20801;?#26159;否进入休眠

       

      SLEEP

      NOP

      GOTO loop

       

      END

       

      下一篇:  pic单片机走马灯动态?#20801;?#23454;验报告

      发表评论】【告诉好友】【收藏此文】【关闭窗口

      文章评论

      青海11选5app下载

        
        
        1. <em id="3qmea"><ol id="3qmea"></ol></em>
        2. <em id="3qmea"></em>

            
            
            1. <em id="3qmea"><ol id="3qmea"></ol></em>
            2. <em id="3qmea"></em>
              香港六合彩管家婆 3D大奖 福建福彩快三遗漏及 球探足球比分 彩票网站怎么建立 快乐三张牌新版下载 山西体彩十一选五爱彩乐 可以领彩金的彩票网站 河北11选5官网 幸运飞艇计划 论坛 彩票极速赛车规律破解 竞咪21贴吧 今晚31选7开奖结果几点开奖 篮球比分交流群959444 四川金7乐玩法介绍