单片机实验四
来源:互联网 发布:sat 句子合并 知乎 编辑:程序博客网 时间:2024/05/29 17:23
1、实验内容一
1.1、问题一:
设实验连线如图4-1所示,P1口与J9(发光二极管)相连,将一个独立按键接到外部中断0(或1)。
(1)、将外部中断0设为边沿触发,设定初值为发光二极管偶数管亮,分别按下和按住独立按键,实现P1口电平取反,观察二极管点亮现象。
(2)、将外部中断0设为电平触发,设定初值为发光二极管偶数管亮,分别按下和按住独立按键,观察现象,并与上例比较,理解外部中断在边沿触发和电平触发下的不同。
(3)、编程实现无中断时,8位发光二极管常亮,有外部中断时8位二极管从低至高依次循环点亮一遍后恢复常亮状态。
1.2、问题一的代码
问题(1)的C语言代码如下:
#include <reg51.h>#include <absacc.h>int i = 0;void delay();void main(){ EA = 1; EX0 = 1; IT0 = 1; P1 = 0x55; while (1) { }}void int0() interrupt 0{ P1 = ~P1; delay();}void delay() { int x,y; for(x=100;x>0;x--) for(y=625;y>0;y--);}
问题(2)的C语言代码如下:
#include <reg51.h>#include <absacc.h>int i = 0;void delay();void main(){ EA = 1; EX0 = 1; IT0 = 0; P1 = 0x55; while (1) { }}void int0() interrupt 0{ P1 = ~P1; delay();}void delay() { int x,y; for(x=100;x>0;x--) for(y=625;y>0;y--);}
问题(3)的C语言代码如下:
#include <reg51.h>#include <absacc.h>#include <intrins.h>int i;char temp;void delay();void main(){ EA = 1; EX0 = 1; IT0 = 0; P1 = 0; while (1) { }}void int0() interrupt 0{ i = 0; temp = 0xFE; while (i < 9) { P1 = temp; delay(); temp = _crol_(temp,1); i++; }}void delay() { int x,y; for(x=200;x>0;x--) for(y=625;y>0;y--);}
1.3、问题一的结果和现象:
问题(1)的结果和现象:
当按下独立按键时,偶数位灯亮转变为奇数灯亮,再按下奇数灯亮变为偶数灯亮,依次循环(在实际操作中因为在低电平时会有震荡,会造成在实际过程中可能会有两次下降沿)。当按住独立按键的时候,每次按住跳变一次,依次循环(在实际操作中可能仍会有下降沿的影响,但是下降沿的时间较短,看不出差异)。
问题(2)的结果和现象:
当按下独立按键时,偶数位灯亮转变为奇数灯亮,再按下奇数灯亮变为偶数灯亮,依次循环(在实际操作中因为在低电平时会有震荡,会造成在实际过程中可能会有多次转变)。当按住独立按键时,大约每经过0.5s进行一次转变一次。
问题(3)的结果和现象:
当不按下独立按键时,8位发光二极管常亮,当按下独立按键时,8位二极管从低至高依次循环点亮一遍后恢复常亮状态。
2、实验内容二
2.1、问题二:
设将P1口与J9(发光二极管)相连,将两个独立按键分别接到外部中断0和1,连线如图4-2所示 。
(1)、编程实现无中断时,发光二极管常亮,有外部中断时8位二极管依次从K1-K8点亮一遍,有外部中断时8位二极管依次从K8-K1点亮一遍。
(2)、验证中断查询的自然优先顺序(给出验证方法及结果)。
(3)、通过IP寄存器设置优先级,验证中断的两个优先级结构(给出验证方法及结果)。
2.2、问题二的代码:
问题(1)的C语言代码如下:
#include <reg51.h>#include <absacc.h>#include <intrins.h>int i;int j;char temp;void delay();void main(){ EA = 1; EX0 = 1; IT0 = 0; EX1 = 1; IT1 = 0; P1 = 0; while (1) { P1 = 0; }}void int0() interrupt 0{ i = 0; temp = 0xFE; while (i < 8) { P1 = temp; delay(); temp = _crol_(temp,1); i++; }}void int1() interrupt 2{ j = 0; temp = 0x7F; while (j < 8) { P1 = temp; delay(); temp = _cror_(temp,1); j++; }}void delay() { int x,y; for(x=100;x>0;x--) for(y=625;y>0;y--);}
问题(2)的C语言代码如下:
如问题(1)代码。
问题(3)的C语言代码如下:
#include <reg51.h>#include <absacc.h>#include <intrins.h>char temp,temp1;void delay();void delay1();void main(){ EA = 1; EX0 = 1; IT0 = 0; EX1 = 1; IT1 = 0; P1 = 0; PX1 = 1; while (1) { P1 = 0; }}void int0() interrupt 0{ int i = 0; temp = 0xFE; while (i < 8) { P1 = temp; delay(); temp = _crol_(temp,1); i++; }}void int1() interrupt 2{ int j = 0; temp1 = 0x7F; while (j < 8) { P1 = temp1; delay1(); temp1 = _cror_(temp1,1); j++; }}void delay() { int x,y; for(x=100;x>0;x--) for(y=625;y>0;y--);}void delay1() { int x,y; for(x=100;x>0;x--) for(y=625;y>0;y--);}
2.3、问题二的实验结果和现象:
问题(1)的实验现象:
当按下外部中断0对应的独立按键时,8位二极管依次从K1-K8点亮一遍; 当按下外部中断1对应的独立按键时,8位二极管依次从K8-K1点亮一遍;两者之间不能互相打断。
问题(2)的实验方法和实验现象:
同时按下外部中断0对应得独立按键和外部中断1对应得独立按键时,单片机运行外部中断0对应的程序,即8位二极管依次从K1-K8点亮一遍。说明当为自然优先级时,同时来临两个中断,相应自然优先级高的中断。
问题(3)的实验方法和实验现象:
前提条件为外部中断1设置了高优先级,实验结果如表4-1:
表4-1 验证中断的两个优先级结构
实验操作方式 同时按下两个外部中断对应的独立按键 先按下外部中断0对应的独立按键,在未执行完该中断时,按下外部中断1对应的独立按键 先按下外部中断1对应的独立按键,在未执行完该中断时,按下外部中断0对应的独立按键
实验现象 单片机相应外部中断1对应的程序 单片机首先相应外部中断0对应的程序,当按下独立按键1时,相应外部中断1对应的程序,而后返回到外部中断1相应前的状态继续实现。 单片机运行一次外部中断1对应的程序后恢复常亮,不执行外部中断0对应的程序。
3、实验内容三
3.1、问题三:
如图4-3-1、图4-3-2和图4-3-3为八段数码管的原理图将P1口连至单个共阳数码管(J6),将两个独立按键分别接到外部中断0和外部中断1。编程实现有外部中断时显示数字加1,有外部中断时显示数字减1。
3.2、问题三的代码:
C语言代码如下:
#include <reg51.h>#include <absacc.h>void delay() ;int i = 0;int code TAB[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};void main(){ EA = 1; EX0 = 1; EX1 = 1; IT0 = 0; IT1 = 0; P1 = TAB[i]; while (1) { }}void init0() interrupt 0{ if (i == 9) { i = 0; P1 = TAB[i]; } else P1 = TAB[++i]; delay();}void init1() interrupt 2{ if (i == 0) { i = 9; P1 = TAB[i]; } else P1 = TAB[--i]; delay();}void delay(){ int i,j; for (i = 200; i > 0;i--) for(j = 125 ; j > 0;j--) ;}
- 单片机实验四
- 【单片机】编码键盘实验
- 【单片机】LED实验
- 51单片机定时器实验
- 单片机串口通信实验
- 单片机时钟实验
- 单片机实验报告
- 单片机控制继电器实验
- 51 单片机串口实验
- 简单的单片机实验
- 单片机实验一
- 单片机第二次实验
- 单片机实验三
- 单片机实验4
- 单片机实验五
- 单片机实验六
- 单片机实验七
- 单片机实验八
- c++中string类的基本实现
- CodeForces 26 C.Parquet(构造)
- 做百度知道营销不可忽视的问题
- 51nod 1318 最大公约数与最小公倍数方程组 2-SAT+数学
- Android NDK开发扫盲及最新CMake的编译使用
- 单片机实验四
- error setting properties values
- SQL反模式(五)
- OllyDbg 官网及下载地址
- Python:ndscheduler
- [收藏] solr 5.5 设置访问密码
- 学习RSS
- 嵌智捷达科技产品型号:CM-i.MX7D核心板
- 真传奇:看看这群清华学生的牛X岁月