891 次浏览
我们已经看到8051中有五种不同的中断。这些中断是INT0、INT1、TO、T1、TI/RI。每个机器周期有六个状态。这些状态是S1到S6。所有中断都在每个机器周期的S5状态结束时采样。当指令占用多个机器周期时,则在下一个机器周期中轮询样本。当在第一个机器周期的S5处设置中断标志时,轮询周期将找到它。中断系统生成LCALL指令来调用相应的ISS。还有一些… 阅读更多
21K+ 次浏览
在本节中,我们将了解Intel 8051微控制器的中断结构。中断基本上是暂时挂起主程序、将控制权传递给外部源并执行其任务的事件。然后它将控制权传递回主程序中断的地方。8051有五个中断。这些中断是INT0、INT1、TO、T1、TI/RI。所有中断都可以使用IE(中断允许)寄存器启用或禁用。这些中断的中断地址如下所示:中断地址INT0 0003H INT1 000BH TO 0013H T1 001BH TI/RI 0023H 中断允许(IE)寄存器此寄存器可用于以编程方式启用或禁用中断。此寄存器… 阅读更多
10K+ 次浏览
现在我们将看到另一个算术运算。使用此 8051 微控制器将两个 8 位数相除的除法运算。寄存器 A 和 B 将用于此运算。除法运算不能使用其他寄存器。除法的结果有两部分。商部分和余数部分。寄存器 A 将保存商,寄存器 B 将保存余数。我们将两个数字 0EH 和 03H 放在 20H 和 21H 位置,除法后结果将存储在 30H 和 31H 位置。地址值…20H 0EH 21H 03H…30H 00H 31H 00H…程序MOV R0, #20H; 将源地址 20H 设置为 R0 MOV R1, #30H; 将目标地址… 阅读更多
19K+ 次浏览
现在我们将尝试使用此 8051 微控制器将两个 8 位数相乘。寄存器 A 和 B 将用于乘法。乘法运算不能使用其他寄存器。乘法的结果可能会超过 8 位大小。因此,高位字节存储在寄存器 B 中,低位字节在乘法后将位于累加器 A 中。我们将两个数字 FFH 和 FFH 放在 20H 和 21H 位置,乘法后结果将存储在 30H 和 31H 位置。地址值…20H FFH 21H FFH…30H 00H 31H 00H…程序 MOV R0, #20H; 将源地址 20H 设置为 R0 … 阅读更多
11K+ 次浏览
在这里,我们将了解如何使用此微控制器减去两个 8 位数。寄存器 A(累加器)用作运算中的一个操作数。在不同的寄存器组中有七个寄存器 R0 – R7。我们可以使用其中的任何一个作为第二个操作数。我们将两个数字 73H 和 BDH 放在 20H 和 21H 位置,减法后结果将存储在 30H 和 31H 位置。地址值…20H 73H 21H BDH…30H 00H 31H 00H…程序 MOV R0, #20H; 将源地址 20H 设置为 R0 MOV R1, #30H; 将目标地址 30H 设置为 R1 MOV A, @R0; 将值从源复制到寄存器 A MOV R5, A; 将值从 A 移动到… 阅读更多
29K+ 次浏览
Intel 8051 是一款 8 位微控制器。它具有许多强大的指令和 IO 访问技术。在本节中,我们将看到使用 8051 的一个最简单的程序。在这里,我们将使用此微控制器添加两个 8 位数。寄存器 A(累加器)用作运算中的一个操作数。在不同的寄存器组中有七个寄存器 R0 – R7。我们可以使用其中的任何一个作为第二个操作数。我们将两个数字 5FH 和 D8H 放在 20H 和 21H 位置,相加后结果将存储在 30H 和 31H 位置。地址值…20H 5FH 21H D8H…30H 00H 31H 00H…程序 MOV R0, #20H; 将源地址 20H 设置为 R0 … 阅读更多
516 次浏览
我们已经了解了如何将十六进制数字转换为其 ASCII 等效值。在本节中,我们将了解如何将两字节(4 位)十六进制数转换为 ASCII。这些数字的每个半字节都转换为其 ASCII 值。我们使用一个子程序将十六进制数字转换为 ASCII。在这个程序中,我们多次调用子程序。在内存中,我们将 2 字节十六进制数存储在 20H 和 21H 位置。转换后的 ASCII 值存储在 30H 到 33H 位置。十六进制数是 2FA9H。ASCII 等效值为 32 46 41 39。地址值…20H 2FH 21H A9H…30H 00H 31H 00H 32H 00H 33H 00H…程序 MOV R0,… 阅读更多
4K+ 次浏览
在本节中,我们将了解使用 8051 进行一些位操作。8051 支持对 8 位数的不同位进行一些操作。这些操作例如:取反、设置为 1、移动、与、或等。在这个示例中,我们从 10H 位置获取一个数字 AEH,然后在对该数据执行以下位相关操作后,我们将结果存储在 30H 位置。将对该数据执行的位相关操作如下:取反位 b2 将 b5 移动到 b4 对 b0 和 b1 的反码进行或运算,并将结果存储到 C (b7) 设置 b6 重置位 b3 输入是 AEH 位位置 b7 b6 b5 b4 b3 b2 b1 b0 值 1 0 1 0 1 1 1 0 输出位位置 b7 b6 b5 b4 b3 b2 b1 b0 值 0 1 1 1 0 0 1 0 输出将是… 阅读更多
5K+ 次浏览
现在我们将了解如何使用 8051 将十六进制数转换为其 ASCII 等效值。此程序可以将 0-9 和 A-F 转换为其 ASCII 值。我们知道数字 00H 的 ASCII 值是 30H (48D),而 09H 的 ASCII 值是 39H (57D)。因此所有其他数字都在 30H 到 39H 的范围内。0AH 的 ASCII 值是 41H (65D),而 0FH 的 ASCII 值是 46H (70D),因此所有其他字母 (B、C、D、E) 都在 41H 到 46H 的范围内。在这里,我们在内存位置 20H 提供十六进制数字,ASCII 等效值存储在位置 30H。地址值…20H 0EH 21H…程序 MOV R0,… 阅读更多
3K+ 次浏览
在这个问题中,我们将了解如何将 8 位 BCD 数转换为其二进制(十六进制)等效值。BCD 数存储在位置 20H。转换后,结果将存储在 30H。因此,让我们假设数据是 D5H。程序将 D5H 的二进制值转换为 BCD 值 213D。地址值…20H 9421H…程序 MOV R0, #20H; 初始化数据的地址 MOV A, @R0; 从存储在 R0 中的地址获取数据 MOV R2, A; 将 A 的内容存储到 R2 CLRA; 将 A 的内容清零 MOV R3, #00H LOOP: ADDA, #01H; 增加 A … 阅读更多