一,汇编指令
(1)51单片机的汇编语言
ORG 0H ; 指定程序起始地址
START: ; 程序入口标签
MOV P1, #55H ; 将 55H(0101 0101)送入 P1 端口
ACALL DELAY ; 调用延时子程序
MOV P1, #AAH ; 将 AAH(1010 1010)送入 P1 端口
ACALL DELAY ; 调用延时子程序
SJMP START ; 无条件跳转到 START 标签,实现循环
DELAY: ; 延时子程序
MOV R1, #50H ; 初始化 R1 寄存器
LOOP:
NOP ; 空操作,占用一个机器周期
NOP ; 空操作,占用一个机器周期
DJNZ R1, LOOP ; R1 寄存器自减并判断是否为 0,若不为 0 则跳转到 LOOP 标签
RET ; 返回主程序
(2)NOP指令
NOP指令在汇编中的作用是空指令,意味着什么都不做,一般用来控制CPU时间,达到时钟延时的效果。
NOP指令为单周期指令,可由晶振频率计算出延时时间,对于12M晶振,延时1μs。
1|DELAY:MOV R5,#10
2|D1: MOV R6,#200
3|D2: MOV R7,#250
4| NOP
5| DJNZ R7,$ ;250*2=500μs
6| DJNZ R6,D2 ;500*200=100000μs
7| DJNZ R5,D1 ;100000*10=1000000μs
8| RET
二,汇编语言用查表法完成求平方数的程序
通过查表法,求出1~9的平方数
代码如下
ORG 0H ; 指定程序起始地址
START: ; 程序入口标签
MOV R0, #0 ; 初始化计数器 R0
ACALL SQUARE ; 调用求平方子程序
; 这里将结果存储到 P1 端口
MOV A, R0 ; 将计数器 R0 的值移动到累加器 A
MOV P1, A ; 将累加器 A 的值送入 P1 端口
SJMP START ; 无条件跳转到 START 标签,实现循环
SQUARE: ; 求平方子程序
MOV A, R0 ; 将计数器 R0 的值移动到累加器 A
MOV R1, A ; 备份累加器 A 的值到 R1
MOV A, R0 ; 将计数器 R0 的值移动到累加器 A
MUL AB ; 累加器 A 与累加器 B 相乘,结果存储在累加器 A
MOV R0, A ; 将累加器 A 的值移动到计数器 R0
MOV A, R1 ; 将备份的值移动回累加器 A
RET ; 返回主程序
将上述代码利用Edsim软件进行仿真测试
三,普中开发板
在利用普中开发板做实例之前,我们首先需要了解关于普中开发板的相关知识,详细可以参考以下链接:https://blog.csdn.net/yu57955/article/details/120928956
STC-ISP软件是专门给STC系列单片机下载烧录程序的,并不能适用于ARM系列单片机,可以在http://www.stcmcu.com/官网下载最新的版本。详细使用指南参考:https://blog.csdn.net/qq_28576837/article/details/125712180
(1)LED周期点亮
LED原理如下
常见的LED发光二极管都有两个引脚,其中长的引脚接电源正极,为电流进入LED的引脚,短的接电源负极,为电流离开LED的引脚。如果LED正向导通,此时LED电阻基本为零,LED导通发光,如果LED反向导通,此时LED电阻可理解为无穷大,LED无电流通过,LED不发光。
实现周期性点亮代码如下,
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
(2)LED汇编代码的点亮
代码如下
ORG 0H ; 程序起始地址
START: ; 主程序入口标签
MOV P1, #00H ; 初始化 P1 端口为全灭状态
MOV R1, #01H ; 初始化计数器 R1,用于循环控制
LOOP: ; 循环标签
MOV P1, R1 ; 将计数器 R1 的值送入 P1 端口
ACALL DELAY ; 调用延时子程序
CPL R1 ; 取反计数器 R1 的值,用于改变LED灯的状态
SJMP LOOP ; 无条件跳转到 LOOP 标签,实现循环
DELAY: ; 延时子程序
MOV R2, #20H ; 初始化 R2 寄存器
DELAY_LOOP:
NOP ; 空操作,延时
NOP ; 空操作,延时
DJNZ R2, DELAY_LOOP ; R2 寄存器自减并判断是否为 0,若不为 0 则跳转到 DELAY_LOOP 标签
RET ; 返回主程序
四,实验结果
点亮
LED流水灯