寄存器是干什么的?怎么配置它?配置完寄存器后,有什么作用呢?
寄存器是中央处理器内的组成部分。它是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。寄存器可以用来暂存指令、暂存数据、暂存地址。换而言之,我们配置寄存器,便是给寄存器中赋予一定的值,而这些值又要与我们的目的想对应,这样它便会有相应的作用。
例如,芯片的资料规定,当给芯片的 A 寄存器赋“0x11”时,它会出现 B 现象;赋“0x77”时,它会出现 C 现象。那么当我们目的是完成 B 现象时,我们就只需要配置 A 寄存器为“0x11”即可。
虽说看起来很简单,并且去完成目的时的流程并非这么容易。但是,实实在在而言,这些就是控制寄存器的根本!
这里以外部中断0(INT0)为例,使得外部中断0每发生一次,最后一位数码管的数值加1。
前一篇博文已经提到,要实现外部中断0,就必须要配置好两个寄存器IP、IE。而对于中断优先级寄存器IP,当我们使用默认优先级时(上篇博文的优先级表格所述),就不必要去配置IP。
接下来附上IE寄存器的每一位的作用:
首先,中断允许位寄存器 IE 是可位寻址的,意思是说,我们可以单独的对D0~D7每一位进行操作,而不需要对 IE 整个赋值(为什么可以这样,因为keil的头文件“reg52.h”已经对 IE 的地址进行了定义)。
在这里说明一点,对于51单片机的 I/O 口而言,上电时,默认输出为高电平。对于其寄存器而言,上电是,默认为0。可见,当要完成外部中断0的配置时,我们只需要配置中的EX0、EA,当然还有外部中断0的触发方式(产生方式),这里就要看到中断及控制寄存器TCON,其成员及意义如下:
可见外部中断0和外部中断1的设置方式雷同,跟据上表所述,我们通过设置IT0来设置外部中断0的触发方式(分别为:低电平触发、下降沿触发),其中 IE 位由硬件自身控制,不需要软件操作。
实例的核心代码如下:
/*数码管配置完成*/
void main()
{
IT0 = 1; //设置为下降沿触发
EX0 = 1; //外部中断0中断允许位
EA = 1;
while(1); //等待外部中断0发生
{
display();
}
}
void INT0() interrupt 0 //中断服务函数的书写格式
{
if( IE == 1) //产生了外部中断,IE 自动置为1
{
dspbuf[0]++;
}
}
在上面可以看到配置外部中断0相关的寄存器时,我们先打开EX0=1,允许外部中断产生,再EA = 1,打开总中断,这样就配置好了能产生外部中断0的先决条件,通过IT0 来配置中断的触发方式。在中断服务函数中,函数名“INT0”可自由编写,并且中单服务函数不需要声明,后面所加的“interrupt X”X为该中断对应的C语言序号。
值得注意的是,对于51单片机而言,上电之后,所有寄存器的值默认为“0”,所有 I/O 口的值默认为“1”。
通过外部中断的理解,很方便的能引出下一节的定时器/计数器中断。
关键字:51单片机 外部中断0 INT0
引用地址:
51单片机之——外部中断0(INT0)
推荐阅读最新更新时间:2024-03-16 16:08
51单片机设计测距仪原理及其应用
5l系列 单片机 中典型芯片(AT89C51)采用40引脚双列直插封装(DIP)形式,内部由CPU,4kB的ROM,256 B的RAM,2个16b的定时/计数器TO和T1,4个8 b的工/O端I:IP0,P1,P2,P3,一个全双功串行通信口等组成。特别是该系列单片机片内的Flash可编程、可擦除只读存储器(E~PROM),使其在实际中有着十分广泛的用途,在便携式、省电及特殊信息保存的仪器和系统中更为有用。该系列单片机引脚与封装如图1所示。 5l系列 单片机 提供以下功能:4 kB存储器;256 BRAM;32条工/O线;2个16b定时/计数器;5个2级中断源;1个全双向的串行口以及时钟 电路 。 空闲方式:CPU停止工
[单片机]
MCS_51单片机扩展I/O接口的设计概述
51系列单片机内部有4个双向的并行I/O端口:P0~P3,共占32根引脚。P0口的每一位可以驱动8个TTL负载,P1~P3口的负载能力为三个TTL负载。有关4个端口的结构及详细说明,在前面的有关章节中已作过介绍,这里不再赘述。 在无片外存储器扩展的系统中,这4个端口都可以作为准双向通用I/O口使用。我们知道,在具有片外扩展存储器的系统中, P0口分时地作为低8位地址线和数据线,P2口作为高8位地址线。这时,P0口和部分或全部的P2口无法再作通用I/O口。 P3口具有第二功能,在应用系统中也常被使用。因此在大多数的应用系统中,真正能够提供给用户使用的只有P1和部分P2、P3口。 综上所述,MCS-51单片机的I/O端口通常需要
[单片机]
AT89S51单片机实验系统的开发与应用
目前单片机应用已渗透到各个领域,单片机技术的发展也因此日新月异。作为实践性很强的应用型学科,单片机研发及教学离不开实验。传统的单片机实验系统需要频繁拔插烧写单片机芯片来编程,依赖于仿真机调试,实验成本高且效率低,已不适应现代科技开发需求。如何充分合理利用单片机的性能,方便用户高效学习与开发产品成为当前的研究热点。 单片机在电子产品中的应用已经越来越广泛,并且在很多学校也开设了相关的课程。通过对在校学生的调查,以及网络上收集到资料的综合分析,得知:目前无论是社会上还是在校学生,学习单片机的人数呈不断增加之势,对于单片机实验板的需求也不断增加。但是由于目前多数实验板价钱较高,实验项目不适于初学者学习。所以,开发出一套价格低廉,易
[单片机]
51单片机S系列与C系列的区别及选型指南
有些文献甚至也将8051泛指MCS-51系列单片机,8051是早期的最典型的代表作,由于MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。 其他的公司的51单片机产品都是和MCS-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取带了
[单片机]
51单片机~红外通信工作原理
一. 红外接收原理 位定义:脉冲位置调制方式,用“0”和“1”的时间区分,在一小段脉冲中,位“0”表示0.56ms+( 1 的时间)ms,而位“1”表示0.56ms+(“1”的时间)ms。由于“1”的时间不同,所以产生了“0”和“1”的区分。 但是通常会产生误差,导致无法精确到某一毫秒,此时就产生“1 与”0“之间的一个分介点,比如0.56~1.57ms,分别是位“0”和位“1”的高电平1时长,此时可采取低于1ms位“0”,高于1ms位“1”来解决误差问题。 二。红外传输代码: #include reg52.h typedef unsigned int u16; typedef unsigned cha
[单片机]
51单片机 静态数码管显示
1.新建工程,选择芯片型号,这里注意——为了防止出现在插入头文件reg时出现某些引脚不定义的情况 可尝试切换为AT89C52型号的芯片,插入头文件即为reg52,当然,如果使用的是51型号的编译后成功的,也是可以的。 2.实现八位数码管上第三位显示6 首先看原理图,由于是第三位易知对应的是LED6 之后再看 结合两张图可以看到要使得第三位显示为6 LED6对应Y5,Y5对应的二进制为101,要让低电平Y5通电 对应由高位到低位得 P2_4=1; P2_3=0; P2_2=1; 之后再考虑排阻P0可得:由P07到P00,abcdefg dp——0111 1101 则有 P0=0
[单片机]
51单片机学习笔记——基于汇编语言(1)
该系列文章基于80C51单片机,Keil2(这个版本是比较古老,不过keil2和keil5其实区别不大) 1、80C51系列单片机硬件结构 在开始讲单片机之前,相信大家已经对进制转换与码值已经有了一定的了解,如果完全没学过,可以随便弄本C语言啥的书,一般应试教育的计算机入门类教材第一章都会讲这个2333。 学单片机我们就要先了解一下它的硬件结构 1.1 内部结构 单片机的硬件组成有 1、1个8bit的CPU 2、1个片内振荡器和时钟电路 3、程序存储器,4KB(其实我用的有64K,相信大部分人也是,4k估计是Intel原始设计)的掩膜ROM,用于存放程序、原始数据和表格 4、数据存储器 5、64KB总线扩展控制器(
[单片机]
51单片机+ISD4002语音芯片读写源代码
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit SS=P2^3; //使能控制端 sbit SCLK=P2^2; sbit MOSI=P2^0; sbit MISO=P2^1; sbit LED=P1^0; sbit PR=P1^1;//录放控制端,通过开关来调节,高电平为录音状态 sbit ISD_INT=P1^2;//溢出中断 sbit AN=P2^4; sbit STOP=P2^5; void delay(uint time) { while(time!=0) { time-
[单片机]