推荐阅读最新更新时间:2024-11-19 18:14
基于8051单片机的中断控制
(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。 (2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0
[单片机]
关于51单片机外部中断响应
外部中断方式最好设为下降沿方式,特别是中断引脚接按键的情况。 外部下降沿中断:SETB IT0。每个机器周期都由硬件对引脚自动采样,若连续在2个周期采样到电平从高到低,则认定有中断请求,IE0=1。IE0会一直保持到该中断请求被CPU响应,响应前都不会自动清零,只有在响应后硬件才自动将IE0清零IE0=0。 外部低电平中断:CLR IT0。当中断引脚为低电平时,并保持一个机器周期,硬件自动置IE0=1。如果在下一个周期采样到中断引脚为高电平时,硬件自动将IE0清0。中断标志位自动清0条件:下降沿中断只有CPU响应中断同时才会清0,否则一直保持。低电平中断:任何时候当外部中断引脚为低电平时,IE0=1;为高电平时,IE0=0,所以不
[单片机]
MSC51单片机交通灯程序
/*************************************************************** * 程序名称:MSC51单片机交通灯 晶振:12.00 P1口 * 实验对象:HC6800单片机学习开发板 * 单 片 机:AT89S52或STC89C52 时间:红绿灯各亮10s * * 更多的资料和程序共享请关注51hei.com ****************************************************************/ /#include reg52.h #define uchar unsigned char /*宏定义 */ #defin
[单片机]
51单片机(十)—— 8位数码管-数码管扫描
一、原理介绍 关于数码管的控制电路,在《51单片机(八)》中有详细的介绍,硬件电路如下图所示。 在这个实验中,我们对数码管进行扫描。在进行实验时,需要将单片机的P00~P07引脚与J44相连。接口的对应关系是(P00—D0),……,(P07—D7)。将单片机的P10和P11引脚与J45相连,P10与J45上的DM对应,P11与WM对应。 二、实例介绍 这个实验的代码如下所示 #include reg52.h //包含头文件,一般情况不需要改动 #define DATA P0 //定义数据端口 程序中遇到DATA 则用P0口 替换 sbit DM = P1^0; //定义锁存使能端口 段锁存 sbit WM = P1
[单片机]
【51单片机】定时/计数器
修改日志 时间 修改内容 023-03-13 初稿完成 TMOD不能位寻址 ,只能将整个寄存器一起配置。 TCON 能位寻址 。用来控制定时器的启动、停止,标识定时器的溢出和中断情况。 定时器/计数器模式控制寄存器(TMOD) GATE = 0 不受外部中断控制 GATE = 1 受外部中断控制(即使软件开启了,也要外部中断引脚置位才行) 方式0 13位定时器/计数器,TL0(TL1)只用低5位参与分频,TH0(TH1)整个8位全用。 方式1 16位定时器/计数器 方式2 8位自动重装载定时器,实际只用低8位定时/计数,当溢出时,高8位的值自动重装入低8位。 方式3 T0此时作为两个独立的8位定时器/计数器
[单片机]
基于51单片机+LCD1602显示
LCD1602介绍 LCD1602相关引脚 LCD1602写命令、写数据相关操作图 根据上面时序图和时序参数图我们可以写出 写命令代码 和写数据代码 写命令 代码 写命令 void write_com(char command) { RS = 0; RW = 0; //高读低写 LCD = command; delay5ms(); //这里延时最低要30纳秒 我们直接给5ms E = 1;//使能拉高 delay5ms(); //最低要求延迟150纳秒 我们直接给5ms E = 0; } 写数据 代码 写数据 void write_data(char data) {
[单片机]
51单片机由软件实现的PWM控的LED渐亮、渐暗效果
#include reg51.h sbit LEDR= P2 ^ 5; //P2.0引脚上接了一个红的发光二极管 sbit LEDG = P2 ^ 6; //P2.1引脚上接了一个绿的发光二极管 void delay (unsigned char d){ // 延时功能函数--由d决定延时长度 unsigned char i; while( d-- != 0) { for(i = 0; i 8; i++); } } void delay1 (unsigned int d){ // 延时功能函数--由d决定延时长度 unsigned char i; while( d-- != 0)
[单片机]
51单片机的串口中断设置
首先,你要用软件允许中断, 即C语言中EA = 1; 允许总中断ES = 1; //允许串口中断汇编中可用 SETB EA ;允许总中断 SETB ES ;允许串口中断 当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。 当然,单片机发送完一帧数据,TI也会置1,同样会产生中断! 一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据; 接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。 补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓冲器S
[单片机]