单片机学习(2)------中断操作
1、按钮S0接在51单片机的 P3.3(INT1)引脚上,P1口接了8个发光二极管,编程实现:初始状态时,LED0灯亮,其它灯灭,利用S0按钮控制P1口的灯(中断方式),要求每按一下就点亮一盏灯( 前面点亮的保持点亮的状态 )
代码:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar ledstatus_1;
uchar ledstatus_2;
bit flag; //标志位,中断后赋予1
uint i=0;
void wint1() interrupt 2
{flag=1;
}
void main()
{/*中断初始化*/IT1=1;EX1=1; EA=1;ledstatus_1=0xfe; //开始LED灯的状态P1=ledstatus_1;while(1){if(flag){if(i<7) //用于判断是否是否进行了一轮{ //即当灯全亮后恢复开始的状态ledstatus_2=_crol_(ledstatus_1,1); //ledstatus_2保存ledstatus_1循环左移后的数ledstatus_2=ledstatus_2&ledstatus_1; //进行相与,这样就可以保持低位灯不灭P1=ledstatus_2;ledstatus_1=ledstatus_2;flag=0;i=i+1; }else{ledstatus_1=0xfe;P1=ledstatus_1;flag=0; //这个恢复后需要将标志位设位0i=0; //否则一轮后的初始状态就会出现两个灯亮}} }
}
电路图:
2、按钮S0接在51单片机的 P3.3(INT1)引脚上,P1口接了8个发光二极管,编程实现:初始状态时,P1口控制的灯按一定的频率闪烁;按一下S0,触发 外部中断1(INT1),实现单灯 右移 (即按LED7至LED0的顺序依次点亮)3圈结束,恢复初始状态。
代码:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define LED P1
void delay(int xms) //延时函数
{uint i,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);
}
void right(int x) //右移
{int i,j;for(i=0;i<x;i++){LED=0x7f;for(j=0;j<7;j++){delay(250);LED=_cror_(LED,1); //循环右移}delay(250);}
}
void my_interrupt() interrupt 2 //中断函数
{unsigned saveLED=LED; //储存中断前LED状态right(3); //调用单灯右移3圈LED=saveLED; //写回中断前LED状态
}
void main()
{/*中断初始化*/IT1=1;EX1=1; EA=1;LED=0X00;while(1){delay(250);LED=~LED; //开始LED等闪烁}
}
电路图:
3、51单片机的P1.7引脚外接一个发光二极管D1,P3.2(INT0)引脚外接信号发生器(Single generator)。编程实现:首先通过P1.7口点亮发光二极管D1,然后信号发生器每输入10个脉冲触发一次中断,使D1灯亮、灭交替一次。
代码:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define LED P1
void delay(int xms) //延时函数
{uint i,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);
}
void left(int x) //左移
{int i,j;for(i=0;i<x;i++){LED=0xfe;for(j=0;j<7;j++){delay(250);LED=(LED<<1)|0x01; //左移}delay(250);}
}
void right(int x) //右移
{int i,j;for(i=0;i<x;i++){LED=0x7f;for(j=0;j<7;j++){delay(250);LED=(LED>>1)|0x80; //右移}delay(250);}
}
void my_int_right(void) interrupt 2 //中断函数
{unsigned saveLED=LED; //储存中断前LED状态right(3); //调用单灯右移3圈LED=saveLED; //写回中断前LED状态
}
void my_int_left(void) interrupt 0 //中断函数
{unsigned saveLED=LED; //储存中断前LED状态left(3); //调用单灯右移3圈LED=saveLED; //写回中断前LED状态
}
void main()
{/*中断初始化*/IT1=1;EX1=1; IT0=1;EX0=1;EA=1;IP=0x04;LED=0X00;while(1){delay(250);LED=~LED; //开始LED等闪烁}
}
电路图:
4、P1口接8个发光二极管,P3.2和P3.3接两个按钮开关模拟两个外部中断源。平常8个灯以一定频率闪烁,按键S0按下触发中断,控制8个灯左移(即按D1至D8的顺序依次点亮)3圈,按键S1按下触发中断,控制8个灯右移(即按D8至D1的顺序依次点亮)3圈(右移的中断优先级高于左移)。
代码:
#include<reg51.h>
#define uint unsigned int
sbit P1_7=P1^7;
uint i = 0; //脉冲计数
void interrupt0() interrupt 0 using 2
{ i++;if(i==10) //10个脉冲亮灭循环一次{i=0; P1_7=~P1_7; }
}
void main()
{EA=1; //中断允许IT0=1; //脉冲触发EX0=1; //外部中断0P1_7=0; //led灯初始状态do{}while(1);
}
电路图:
所有代码和电路图:https://download.csdn.net/download/qq_43556844/15087408
单片机学习(2)------中断操作相关推荐
- 51单片机学习--定时器--中断--串口通信
51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...
- ioca0中断 pic单片机_PIC单片机学习笔记
1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...
- 单片机学习——中断系统
单片机必学系列 单片机学习--中断系统 单片机学习--存储器详解(程序存储器.片内RAM.拓展RAM.EEPROM) 单片机学习--定时器/计数器 单片机学习--A/D转换 更新ing 单片机学习-- ...
- 51单片机学习笔记之中断(外部中断、定时器中断、中断嵌套)
要学习51单片机中断的朋友,拥有这一篇博文就够了,深入浅出,里面包含了寄存器,外部中断.定时器中断.中断嵌套等的讲解,还有代码实战.快一万字,写得不容易,还请大家点赞支持一下,后续持续更新 (一)寄存 ...
- 单片机定时器实验两位倒计时秒表_单片机学习「1」 初始51单片机
问题1:什么是单片机? 采用集成电路技术,将CPU(具有处理数据能力的中央处理器).RAM(随机存储器,类比电脑里的内存条).ROM(程序存储器,类比电脑硬盘).多种I/O口(类比电脑的各种接口,不过 ...
- 【小白】【大学】一名嵌入式软件开发小白的单片机学习历程、心路历程、经验分享
我的嵌入式学习之路 我为什么写这篇文章 先简单介绍一下我自己 与每一个技术小白共勉 这篇文章写给谁 我的学习经验分享 我的成长之路 我的单片机学习历程分享 51系列单片机学习历程 预备知识:(可以查百 ...
- [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计
串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...
- 单片机学习和应用百问大全
1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CP ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
最新文章
- freebsd ports安装mysql_FreeBSD Ports 方式安装MySQL及注意事项
- 【超详细】遍历Windows进程模块
- 网易严选Java开发三面面经:java读文件内容
- 【flink】flink写入clickhouse Error while starting CH writer AccessDeninedExcepton
- Delphi中的dll操作
- 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(6)签到题2题
- python实现50行代码_利用 50行Python 代码构建一个在线文本生成器!
- HTTP 连接管理进化论
- 树莓派制作语音对话机器人
- 互动快报:从读报刊看性格
- specification java_Java Specification类代码示例
- 夜夜听雨(三)(中国社会科学院 郑哲)
- Codeforces Round #682 (Div. 2)
- md本地免费编辑器推荐-marktext
- 记录一次 Vue 组件封装过程
- 开始学习ARM 单片机
- 知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得
- 魔兽争霸RPG游戏-军团战争-游戏经验总结
- SpringMVC怎么样设定重定向和转发的?
- POJ - 2386 (dfs简单应用)