沉浸式学习51单片机(1)——51单片机架构与汇编指令

目录

一.使用AT89C51点亮LED灯

(一)AT89C51简介

1.基本介绍

2.特性

3.管脚

(二) 使用AT89C51点亮LED灯

1.单个LED灯的点亮

(1)设计原理

(2)汇编程序

①ORG xxxxH命令

②数据传送类指令

③逻辑运算类指令

④控制转移类指令

(3)设计图

2.LED流水灯电路

(1)设计原理

(2)用51汇编语言实现

(3)用C语言编程实现

(4)实验成果图

二.总结


一.使用AT89C51点亮LED灯

(一)AT89C51简介

1.基本介绍

AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

图1.系统原理图

2.特性

AT89C51 提供以下标准功能:

4k 字节Flash 闪速存储器,256字节片内数据存储器(00H -7FH为片内RAM,80H-FFH为特殊功能寄存器SFR),32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

3.管脚

图2.管脚图 

表1.AT89C51各管脚作用
VCC提供电压
GND接地
P0口

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。

P1口

 P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。

P2口

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口同时为闪烁编程和编程校验接收一些控制信号

P3.0 RXD

串行输入口

P3.1 TXD

串行输出口

P3.2 /INT0

外部中断0

P3.3 /INT1

外部中断1

P3.4 T0

计时器0外部输入

P3.5 T1

计时器1外部输入

P3.6 /WR

外部数据存储器写选通

P3.7 /RD

外部数据存储器读选通

RST

复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG

访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN

外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2来自反向振荡器的输出。

(二) 使用AT89C51点亮LED灯

1.单个LED灯的点亮

(1)设计原理
    点亮一个LED 灯的电路设计原理是先引入一个 AT89C51 芯片,然后将 LED 灯接入芯片的某一个端 口,在这里是将LED 接入 P2.0 端,最后把代码生成的 hex 文件导入芯片中,来控制 P2.0 端,从而点亮LED灯
(2)汇编程序
ORG 0100H
SETB P2.0
SJMP $

END
①ORG xxxxH命令
是指向程序不同功能固定入口。
如:0000H---- 系统复位入口 0013H— 外中断 1入口
0003H—外部中断 0 入口 001BH—T1溢出中断入口
000BH—T0溢出中断入口 0023H串口中断入口
②数据传送类指令
MOV direct, A; 累加器传送到直接地址
MOV A,#data; data就是数据,直接赋给A
③逻辑运算类指令
RL A; 累加器循环左移
④控制转移类指令
JMP @A+DPTR; 相对 DPTR的无条件间接转移
DJNZ Rn,rel; 寄存器减 1 ,不为 0则转移
RET 从子程序转移
LJMP add16 无条件长转移
L CALL add16 长调用子程序
SJMP 无条件相对转移
SETB C 置位进位位
LOOP 循环指令

 

(3)设计图

图3.设计图 

2.LED流水灯电路

(1)设计原理
    实现LED 流水灯的电路原理主要是首先将 LED 依次接入到 AT89C51 芯片的 P0 端,拉一条总线进行连接,通过编号形成一一对应的关系,然后将汇编程序或C 语言编程生成的 hex 文件导入到此芯片中来控制P0端的输入和输出,从而间接控制 LED灯的亮灭和流水灯的实现。

图4.流水灯设计图 

(2)用51汇编语言实现

代码如下:

ORG 000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH //1111 1110 OFEH
LOOP: //1111 1101 OFDH
MOV P0,A //0111 1111 7FH
//1111 1110 OFEH
LCALL DELAY
RL A
SJMP LOOP
DELAY:
MOV R7,#255
D1:
MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET
END
(3)用C语言编程实现

代码如下:

#include <reg51.h>
#include <intrins.h>
void delay_ms(int a)
{
int i,j;
for(i=0;i<a;i++)
{
for(j=0;j<1000;j++) _nop_();
}
}
void main(void)
{
while(1)
{
P0=0xfe;
delay_ms(50);
P0=0xfd;
delay_ms(50);
P0=0xfb;
delay_ms(50);
P0=0xf7;
delay_ms(50);
P0=0xef;
delay_ms(50);
P0=0xdf;
delay_ms(50);
P0=0xbf;
delay_ms(50);
P0=0x7f;
delay_ms(50);
}
}
(4)实验成果图

图5.实验结果图 

二.总结

这次的电路仿真实验对我来说是一次宝贵的学习机会。通过实践,我更加深入地了解了Proteus电路仿真平台和Keil软件编译器的使用方法。这两个工具在电路设计和嵌入式系统开发中扮演着至关重要的角色。我发现它们的操作界面清晰简洁,功能丰富,使用起来确实十分方便。
然而,尽管我已经初步掌握了它们的基本操作,但我也意识到要想更加熟练地运用这些工具,我还需要深入学习和实践。因此,我计划通过上网查阅更多的资料,阅读相关的教程和案例,进一步提升自己的技能水平。
在这次实验中,我不仅学会了如何在Proteus中仿真电路,还学习到了汇编语言的基础知识。虽然我之前主要使用C语言进行编程,但对于汇编语言的学习让我受益匪浅。我意识到每种编程语言都有其独特的特点和优势,只有深入学习并实践,才能真正体会到它们的魅力所在。
综上所述,这次电路仿真实验不仅让我对Proteus和Keil有了更深入的了解,也开拓了我的编程视野,让我更加全面地理解了嵌入式系统开发的相关知识。我期待未来能够通过持续的学习和实践,不断提升自己的技能水平,为将来的项目和研究做好充分的准备。 

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C51单片机是由英特尔公司设计的8051系列单片机的一种,它采用C语言和汇编语言混合编程。汇编指令表是C51单片机指令集合,用于编写汇编程序。 C51单片机汇编指令表包含了各种指令,用于执行不同的操作。这些指令包括数据传输指令、算术运算指令、逻辑运算指令、位操作指令、跳转指令、中断指令等等。这些指令可以实现对存储器和寄存器的读写、对数据的运算、逻辑判断、程序的跳转等操作。 在编写汇编程序时,使用汇编指令表可以很方便地找到需要的指令,了解指令的功能和使用方法。对于初学者来说,汇编指令表可以作为学习的参考资料。 汇编指令表的内容一般按照指令的功能分类,每个指令都有对应的助记符、操作码和描述。助记符是指令的缩写形,操作码是指令的机器码形,描述是指令的功能和使用说明。 通过熟练掌握汇编指令表,可以编写出高效、可靠的汇编程序。同时,还可以根据指令表对已有的汇编程序进行修改和优化。但需要注意的是,由于C51单片机汇编指令表较为庞大,初学者在使用时可能会感到困惑,因此建议结合学习资料和实践来理解和使用指令表。 总而言之,C51单片机汇编指令表是学习和编写汇编程序的重要参考资料,它提供了各种指令的功能和使用方法,帮助程序员实现对单片机的控制和操作。对于使用C51单片机进行开发的工程师和学生来说,掌握汇编指令表是必不可少的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值