首页 > 自考资讯 > 高考百科

一张图基本搞清楚单片机的工作原理(单片机原理介绍)

小条 2024-10-08

5f24803a9c2c4c02a51915c5c1211eaa~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=YmA%2FXbc7%2Bw8qite4TZKXO9LflmA%3D图1

这张图乍一看可能会让人感到畏缩,但稍微想一想,其实并不复杂。

这里我们以定时器中断T0为例。请先看一下

ea061b70f1a3431a9410757a1b2da1fb~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=mNXSJQsgVlIzxIb0DPoNNVdlbCQ%3D图2

定时器(或计数器)T0到达PT0H之前,必须先经过TF0、开关ET0、开关EA。实际上,TF0也是一个开关,因此必须关闭这三个开关,定时器T0的中断才能顺利到达PT0H。

为什么TF0也是一个开关呢?注意TF0所在的列一共有8位。这8位可以通过寄存器来存储和控制。该寄存器称为定时器控制寄存器。

a10c4c98a01c4bce81eb6be6dc9bd05f~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=mk%2FWMDaUxxsA1NkInM61Qqly%2FL0%3D图3

图3 中的列和TF0 中的列并不完全相同,因此暂时不用担心。这个TF0实际上是定时器0溢出中断标志位。当T0 从初始值开始计数并计数到溢出时,硬件将TF0 设置为1。即当TF0等于1时(相当于开关打开)。 on)),表示定时器(计数器)T0(8位寄存器)通过加1从8个0变成了8个1,加1导致溢出。此时,CPU硬件复位,T0再次变为八个零。这种情况下,TF0等于1的效果实际上与将T0寄存器重置为0是一样的。当然,复位为0后,开关又被关闭了。

查看ET0 所在的列。该列还由称为中断允许控制寄存器IE: 的寄存器控制。

3600321d611841f2955c05f4e92ba92e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=h7hCwAQ7k9JzxdKpEb4LL55InDE%3D图4

然后,要关闭ET0 开关,只需将寄存器IE 中的位设置为1 即可。 ET0置1后,相当于CPU使能定时器T0的操作。

再看看图1 中EA 所在的列。该行中的所有开关要么完全打开,要么完全关闭。当完全打开时,CPU不响应任何中断。当完全关闭时,CPU响应所有中断。因此,EA称为中断使能控制位。到目前为止,我们已经让您对图1 左侧的三个开关有了一个很好的了解,但是右侧的开关呢?

右边的就比较简单了。在图1中,我们看到有6个不同的中断源:定时器T0、T1、T2、外部中断0和外部中断1以及串口中断。如果这6个不同的中断源同时产生中断请求怎么办?目前存在优先级问题,但是

6d8694ff110349ab93ecafa00d3206bb~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=49H68a%2Ff6G9jLhq5i6j7lZ1o02M%3D图5

优先级由PT0H 和PT0 设置。

14d678265ef84ceb8f2159d295744c1c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=YXTUxd50bLS5rjn1LwO4OiXk%2B%2Fc%3D图6

换句话说,可以通过这两个位将六个不同中断源中的任何一个设置为0到3之间的任何优先级。查看图1 中优先级的左侧。

91390d5196f74213b7fd2cf8d3f3f9df~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1729001390&x-signature=v9U0nLlMcgOnlC0pwoTLZ9jCiTY%3D图7

它们都有6 个连接吗?

通过上面的解释,图1可以很容易地理解如下。

一个中断源如果想要得到CPU的响应,必须先关闭左边的三个开关,然后按照设定的优先级进行响应。

是不是很简单呢?

当定时器T0中断经过左边的三个开关和优先级设置并到达图7中的位置时,定时器T0的中断服务程序的入口地址必须放置在CPU的PC寄存器中。运行这个中断程序。

最后我用一个简单的定时器程序来解释一下。

MOV TMOD,A ; 将操作模式控制字写入TMOD。

MOV TL0,#9CH ;发送初始值

MOV TH0, #9CH ; 发送初始值用于重新安装该程序的前三条语句设置了定时器T0的初始值,可以忽略。

SETB ET0;图1中的ET0开关闭合,使能定时器T0中断。

SETB EA;在图1中,EA开关闭合,CPU允许所有中断。

SETB TR0;启动定时器T0。该语句与图1 中关闭TF0 开关不同。你可以这样理解:当你关闭TF0开关时,计数器T0再次变为0。然后,要重新开始计数,请将TR0 设置为1 以开始此过程。

HERE: SJMP HERE ; 如果计数器T0 没有变为全1,则重复执行该指令。

定时器T0中断服务程序;

CTC0: 当计数器T0变为全1时,将中断程序CTC0的入口地址发送到PC寄存器。

CPL P1.7

该程序的功能是向P1.7端输出一个周期为200s的方波,因此中断程序只有一条语句:不断反转P1.7端的电压。

上述程序如何编写的思路如下。在主程序中设置中断产生的所有条件。即闭合闭合的开关,然后启动定时器,等待定时器开始计时。如果未满,则主程序空闲运行。当计数器满时,开关TF0(对应图1中最左边的开关)闭合,并将中断程序入口地址CTC0发送到PC供CPU执行。同时将计数器清0。

中断程序执行完成后(CPL P1.7指令执行一次),CPU返回到主程序的空闲指令。

HERE: SJMP HERE ; 此时,计数器重置为0,并重新开始计数(定时器应该只启动一次),并且TFo开关再次关闭,因此主程序结束。它将在那里等待,直到下次计数器满并溢出。

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢