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

发布者:温柔心绪最新更新时间:2015-01-07 来源: 51hei关键字:pic单片机  定时器中断  闪灯实验 手机看文章 扫描二维码
随时随地手机看文章

1.  实验目的

学习如何使用中断

2.  任务要求

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

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

睡眠唤醒

3.  实验器材

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

4.  实验方案

图 1 硬件设计图

 

 

 

 

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

 


图 3电平变化中断流程图

 

图 4 睡眠唤醒流程图

5.  实验现象分析

基础实验部分

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

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

电平变化中断实验:

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

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

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

 

 

附:

定时器中断代码:

#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标志程序执行,用于判断程序是否被重复执行

 

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,显示是否进入休眠

 

SLEEP

NOP

GOTO loop

 

END

关键字:pic单片机  定时器中断  闪灯实验 引用地址:pic单片机采用定时器中断的闪灯实验报告

上一篇:微控制器和超声波在倒车系统中的应用
下一篇:PIC单片机定时器初值计算方法及几种周期小结

推荐阅读最新更新时间:2024-03-16 13:50

PIC单片机实现AD转换的设计方案
pic单片机功能较强,现实中的诸多器件均可借助pic单片机完成。由此可见,pic单片机的使用意义较大。关注本网站的朋友都知道,小编曾带来诸多pic单片机相关文章。如果你对pic单片机比较感兴趣,可在阅读完本文后翻阅往期文章。本文对于pic单片机的讲解,将为大家带来pic单片机的AD转换实例,一起来了解下吧。 AD转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号。主要包括积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转
[单片机]
<font color='red'>PIC单片机</font>实现AD转换的设计方案
S3C2440 开发板实战(5):定时器中断
一、定时器大体结构 查看芯片手册,可以找到以下定时器结构框图 从做到右看,对该图进行分析:(不考虑) Prescaler:定时器0和1共享一个8位分频器,而定时器2、3、4共享另一个8位分频器。分频器将输入的PCLK分频为:PCLK/(prescaler+1)。 Clock divider & MUX:每个定时器有一个时钟分频器,它产生5个不同的分频信号(1/2,1/4,1/8,1/16,和TCLK)。每个定时器块从时钟分频器接收自己的时钟信号,时钟分频器从相应的8位分频器接收时钟。8位分频器是可编程的,根据加载值对PCLK进行划分,存储在TCFG0和TCFG1寄存器中。此时定时器的时钟频率为:Timer input
[单片机]
S3C2440 开发板实战(5):<font color='red'>定时器</font><font color='red'>中断</font>
stm32单片机与pic单片机的优缺点对比分析
stm32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名其强大的功能主要表现在: stm32单片机特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/
[单片机]
stm32单片机与<font color='red'>pic单片机</font>的优缺点对比分析
PIC单片机以及51单片机和AVR单片机的IO口操作方法介绍
对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,以在pic单片机的学习之路上更为精进。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量,
[单片机]
<font color='red'>PIC单片机</font>以及51单片机和AVR单片机的IO口操作方法介绍
PIC单片机对9346EEPROM数据的读写
实验目的:熟悉SPI总线以及9346EEPROM的读写 ;RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内, ;完成后,单个数码观显示“9”做为完成标志 ;RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示 ;硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。 LIST P=16F877A, R=DEC include “P16F877A.inc” ;包含头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWR TE _ON&_WDT_OFF&_HS_OSC
[单片机]
<font color='red'>PIC单片机</font>对9346EEPROM数据的读写
PIC单片机AD中断调试(无数字滤波)
PIC单片机AD转换的中断调试程序如下(无数字滤波): #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); const uchar disp ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint adval; float advalf; uchar flag; void delayms(uint x) { uint j,k; for(j=x;j 0;j--) for(k=110;k 0;k--); } void display(u
[单片机]
PIC单片机ADC的编程设计
#include __CONFIG(0X1F71); #define uchar unsigned char #define uint unsigned int const uchar Tab[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; const uchar Tab1[]= {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的代码 void DisPlay(uchar date1,uchar date2,uchar date3,uchar date4); void DelayMS(uint
[单片机]
<font color='red'>PIC单片机</font>ADC的编程设计
PIC单片机在线编程调试中的一些问题
1 在线串行编程   1.1在线串行编程接口   带有Flash闪速存储器的PIC单片机产品一般都具有在线串行编程功能,只需要5根引线就可以把程序下载到单片机的Flash程序存储器中。这5根线的排列顺序是MCLR/Vpp、Vdd、Vss、PD(或PGD)和PC(或PGC),图1是PIC单片机在线串行编程接口图。              图1PIC单片机在线串行编程接口   1.2引脚含义   上述5根引线的具体含义是:MCLR/Vpp——编程电压(对于PIC单片机一般为13 V左右);Vdd——编程电源(5 V);Vss——地;PD——编程数据信号;PC——编程时钟信号。   有了这个编程连接电路,
[单片机]
<font color='red'>PIC单片机</font>在线编程调试中的一些问题
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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