目录

一、AT89C51及汇编指令

1、AT89C51单片机

2、汇编语言

二、点亮一个LED灯

1)汇编指令

2)电路原理图

三、LED流水灯电路

1)51汇编语言

2)C语言

3)电路原理图

四、总结


一、AT89C51及汇编指令

1、AT89C51单片机

AT89C51是一种基于8051架构的8位微控制器,具有丰富的外部引脚,可以用于各种接口功能。主要外部引脚功能如下:

1)P0端口(P0.0-p.7)是一个8位双向I/O端口,通常用于通用输入输出。在访问外部存储器时,P0端口也用于低8位地址和数据总线。

2)P1端口(P1.0-P1.7)是另一个8位双向I/O端口,通常也用于通用输入输出。

3)P2端口(P2.0-P2.7)是一个8位双向I/O端口,用于高8位地址总线。在非外部存储器访问期间,它可以被用作通用输入输出。

4)P3端口(P3.0-P3.7)是一个8位双向I/O端口,还包含一些特殊功能:P3.0(RXD)接收数据输入引脚,用于串行通信;P3.1(TXD)发送数据输出引脚,用于串行通信;P3.2(INTO)外部中断0输入引脚;P3.3(INTI)外部中断1输入引脚;P3.4(TO)定时器/计数器0的外部输入引脚;P3.5(TI)定时器/计数器1的外部输入引脚;P3.6(WR)和判.7(RD)外部数据存储器写和读控制引脚。

5)XTAL1和XTAL2这两个引脚用于连接晶体振荡器或RC电路,已提供微控制器的工作时钟。

6)VCC和GND分别为电源正极和地线引脚。

引脚的使用取决于具体应用和电路设计。如果想要使用AT89C51的P1端口来点亮一个LED,需要将LED的一个端子连接到P1端口的某个引脚上,另一个端子通过限流电阻连接到地。然后通过编程控制该引脚输出高、低电平来点亮或熄灭LED。

2、汇编语言

汇编语言指令通常由操作码、操作数和可选的注释组成。通常格式:[标号:] 操作码 [操作数1,操作数2] [;注释]

51单片机汇编指令包括数据传输、算术运算、逻辑运算、分支跳转位微操作等。用51单片机点灯通常用到以下指令:

1)ORG xxxxH:指向程序不同功能固定入口

0000H(系统复位入口) 0003H(外部中断0入口) 000BH(T0溢出中断入口

2)MOV direct, A:将累加器A的内容传送到直接地址的内存

3)SCALL addr 16:调用子程序,16位地址

4)SJMP rel:无条件短跳转,相对当前地址

5)DJNZ Rn,rel:寄存器减1,不为0则转移

6)RET:从子程序返回

7)SETB bit:设置特定位

8)LOOP:循环指令

二、点亮一个LED灯

1)汇编指令

ORG 0100H:是一个伪指令,用于指定程序的起始地址,从0100H开始执行

SETB P2.0:将端口评的第0位设置为高电平(1),也就是向P2.0输出高电平

SJMP $:无限循环指令,程序会在该位置无限循环

END:程序结束标签

该代码将单片机的P2端口的第0位设置为高电平,并在此后进入一个无限循环,用于控制连接到P2.0端口的LED灯的亮灭。

2)电路原理图

首先引入一个AT89C51芯片,然后将芯片的某一个端口与一个LED灯相连接(上图接入P2.0端口),再选一个限流电阻与LED灯相连,通过编程控制LED灯的亮灭。

三、LED流水灯电路

1)51汇编语言

ORG 0000HAJMP MAINORG 0030HMAIN:MOV P0, #0FEHACALL DELAYMOV P0, #0FDHACALL DELAYMOV P0, #0FBHACALL DELAYMOV P0, #0F7HACALL DELAYMOV P0, #0EFHACALL DELAYMOV P0, #0DFHACALL DELAYMOV P0, #0BFHACALL DELAYMOV P0, #07FHACALL DELAYAJMP MAINDELAY:MOV R2, #50DL1:MOV R3, #50DL2:MOV R4, #50DJNZ R4, $DJNZ R3, DL2DJNZ R2, DL1RETEND

该程序会在P0端口的LED灯上实现流水灯效果。MOV指令用于设置P0的端口值,DELAY指令用于创建延迟,使用三个寄存器(R2、R3、R4)实现一个简单的循环延迟。DJNZ指令用于在寄存器的值不为0的时候进行循环,当寄存器的值减到0时,程序返回调用DELAY的地方,让流水灯效果持续进行。

2)C语言

#include //51单片机的头文件,该文件定义了51单片机的相关寄存器和特殊功能寄存器#include //内联函数的头文件,用于执行一个无操作指令void delay_ms(int a)//定义一个延迟函数,用于产生指定毫秒数的延迟{int i,j;for(i=0;i

该程序会在P0端口的LED灯上实现流水灯效果,每次循环都会点亮下一个LED灯。delay_ms函数用于产生延迟,以便可以观察到LED灯的切换。_nop_()用于生成一个时钟周期的延迟,该指令是一个空操作。main函数中,通过一个无限循环实现流水灯的效果,每次循环中,通过修改P0端口的输出值来控制连接在P0端口上的LED灯的亮灭。

3)电路原理图

首先选择一个微控制器(AT89C51),有足够的I/O端口来控制多个LED灯。选择一定数量的LED灯,一个LED灯对应一个I/O端口。每个LED灯都需要一个限流电阻来限制流过LED的电流,防止过载。选择一个电源为整个电路供电,将微控制器的I/O端口连接到LED灯和限流电阻。

四、总结

本次实验带我们学习了51单片机的硬件结构和基本操作,让我们学会汇编语言基本语法和指令,使用汇编语言编写简单的程序,同时熟悉如何使用Proteus进行51单片机仿真,培养动手能力和解决问题的能力,为进一步理解和学习单片机打下基础。