51单片机学习资料
十天学会单片机非常完整版 轻松学51单片机
其运算符为“+”。 “或”运算规则如
下:
0+0=0,
0+1=1+0=1, 1+1=1
3. “非”运算
“非”运算是实现“求反”这种逻
辑的一种运算,如变量A的“非”运算 记作 A 。 其运算规则如下:
1 0, 0 1
4. “异或”运算
“异或”运算是实现“必须不同,
总线(BUS)是计算机各部件之间传送信息的公共通道。 微机中有内部总线和外部总线两类。内部总线是CPU内部之 间的连线。外部总线是指CPU与其它部件之间的连线。 外 部总线有三种: 数据总线DB(Data Bus), 地址总线 AB (Address Bus)和控制总线 CBControl Bus)。
• 五个中断源的中断控制系统; • 一个全双工UART(通用异步接收发送器)的串行I/O口,用 于实现单片机之间或单片机与微机之间的串行通信; • 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。 最高振荡频率取决于单片机型号及性能。
C51知识
• C语言是一种编译型程序设计语言,它兼顾了多种高级语 言的特点,并具备汇编语言的功能。目前,使用C语言进 行程序设计已经成为软件开发的一个主流。用C语言开发 系统可以大大缩短开发周期,明显增强程序的可读性,便 于改进、扩充和移植。而针对8051的C语言日趋成熟,成 为了专业化的实用高级语言。
单板机
单片机
单片机能做什么
• • 1. 2. 3. 4. • 实物展示 用到单片机的项目经验介绍 手持粮库温度寻检设备 毕设答辩打分器 电话台灯 自动感应水龙头 凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根 据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳, 80C51,arm等
51单片机复习要点整理资料
◆8位CPU; ◆片内带振荡器,频率范围为1.2~12MHz; ◆256字节片内数据存储器RAM; ◆4KB片内程序存储器ROM; ◆程序存储器的寻址范围为64KB; ◆片外数据存储器RAM的寻址范围64KB; ◆4个8位的并行I/O接口:P0、P1、P2、P3; ◆1个全双工的串行I/O接口,可多机通信; ◆2个16位定时器/计数器:T0、T1; ◆5个中断源。
数据指针高字节
DPH 83H
定时/计数器控制
TCON 88H
TF1 TR1 TF0 TR0 IE1
8F
8E 8D 8C 8B
IT1 IE0 IT0 8A 89 88
定时/计数器方式 TMOD 89H GATE C/T M1 M0 GATE C/T M1 M0
定时/计数器0低字节 TL0 8AH
定时/计数器0高字节 TL1 8BH
1、汇编语言的基本知识:
(1)语句格式: 标号: 操作码 操作数 ;注释
(2)伪指令:ORG、END、DB、DW、DS、EQU。 (3)程序设计的基本步骤为:
①分析课题; ②确定算法; ③画流程图; ④分配内存单元,确定程序与数据区存放地址; ⑤编写程序,上机调试和修改。
2、汇编语言程序设计: 顺序程序设计、分支程序设计、循环程序设计、 查表程序设计、子程序设计。
片内外统一编址0000H~FFFFH的64KB 程序存储器地址空间 256B 片内数据存储器地址空间 64KB 片外数据存储器地址空间(地址: 0000H~FFFFH)
存储空间的区分: (1)内部程序存储器与数据存储器的区分; (2)外部程序存储器与数据存储器的区分; (3)内外数据存储器的区分。
控
控
制
经典从零开始入门学习51单片机教程
19
混合编程方法
内嵌汇编
在C语言程序中嵌入汇编代码,以实现一些特定的功 能或优化程序性能。
调用汇编函数
在C语言程序中调用汇编语言编写的函数,实现底层 硬件操作。
混合编程注意事项
了解混合编程中需要注意的问题,如寄存器分配、参 数传递等。
2024/1/26
20
05
51单片机输入输出端口操 作
2024/1/26
16
04
51单片机编程语言基础
2024/1/26
17
汇编语言基础
01
02
03
指令集
了解并掌握51单片机的指 令集,包括数据传送、算 术运算、逻辑运算、位操 作等指令。
2024/1/26
伪指令
熟悉汇编语言中的伪指令 ,如ORG、DB、DW等, 用于定义程序的结构和布 局。
汇编器
学习使用汇编器将汇编语 言程序转换为机器码,以 供51单片机执行。
10
51单片机引脚功能
电源引脚
提供单片机工作所需的电源,包括 Vcc和Gnd引脚。
时钟引脚
提供单片机工作所需的时钟信号, 包括XTAL1和XTAL2引脚。
2024/1/26
复位引脚
用于将单片机复位到初始状态,包 括RST引脚。
I/O引脚
用于与外部设备通信,包括P0、P1 、P2和P3端口引脚。
11
2024/1/26
22
输出端口操作原理及实例
输出端口原理
51单片机的输出端口用于向外部设备发送信号。通过设置端口数据寄存器,我们可以控制输出端口的 电平状态。输出端口通常具有驱动能力,可以直接驱动LED、继电器等负载。
实例
假设我们使用P2.0端口作为输出,控制一个LED灯的亮灭。我们可以通过编程设置P2端口的数据寄存 器,将P2.0端口电平设置为高或低,从而控制LED灯的亮灭。
(完整版)MCS51单片机复习要点
MCS-51单片机8051 单片机是 8 位单片机,有 40 个管脚, 8 根数据线, 16 根地点线。
单片机的八大构成部分: CPU 、ROM、RAM、I/O 、准时 / 计数器、串口、SFR、中止服务系统一、 MCS-51 机的内存构造(如图 1 所示 )FFFFH60KB外面 ROM1000H0FFFH0FFFH FFH4KB4KB80H内部外面EA = 17FHEA = 00000H0000H7F 00HFFFFH64KB外面RAM特殊功能寄存器内部 RAM0000H程序储存器内部数据储存器外面数据储存器图1 MCS-51 机的内存构造物理上分为: 4 个空间,片内 ROM 、片外 ROM片内 RAM 、片外 RAM逻辑上分为; 3 个空间,程序内存(片内、外)一致编址MOVC数据储存器(片内) MOV数据储存器(片外)MOVX1、程序内存寻址范围: 0000H ~ FFFFH容量64KBEA = 1,寻址从内部 ROM ;EA = 0,寻址从外面 ROM地点长度: 16 位储存器地点空间为64KB作用:寄存程序及程序运转时所需的常数。
8051 单片机 6 个拥有特别含义的单元是:0000H ——系统复位, PC 指向此处;0003H ——外面中止 0 进口000BH —— T0 溢出中止进口0013H ——外中止 1 进口001BH —— T1 溢出中止进口0023H ——串口中止进口2、内部数据储存器物理上分为两大区: 00H ~ 7FH 即 128B 内 RAM和SFR区。
如图2所示。
7FH资料缓冲区货仓区80 字节数据缓冲器用工作单元30H2FH16 字节位地点:00H~7FH128 可位寻址位20H1FH 3 区2 区1 区32 字节 4 组 R0~R7 工作寄存器0 区00H图 2内部数据储存器二、殊功能寄存器 SFR寻址空间隔散分派在:80H ~ FFH ,注意 PC 不在此范围内。
51单片机基础入门
单片机基础一、 单片机基础知识1.1 51系列单片机简介:51系列单片机是单片机领域中的一类,也是影响最为深远,使用最为广泛的单片机系列。
51单片机是指Intel的MCS‐51系列及和其具有兼容内核的单片机。
51系列单片机最早由Intel公司发展起来,随后将51内核授权给其他各个厂商。
因此,现在MCS‐51兼容的单片机种类繁多,如:Atmel公司的AT889C系列、AT89S系列、Silicon Laboratories的C8051F 系列以及STC的单片机等。
这些系列的单片机都有着十分接近的指令系统和硬件结构,在开发起来很方便移植。
1.2 STC系列单片机:STC89C51RC系列单片机是STC推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择,HD版本和90C版本内部集成MAX810专用复位电路。
特征:1) 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可任意选择,指令代码完全兼容传统80512)工作电压:5.5V ‐ 3.3V (5V单片机) / 3.8V ‐ 2.0V (3V单片机)3) 工作频率范围:0~40MHz,相当于普通8051的 0~80MHz,实际工作频率可达48MHz.4)用户应用程序空间:4K / 8K / 13K / 16K / 32K / 64K字节5)片上集成1280字节或512字节RAM6)通用I/O口(35/39个),复位后为:P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O 口);P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7)ISP(在系统可编程)/ IAP(在应用可编程),无需专用编程器,无需专用仿真器 可通过串口(RxD/P3.0, TxD/P3.1)直接下载用户程序,数秒即可完成一片8)有EEPROM功能9)看门狗10)内部集成MAX810专用复位电路(HD版本和90C版本才有),外部晶体20M以下时,可省外部复位电路。
51单片机资料
串行通讯: 将数据字节分解成一位一位的形式在一条传
输线上逐个地传送。
接 受 设 备
D0 8位顺次传送
D7
发 送 设 备
特点: 传输线少,长距离传送时成本低,且可利用
电话网等现成设备,但控制复杂。
异步通讯
以字符为传送单位,用起始位和停止位标识每个字符的开始和结束,字符间 隔不固定,只需字符传送时同步。
8.4 串行口的应用
串行口初始化编程格式: SIO:MOV SCON,#控制状态字;写控制字且TI=RI=0 (MOV PCON,#80H) ;波特率加倍 ( MOV TMOD,#20H ) ;T1作波特率发生器 ( MOV TH1,#X ) ;选定波特率 ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ;开串行口中断 ( SETB ES)
接收程序:REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。 1.查询方式: WAIT: JBC RI,NEXT ;查询等 SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据 MOV @R0,A ;保存数据 INC R0 ;准备下一次接收 SJMP WAIT
2.中断方式:
ORG 0023H AJMP TRANI
;串行口中断入口
TRANI:CLR TI ;清发送结束标志 DJNZ R7,NEXT;是否发送完? CLR ES ;发送完,关闭串行口中断 SJMP TEND NEXT: INC R0 ;未发送完,修改指针 MOV A,@R0 ;取下一个字符 MOV C,P ;加奇偶校验 MOV TB8,C MOV SBUF,A ;发送一个字符 TEND: RETI ;中断返回
时间1 时间2
接收器 接收器 发送器
(完整版)51单片机基础知识及期末复习
、什么是中断和中断系统?其主要功能是什么?
CPU正在处理某件事情的时候,外部发生的某一件事情请求CPU迅速去处理,于是,CPU
(1)使计算机具有实时处理功能,能对外界异步发生的事件作出及时的处理。(2)完全
CPU在查询方式中的等待现象,大大提高了CPU的工作效率。(3)实现实时控制。
、MCS-51有哪些中断源?
0 1 第1组 08H~0FH
1 0 第2组 10H~17H
1 1 第3组 18H~1FH
、EA/V
引脚有何功用?8031的引脚应如何处理?为什么?
答: CP允许位EA=1,允许所有中断源申请中断。
1,即此中断源可以向CPU申请中断。
CPU响应中断的基本条件。如果上述条件不足,则CPU一般会影响中断。但是,若有
CPU正处在为一个同级或高级的中断服务中。
所执行的指令的最后一个机器周期。作此限制的目的在与使当前指令执行
2)中断系统:IP、IE;
3)定时器/计数器:TMOD、TCOM、TL0、TH0、TL1、TH1;
4)并行I/O口:P0、P1、P2、P3;
5)串行口:SCON、SBUF、PCON。
、什么是指令?什么是程序?简述程序在计算机中的执行过程。
答:指令是控制计算机进行某种指令的命令。CPU就是根据指令来指挥和控制计算机各部分协
RET、RETI)或访问IE、IP的指令。因为按MCS-51中断系统的特性
CPU将丢弃中断查询结果;否则,将在紧接着的下一个机器周期内执行
响应中断后,保护断点,硬件自动将(PC)→堆栈,寻找中断源,中断矢量→PC,程序
INT0=0003H,T0=000BH,INT1=0013H,T1=001BH,串行接
51单片机基本知识
//初始化串行控制寄存器 //输出数据 //查询方式
TI=0;
} 1.4.4 模式 1
串行口工作于模式 1 时,传输的是 10 位:1 位起始位(0),8 位宽度的数据(低
RS1、RS0:四个通用寄存器组的选择位,该两位的四种组合状态用来选择 0~3
寄存器组。见表 1-2。
表 l-2 RS1、RS0 与工作寄存器组的关系
RS1
RS0
工作寄存器组
0
0
0 组(00-07)
0
1
1 组(08-0F)
1
0
2 组(10-17)
1
1
3 组(18-1F)
OV:溢出标志。当带符号数运算结果超出-128~+127 范围时 OV=1,否则 OV=0。
所有计算机的三总线结构相同; 程序流程图相同。
学习计算机的基础知识是数字电子技术:触发器、计数器、移位寄存器、 译码器、编码器
1.1 MCS-51 单片机的特点
单片机(MICROCONTROLLER,又称微控制器)是在一块硅片上集成了各种 部件的微型机算计,这些部件包括中央处理器 CPU、数据存贮器 RAM、程序存贮 器 ROM、定时器/计数器和多种 I/O 接口电路。
一类是存贮器逻辑空间统一管理,可随意安排 ROM 或 RAM,访问时用同一种指
令,这种结构形式称为普林斯顿型。MCS-51 单片机的存贮器结构属于前者,一般
微机属于后者。
程序:0000-0FFFFH
内部
00-7F:工作寄存区、通用数据区
数据:
存贮器结构
80-FF:特殊功能寄存器、通用数据区
程序:1000-FFFFH(或 0000-FFFF)
引言 计算机
51单片机基础知识必备
51单片机基础知识必备一. 基础知识必备1 . 单片机复位引脚——RST当输入连续两个机器周期以上的高电平时为有效,用来完成单片机复位的初始化操作,复位后的程序计数器PC = 0000H,即复位后将从程序存储器的0000H单元读取第一条指令代码。
通俗的讲,就是单片机从头开始执行程序。
2.PSEN 全称是程序储存器允许输出控制端。
在读取外部程序储存器时,PSEN低电平有效,以实现外部程序储存器的读操作。
(内存足够了,没必要)3.电平重要知识点CMOS电路中不使输入端悬空,否则会造成逻辑混乱。
CMOS电平能驱动TTL电平,但是TTL电平不能驱动CMOS电平,需加上拉电阻4. 51系类扩展数据类型sfr——特殊功能寄存器的数据声明,声明一个8位寄存器。
sfr16 ——16位特殊功能寄存器的数据声明。
sbit ——特殊功能位声明,就是声明某一个特殊功能寄存器中的某一位。
bit ——位变量声明,当定义一个位变量时,可使用此符号。
5. 电阻的标志读数如果标称是103,就是10*10^3欧姆,150表示15*10^0欧姆,三位数表示5%精度,四位数表示1%精度6.要牢记,51MCU上电时,如果没有人为的控制IO状态,它所有的IO口都将是高电平,因此,我们没有必要写一句让锁存端置于高电平的语句7.和MCU有关的周期(1)时钟周期,也称震荡周期,定义为时钟频率的倒数。
MCU中最小的事件单位(2)状态周期,他是时钟周期的两倍(3)机器周期,MCU的基本操作周期,在一个操作周期内,MCU完成一个基本操作,如读取指令,储存器的读写。
它由12个时钟周期(6个状态周期组成)(4)指令周期,他是指MCU执行一条命令所需要的事件,一般一个指令周期含有1~4个机器周期8.“消影”——P0 = 0xff每次送完段选数据之后,在送入为选数据之前,需加上P0 = 0xff。
9 中断概念51内部有5个终端源,也就是说有5种情况发生,会使得单片机去处理终端程序。
51单片机资料汇总
51单片机电子书工具附件和视频教程集锦A.视频教程1.手把手从零教你学51单片机(免费)(一个从硬件到软件真正手把手教你学单片机的视频教程)51单片机的教程及开发板真的很多,我曾经也从零学单片机,看过的视频教程及玩过的开发板也比较多,但很多都是为了卖发板而做视频教程。
从头到尾的就每个模块做些例子,或者就送些例子,而例子中所涉及到的C语言并没有详细的、系统的讲解。
对于程序及语句的执行都没有进行详细的讲解,这对于初学者非常的不利。
对于本身就没有C语言基础的初学者,不进行解释,给他领悟个三天三夜都不会领悟出来。
即使真的领悟出来那也是整整浪费了三天三夜,这只是做了个比较。
但如果有个人领着你,带这你,跟你解释这些原理及程序如何执行,那你还要三天三夜吗?这大大的提高了学习的效率。
对于一个C语言本身就不了解的人,你说他能去编写出一个很炫很智能的程序吗?没有C语言能力,别提如何去编写程序,如何去让单片机完成你想要的功能。
所以我在这样的情况下,深思熟虑之后,决定做出了此套视频教程。
大家可以从下面的目录中都可以看出,讲解到的C语言内容较多,甚至单独安排了C语言课程。
讲解过程尽量以一种通俗易懂方式,当然个人能力有限,能够详细的讲解则必须尽量跟大家讲解。
因为我曾经也是初学者,我很明白大家的心情。
开发板它是个平台,主要是用来学习程序、验证程序,同样的效果可以通过不同的多种方法实现。
这是我对于开发板的定义。
当然开发板设计的有好有坏,但我设计的宗旨是:模块与单片机的通信及模块与模块之间的通信尽可能的不要通过杜邦线及短路帽连接。
这样做的优点:第一:减小硬件上的接触不良;第二:杜绝硬件上连接操作的错误;第三:通过程序去选择模块,加强C语言的编写能力;第四:整体做为一个系统,更接近实际项目的开发。
教程宗旨:第一:介绍硬件;第二:介绍涉及到C语言;第三:实际编写程序、调试程序。
每节课严格按照三步走,要做到让大家从原理上到应用上都明白。
MCS-51单片机(完整版)
智能仪表
单机应用 机电一体化产品
智能接口
单片机应用
智能民用产品 功能集散系统
多机应用 并行多控制系统
局部网络系统 是指在一个应用系统中,使用多个单片机。
2 单片机芯片的硬件结构
2.1 MCS-51单片机的逻辑结构及信号引脚
2.1.1 MCS-51单片机基本结构框图
输入输出接口 (I/O)
控制与运算单元 (CPU)
1.2 单片机的发展 1.2.1 单片机的发展概述
1946 第一台计算机诞生 1971 第一个微处理器诞生 1976 MCS-48(8位) 1980 MCS-51(8位) 1983 MCS-96(16位) 80年代末 Motorola 680X
Zilog Z-8
Rockwell 650X•••
当前: (1) MCS-51、MCS-96系列发 展(2。) PIC (Microchip公司) (3) ARM (4) 凌阳单片机 (5) AVR
1.3.1 单片机的特点
长寿命 体积小 低电压与低功耗
低噪声与高可靠性技术
总而言之,单片机具有集成度高、功能强、体 积小、功耗低、使用方便、价格低廉等优点。
第一章 单片机概述
1.1 单片机的概念
1.2 单片机的发展
1.3 单片机的应用
1.3.1 单片机的特点 1.3.2 单片机的应用领域
是指在一个应用系统中,只用一个单片机。 测控系统
外接晶体引线端
2.1.3 MCS-51的信号引脚 1. 信号引脚介绍 2. 信号引脚的第二功能
• P3口线的第二功能
口线
P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7
第二功能 RXD TXD INT0 INT1 T0 T1 WR RD
手把手教你学51单片机ppt课件
第三阶段(1982-1990)
8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。 Intel公司推出的MCS – 96系列单片机,将一些用于测控系统的模件集成到片内,如A / D 、D / A 转换、PWM(脉宽调制)及WDT(看门狗)等,在单片机的片内集成有这
手把手教你学51单片机ppt 课件
目录
• 51单片机概述 • 51单片机基础知识 • 51单片机指令系统与汇编语言 • 51单片机C语言编程基础
目录
• 51单片机开发环境与工具 • 51单片机应用实例与实验
01
51单片机概述
51单片机定义与特点
定义
51单片机是对兼容Intel 8051指令系统的单片机的统称。该系列单片机的始祖是Intel的8051单片机,后来随着 Flash rom技术的发展,8051单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是 ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
ASCII码
美国标准信息交换代码,用于表示字符 的编码,包括字母、数字、标点符号等 。
51单片机内部结构
CPU
中央处理器,负责执行指令和处理数据。
ROM
只读存储器,用于存储固定程序和常数。
定时器/计数器
用于计时和计数操作。
RAM
随机存取存储器,用于存储临时数据和程序执行过程中 的变量。
I/O端口
输入/输出端口,用于与外部设备通信和数据交换。
寄存器寻址
操作数在寄存器中,适用于快速访 问和操作寄存器中的数据。
位寻址
直接对内存单元的某一位进行操作 ,适用于位操作和控制标志位的设 置与清除。
51单片机基础知识
一、单片机基础知识1.1介绍:单片机,简称MCU.内部集成了CPU,RAM,ROM,定时器,终端系统,通讯接口等一系列电脑的常用硬件功能1.1.1点亮一个LED:安装好stc-isp与Keil5C51,配置USB驱动;建立一个新工程,选择AT89C52型号添加新文件选择C语言(通常情况下)通过调节P20的电压实现点亮/熄灭写好程序勾选创建HEX文件,再次编译;配置芯片型号(带RC选RC)与串口点击打开程序文件打开HEX文件下载到单片机;查找时重启单片机电源;成功点亮1.1.2LED闪烁:可从此处进行延时函数复制(系统频率一般默认为12Hz)#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay500ms() //@12.000MHz{unsigned char i, j, k;_nop_();i = 4;j = 205;k = 187;do{do{while (--k);} while (--j);} while (--i);}void main(){while(1){P2 = 0xFE;//1111 1110 There is a pressure drop across the diode Delay500ms();P2 = 0xFF;//1111 1111 There isn't a pressure drop across the diode Delay500ms();}}使用此函数进行LED闪烁;1.1.3LED流水灯:通过控制P2管脚的十六进制数值改变对应LED灯的压降,实现亮/灭;P2实际上为8位一体的导线;P2_X则可以操作单独的LED控件#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay1ms(unsigned int xms) //@12.000MHz{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){P2=0xFE;//1111 1110 D1Delay1ms(500);P2=0xFD;//1111 1101 D2Delay1ms(500);P2=0xFB;//1111 1011 D3Delay1ms(500);P2=0xF7;//1111 0111 D4Delay1ms(500);P2=0xEF;//1110 1111 D5Delay1ms(500);P2=0xDF;//1101 1111 D6Delay1ms(500);P2=0xBF;//1011 1111 D7Delay1ms(500);P2=0x7F;//0111 1111 D8Delay1ms(500);}}1.2独立按键控制LED亮灭:通过查询原理图发现,K1独立按键对应P3_1;#include<REGX52.H>//The Definitionvoid main(){while(1){if(P3_1){//UPP2_0=1;//D1 Dark}else{//DOWNP2_0=0;//D1 Light}}}1.2.1独立按键控制LED状态:按键抖动:对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会立刻断开,开关闭合/断开时往往伴随着波动#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);P2_0=~P2_0;}}}消除误差1.2.2独立按键控制LED显示二进制unsigned char 用来表示一个寄存器#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber = 0;while(1){if(!P3_1){//DOWNDelay(20);while(!P3_1);Delay(20);LEDNumber++;P2=~LEDNumber;}}}对P2进行取反操作则为计算二进制数值1.2.3独立按键控制LED移位:#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_() void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}void main(){unsigned char LEDNumber=0;P2=~0x01;//Rename the character while(1){if(!P3_0){//K2 DOWN Moving RightDelay(20);while(!P3_0);Delay(20);LEDNumber++;if(LEDNumber>=8){LEDNumber=0;}P2=~(0x01<<LEDNumber);}if(!P3_1){//K1 DOWN Moving LeftDelay(20);while(!P3_1);Delay(20);if(!LEDNumber){LEDNumber=7;}else{LEDNumber--;}P2=~(0x01<<LEDNumber);}}}包括左移(K1)和右移(K2);if语句中为消除误差+移动计算;通过改变P2总导线压降,来控制对应LED灯的亮灭首先对P2进行初始化0000 0001 D1亮0x01<<00000 0010 D2 亮0x00<<1....1000 0000 D8亮0x00<<81.3静态数码管显示:确定静态数码管显示时,先根据所选型号与待输出数据确定位选(3.8引脚的高低电平)与段码(剩下引脚的高低电平)通过此两排端口进行控制,下方端口由P0控制通过138译码器实现仅一位LED为1的操作(其余为0),通过观察真值表确定端口: 三端口为P2引脚.C B A Y0 0 0 70 0 1 60 1 0 50 1 1 41 0 0 31 0 1 21 1 0 11 1 1 0DIR控制数据传输方向DIR通过J24控制电平高低.当DIR接高电平时,从左向右传输数据#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){ switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];}void main(){unsigned int location = 1, number = 0;while(1){if(location > 8){location = 1;number = 0;}Delay(1000);Nixie(location,number);location++;number++;}}1.3.1动态数码管显示在实现显示多个数据时,清零上一个数据,实现消影#include<REGX52.H>//The Definition#include<INTRINS.H>//Using the _nop_()void Delay(unsigned int xms){unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}}unsigned char NixieTabel[]={0x3F,0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07};void Nixie(unsigned char Location, Number){switch(Location){case8:{P2_4=0;P2_3=0;P2_2=0;break;}case7:{P2_4=0;P2_3=0;P2_2=1;break;}case6:{P2_4=0;P2_3=1;P2_2=0;break;}case5:{P2_4=0;P2_3=1;P2_2=1;break;}case4:{P2_4=1;P2_3=0;P2_2=0;break;}case3:{P2_4=1;P2_3=0;P2_2=1;break;}case2:{P2_4=1;P2_3=1;P2_2=0;break;}case1:{P2_4=1;P2_3=1;P2_2=1;break;}}P0=NixieTabel[Number];Delay(1);P0=0x00;//Creat Last digit.}void main(){while(1){Nixie(1,5);Nixie(2,2);Nixie(3,0);}}1.3.2LCD1602调试工具LCD_Init();//初始化LCD_ShowChar(1,1,'A');//显示一个字符LCD_ShowString(1,3,"Hello");//显示字符串LCD_ShowNum(1,9,123,3);//显示十进制数字LCD_ShowSignedNum(1,13,-66,2);//显示有符号十进制数字LCD_ShowHexNum(2,1,0xA8,2);//显示十六进制数字LCD_ShowBinNum(2,4,0xAA,8);//显示二进制数字1.4矩阵键盘:矩阵按键按列扫描P引脚均为弱上拉,即同时输入1&&0,输出0添加如下文件:#include <REGX52.H>#include "Delay.h"unsigned char MatrixKey(){unsigned char KeyNumber=0;//先判断列数,再判断行数,避免电平错位P1=0xFF;//全部置为高电平P1_3=0;//仅启动P1_3--即第一列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=1;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=5;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=9;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=13;}P1=0xFF;//全部置为高电平P1_2=0;//仅启动P1_2--即第二列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=2;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=6;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=10;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=14;}P1=0xFF;//全部置为高电平P1_1=0;//仅启动P1_1--即第三列 if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=3;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=7;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=11;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=15;}P1=0xFF;//全部置为高电平P1_0=0;//仅启动P1_0--即第四列if(!P1_7){Delay(20);while(!P1_7);Delay(20);KeyNumber=4;}if(!P1_6){Delay(20);while(!P1_6);Delay(20);KeyNumber=8;}if(!P1_5){Delay(20);while(!P1_5);Delay(20);KeyNumber=12;}if(!P1_4){Delay(20);while(!P1_4);Delay(20);KeyNumber=16;}return KeyNumber;}1.4.1矩阵键盘密码锁main函数:#include <REGX52.H>#include "Delay.h"#include "LCD1602.h"#include "MatrixKey.h"unsigned int KeyNumber;unsigned int PassWord,Count;//密码,位数void main(){LCD_Init();LCD_ShowString(1,1,"PassWord:");while(1){KeyNumber=MatrixKey();if(KeyNumber){if(KeyNumber<=10){//将10变成0,仅考虑0~9范围内if(Count<4){PassWord*=10;//每输入一位密码,当前密码左移一位 PassWord+=KeyNumber%10;//获取一位密码Count++;//计次}LCD_ShowNum(2,1,PassWord,4);//输出密码}if(KeyNumber==11){//清零Count=0;//清零次数PassWord=0;//清零密码LCD_ShowNum(2,1,PassWord,4);//更新显示}if(KeyNumber==12){//确认LCD_ShowString(1,12," ");if(PassWord==1976){LCD_ShowString(1,12,"OK");}else{LCD_ShowString(1,12,"ERROR");}//清零Count=0;PassWord=0;LCD_ShowNum(2,1,PassWord,4);//更新显示}}}}1.5定时器1.5.1按键控制LED流水灯模式TMOD:定时器寄存器:配置M1,M2为1 0-更改为16定时器模式0~65535:溢出时才进行中断判断每隔1us计数加一,总共定时时间65535us;赋初值64535-1000us(1ms)后计数器溢出,进行中断操作快捷生成定时器模块该函数未配置中断与中断优先级,且定时器时钟模式不需要定义定时器函数://1ms定时器void Timer0_Init(){//模式寄存器,高四位为计时器1,低四位为计时器2//高四位不变,低四位清零:10101100&11110000=10100000TMOD&=0xF0;//高四位不变,低四位赋1:10101100|00000001=10100001TMOD|=0x01;//控制寄存器;能单独对部分赋值TF0=0;//中断标志TR0=1;//运行控制位;1时运行T0进行计数//给定时器赋初值TH0=0xFC;//64535高八位TL0=0x18;//64535低八位//配置中断ET0=1;EA=1;//优先级选取PT0=0;}中断函数://定时器中断函数void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//1ms中断一次,中断1000次则为1s //具体操作T0Count=0;P2_0=~P2_0;//闪烁}}主函数:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "Key.h"unsigned char KeyNumber,LEDMode;void main(){P2=0xFE;//点亮D1,给予循环移位初值Timer0_Init();//启用定时器while(1){KeyNumber=Key();if(KeyNumber){//按下独立按键if(KeyNumber==1){//S1为模式改变按键LEDMode++;if(LEDMode>=2){//仅有0|1两种模式LEDMode=0;}}}}}//中断操作void Timer0_Rountine() interrupt 1{ static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=500){//0.5s操作一次T0Count=0;if(LEDMode){//模式1P2=_cror_(P2,1);//右移一位}else{//模式0P2=_crol_(P2,1);//左移一位}}}1.5.2定时器时钟:#include <REGX52.H>#include <INTRINS.H>#include "Timer0.h"#include "LCD1602.h"unsigned char Second,Minute,Hour;void main(){LCD_Init();//显示屏初始化LCD_ShowString(1,1,"Clock:");Timer0_Init();//启用定时器while(1){LCD_ShowNum(2,1,Hour,2);LCD_ShowString(2,3,":");LCD_ShowNum(2,4,Minute,2);LCD_ShowString(2,6,":");LCD_ShowNum(2,7,Second,2);}}//中断操作void Timer0_Rountine() interrupt 1{static unsigned int T0Count;//计数//给定时器赋初值复位TH0=0xFC;//64535高八位TL0=0x18;//64535低八位T0Count++;//每中断一次计数加一if(T0Count>=1000){//0.5s操作一次T0Count=0;Second++;if(Second==60){Minute++;Second=0;if(Minute==60){Hour++;Minute=0;if(Hour==25){Hour=Minute=Second=0;}}}}}1.6串口:1.6.1串口通信:配置波特率:1.6.2交互数据传输:#include <REGX52.H>//串口函数******************void UART_Init(){//配置串行控制寄存器,调整工作模式1SCON=0x50;//允许双向传输,REN置为1,配置使能//配置波特率选择位--需要配置定时器PCON|=0x80;//最高位置1,波特率加倍//定时器模式寄存器式//使用双八位模式(复位与计数分开)提高精度//清除定时器1模式位TMOD&=0x0F;//设定定时器1为八位自动重装方式TMOD|=0x20;//256溢出一次TL1=0xF4;//设定定时器初值TH1=0xF4;//设定定时器重装值ET1=0;//禁止定时器1中断TR1=1;//启动定时器1//使能中断EA=1;ES=1;}//发送函数void UART_SendByte(unsigned char Byte){SBUF=Byte;//发送数据到SBUF缓存器中即可进行传输//检测是否完成while(!TI);TI=0;}#ifndef __UART_H__#define __UART_H__/*串口函数输入:void输出:void功能:实现串口使用的初始化*/void UART_Init();/*串口发送函数输入:void输出:void功能:通过串口发送数据至接收端*/void UART_SendByte(unsigned char Byte);#endifmain:#include <REGX52.H>#include "Delay.h"#include "UART.h"void main(){UART_Init();while(1){}}//使能中断函数;发送/接收中断函数void UART_Routine() interrupt 4{if(RI==1){//限制仅为接收中断才进行后续操作P2=~SBUF;//外部设备传输数据存放在SBUF缓存器内 UART_SendByte(SBUF);//输出传入数据RI=0;}}1.7LED点阵屏:通过74HC595三个引脚控制八个LED 显示(新版板子是没有该八位LED 的)通过控制75HC595进行数据传输: #include <REGX52.H>//重新进行声明sbit RCK = P 3^5; //RCLKsbit SCK = P 3^6; //SRCLKsbit SER = P 3^4;//移位寄存器输入数据void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}void main(){//初始化SCK=0;RCK=0;_74HC595_WriteByte(0xF0);while(1){}}1.7.1LED点阵屏显示动画:使用该软件进行数据读取MatrixLED_ShowColumn.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"//移位寄存器输入数据,控制段选void _74HC595_WriteByte(unsigned char Byte){unsigned char i;for(i=0;i<8;i++){//从高位开始缓存数据SER=Byte&(0x80>>i);//非零置一0x80--10000000SCK=1;//赋予高电平进行移位SCK=0;//复位}RCK=1;//传输数据RCK=0;//复位}//LED点阵屏void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data){ _74HC595_WriteByte(Data);//段选MATRIX_LED_PORT=~(0x80>>Column);//位选0时出现压降,导通Delay(1);MATRIX_LED_PORT=0xFF;//位清零}//初始化void MatrixLED_Init(){SCK=0;RCK=0;}MatrixLED_ShowColumn.h:#ifndef _MATRIXLED_H__#define _MATRIXLED_H__//重新进行声明sbit RCK= P3^5;//RCLKsbit SCK= P3^6;//SRCLKsbit SER= P3^4;#define MATRIX_LED_PORT P0/*移位寄存器函数输入:Byte-点阵屏行数据输出:void功能:通过输入数据对LED点阵屏行(即位选)进行调整范围:0~7*/void _74HC595_WriteByte(unsigned char Byte);/*LED点阵屏函数输入:Column-位选 Data-段选输出:void功能:通过输入位选与段选实现LED点阵屏的动画演示*/void MatrixLED_ShowColumn(unsigned char Column,unsigned char Data);/*LED点阵屏初始化函数输入:void输出:void功能:对LED相关参数进行初始化*/void MatrixLED_Init();#endifmain.c:#include <REGX52.H>#include "Delay.h"#include "MatrixLED_ShowColumn.h"unsigned char code Animation[]={//存放在flash内存中,避免占用RAM内存0x00,0x40,0x20,0x1F,0x20,0x40,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x76,0x91,0x89,0x6E,0x00,0x00,0x00,0x00,0x7F,0x88,0x88,0x70,0x00,0x00,};void main(){//只要是局部变量的定义都要放在所在函数体内的第一行unsigned char j,Offset,Count;MatrixLED_Init();while(1){for(j=0;j<8;j++){MatrixLED_ShowColumn(j,Animation[j+Offset]);}Count++;if(Count>10){//扫描十遍偏移一次Count=0;Offset+=8;Delay(200);if(Offset>32){//防止溢出Offset=0;}}}}1.8DS1032定时时钟:从上到下依次存储不同的时间左边两列为其地址命令字第六位:1-RAM;0-CK,对时钟进行操作(有横线代表低电平有效)仅改变前七位,最后一位恒为1前一个字节是命令字,后一个是数据重新定义该三个端口1.8.1DS1302固定时钟主函数:#include <REGX52.H>#include "Delay.h"#include "DS1302.h"#include "LCD1602.h"void main(){LCD_Init();DS1302_Init();LCD_ShowString(1,1," - - ");LCD_ShowString(2,1," : : ");DS1302_SetTime();//设置时间//DS1302芯片内部自动会进行时间进位,不需要手动设置,只需要输入初始时间即可while(1){DS1302_ReadTime();//读入时间LCD_ShowNum(1,1,DS1302_Time[0],2);LCD_ShowNum(1,4,DS1302_Time[1],2);LCD_ShowNum(1,7,DS1302_Time[2],2);LCD_ShowNum(2,1,DS1302_Time[3],2);LCD_ShowNum(2,4,DS1302_Time[4],2);LCD_ShowNum(2,7,DS1302_Time[5],2);}}DS1302.c:#include <REGX52.H>#include "Delay.h"//重新定义端口名称,便于模块化集成sbit DS1302_SCLK=P3^6;sbit DS1302_IO=P3^4;sbit DS1302_CE=P3^5;#define DS1302_SECOND 0x80#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_DATE 0x86#define DS1302_MONTH 0x88#define DS1302_DAY 0x8A#define DS1302_YEAR 0x8C#define DS1302_WP 0x8E//Year,Month,Day,Hour,Minute,Second,Weekdayunsigned char DS1302_Time[]={22,5,22,21,19,55,7};//DS1302初始化,将使能端置0,SCLK置0void DS1302_Init(void){DS1302_CE=0;DS1302_SCLK=0;}//写入操作void DS1302_WriteByte(unsigned char Command, unsigned char Data){ //写入预操作//Command的第零位赋予IO口,第零位是标志位,判断读/写//Command与Data都是通过上升沿进行判断,因此总共有16个脉冲unsigned char i;DS1302_CE=1;//进行Command判断for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//进行电平变化,产生上升沿与下降沿DS1302_SCLK=1;Delay(1);//一般需要增加延时,具体参考芯片手册DS1302_SCLK=0;}//进行数据写入for(i=0;i<8;i++){DS1302_IO=Data&(0x01<<i);DS1302_SCLK=1;Delay(1);DS1302_SCLK=0;}//写入末操作DS1302_CE=0;}unsigned char DS1302_ReadByte(unsigned char Command){//读入预操作unsigned char i;unsigned char Data=0x00;Command|=0x01;//此处将最低位,置成1,使输入的写Command变成读Command DS1302_CE=1;//读入的Command是上升沿,而Data是下降沿,因此总共有15个脉冲for(i=0;i<8;i++){DS1302_IO=Command&(0x01<<i);//调整位置确保脉冲与Data一致DS1302_SCLK=0;DS1302_SCLK=1;}//读入数据//IO口默认为0,因此输入的数据为1时,for(i=0;i<8;i++){DS1302_SCLK=1;DS1302_SCLK=0;if(DS1302_IO){Data|=(0x01<<i);}}//读入末操作DS1302_CE=0;DS1302_IO=0;return Data;}unsigned char ChangeToDec(unsigned char Number){return (Number/16*10+Number%16);}。
51单片机自学笔记(基础部分)
一、51单片机的硬件结构1. 硬件结构框图说明:○1微处理器(CPU):51单片机含一个8位CPU,与通用的CPU功能基本相同,含运算器和控制器,不仅可以字节处理,还可以位处理。
例如:未处理、查表、状态检测、中断处理等。
○2数据存储器(RAM):51为128B,52为256B;片外最大可扩展到64K。
○3程序存储器(ROM/EPROM):8031没有,8051有4K的ROM,8751有4K的EPROM;片外可扩展至64K。
○4中断系统:5个中断源,2级优先权。
○5定时器/计数器:2个16位定时/计数器,四种工作方式。
○6串行口:1个全双工串行口,四种工作方式。
可进行串口通信,扩展并行I/O口,多机通信等。
○7P1、P2、P3、P0口:四个8位并行I/O口。
○8特殊功能寄存器(SFR):共21个,对片内部件进行管理、控制、监视;实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。
2. 引脚排列(1)电源及时钟引脚○1电源引脚:Vcc(40脚)解5V电源、Vss(20脚)接地。
○2时钟引脚:两个始终引脚XTAL1、XTAL2外接晶振,或接晶体与片内反相放大器构成振荡器。
XTAL1(19脚):内部反相放大器的输入端。
若接晶振则应接地;XTAL2(18脚):内部反相放大器的输出端。
若采用外部时钟振荡器,该引脚接收时钟振荡信号。
(2)控制引脚○1RST/Vpd(9脚):复位信号输入,高电平有效。
单片机运行时,此脚持续2个机器周期(24个时钟振荡周期)的高电平,就可复位。
平时应为0.5V低电平;Vpd为第二功能,备用电源输入端。
○2:ALE为地址锁存允许,正常工作时,ALE不断输出正脉冲信号。
当访问外部存储器时,ALE输出信号的负跳变沿用作低8位地址的锁存信号;PROG’为编程脉冲输入端。
○3PSEN’(Program Strobe Enable,29脚):程序存储器允许输出控制端。
低电平是外部程序存储器选通。
51单片机资料
芯片的扩展
7.1 随机读写存储器RAM的扩展 7.2 只读存储器ROM的扩展 7.3 地址译码的方法 7.4 并行接口芯片8155
单片机最小系统
使单片机能运行的最少器件构成的系统。
无ROM芯片:8031 必须扩展ROM,复位、晶振电路 有ROM芯片:89c51等,不必扩展ROM,只要有复位、晶振电路
C 口方式选择 00 01 10 11 = = = = ALT1 ALT2 ALT3 ALT4
TM2 TM1 IEB B口中断 = = 0 , 禁 止 1 , 允 许 IEA A口中断 = = 0 禁 止 1 允 许 PC2 PC1 PB B口 = = 0 输 入 1 输 出 PA A口 = = 0 输 入 1 输 出 起/停与运行控制位: 0 0 = 无操作=NOP 0 1 = 立即停计数; 若未计数=NOP 1 0 = 减到 0 停止; 若未计数=NOP 1 1 = 立即开始计数; 若正在计数则减 到 0后按新的方 式和初值计数。
8155
注:以下8页,基本引用成都理工大学,特表谢意!
40 PIN
7.4.2 8155的 6个寄存器
AD7——AD0 X X X X X 0 0 0 X X X X X 0 0 1 X X X X X 0 1 0 X X X X X 0 1 1 X X X X X 1 0 0 X X X X X 1 0 1 选中的寄存器 命令/状态字寄存器 A口寄存器(PA7—PA0) B口寄存器(PB7—PB0) C口寄存器(PC7—PC0) 定时器低8位寄存器 定时器高6位和 输出方式寄存器 功 能
Vcc Vpp
Vcc A14 A13 A8 A9 A11 OE A10 CE D7 D6 D5 D4 D3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片微机原理及应用》教学课件
相对寻址——(P.47) 当前PC值加上指令中规定的偏移量 rel,构成实际 的操作数地址 例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel
注意:符号“#”表明其后跟的是立即数, 立即数——就是数字量本身。
单片微机原理及应用》教学课件
寄存器间接寻址——(P.46) 寄存器中的内容是一个地址,由该地址单元 寻址到所需的操作数 例:[ MOV R1,#30H ,#30H ;(R1)← ;(R1)← 立即数30H ] MOV @R1,#0FH ;(30H)←立即数0FH MOV A,@R1 ;(A)←((30H))=#0FH 注意: 1)“间接”表示某寄存器中的“内容”只是一个 “单元地址”,这个地址单元中存放的数据才是 要找的“操作数”。 2 )符号 “ @” 表示“在 …” ,其含 义与读 音皆同 “at”。
注意: 1 )“当前 PC 值”指程序中下一条指令所在的首地 址, 是一个16位数; 2)符号“rel”表示“偏移量”,是一个带符号的单字 节数 ,范围是:-128— +127(80H —7FH), 在实际编程中,“ rel ” 通常用标号代替
单片微机原理及应用》教学课件
位寻址——(P.48) 指令中直接给出了操作数所在的位地址。 例: CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C ) 注意: 1)位地址里的数据只可能是一个 0 或 1 2)有的位地址十分明确,如 P1.0, ACC.7等, 有的位地址则“不太明确”,如: [MOV A,17H ; (A)←(17H),17H是字节地址] MOV ACC.0,17H ;(ACC.0)←(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位
寄存器寻址——(P.45) 从寄存器中读取操作数或存放操作数进寄存器 例:MOV A,B ; (A) ←(B) MOV 30H,R0 ;(30H)←(R0) MOV A,R1 ; (A) ←(R1)
单片微机原理及应用》教学课件
立即寻址——(P.45) 操作数直接就出现在指令中 例:MOV A,#64H ;(A)← 立即数 64H ADD A,#05H ;(A)←(A)+立即数 05H
80H 7FH
80H
普通RAM区
30H 2FH 20H 1FH 00H
只能直接寻址
位寻址区 工作寄存器区
单片微机原理及应用》教学课件
变址寻址——(P.47) 也称为: 基址寄存器+变址寄存器间接寻址 以16位的地址指针寄存器DPTR或 16位的PC寄存 器为基址寄存器,以累加器 A 为变址寄存器,两者 中的“内容”形成一个16位的“地址”,该“地址” 所指的存储单元中的内容才是操作数。
单片微机原理及应用》教学课件
存储器配置(片内RAM)
89C51片内RAM 128字节(00H—7FH) 89C52片内RAM 256字节(00H—0FFH)
只能寄存器间接寻址
FFH FFH
52子系列才有
的RAM区
ቤተ መጻሕፍቲ ባይዱ
SFR分布在 80H-FFH 其中92个位 可位寻址
89C52 256字节 89C51 128字节
第二讲:指令与编程
本讲重点: 寻址方式;
MCS-51指令集;
伪指令;
汇编语言与简单程序设计.
单片微机原理及应用》教学课件
第三章 指令系统及程序设计(P.43)
51系列单片机指令集含有111条指令
每条指令在程序存储器ROM中占据一定的空间, 以字节为单位。按指令所占字节数分类: 单字节(49条);双字节(46条);3字节(16条) 每条指令在执行时要花去一定的时间,以机器 周期为单位。按指令执行时间分类: 单周期(64条);双周期(45条);4周期(2条) 按指令的功能分类,可分为5大类: 数据传送类(29条);算术运算类(24条) 逻辑运算及移位类(24);控制转移类(17条) 位操作类(17条)
单片微机原理及应用》教学课件
在本单片机中访问特殊功能寄存器SFR只能采用直 接寻址方式的原因:SFR分布在80H~0FFH范围 内,而52系列单片机有256字节的片内RAM,其中 的80H~0FFH的RAM与SFR所占地址重叠。 于是规定: 80H~0FFH范围内的RAM只能用寄 存器间接寻址方式,而SFR只能用直接寻址方式。 从而解决了地址冲突的问题。例如: MOV A, 90H 等效于 MOV A, P1 属直接寻 址 MOV A, @R0 ;[事先已知 (R0) = #90H ] 执行的操作:A ←(90H) 属寄存器间接寻址, 随意写的指令如:MOV A, 85H 则是非法的!
单片微机原理及应用》教学课件
直接寻址——(P.46) 指令中直接给出了操作数所在单元的地址或名称 例:MOV R1,1FH ;(R1) ←(1FH) MOV 30H,4AH ;(30H)←(4AH) 在本单片机中规定:访问特殊功能寄存器SFR 只能采用直接寻址方式。例如: MOV A, SP ; (A) ←(SP) MOV 相同 A, 81H ; (A) ←(SP) MOV P1, #5AH ; (P1)←(#5AH) MOV 相同 90H,#5AH ; (P1)←(#5AH) MOV B, 30H ; (B) ←(30H) SFR的地址见 P.33表
单片微机原理及应用》教学课件
51单片机指令的寻址方式(P.45)
寻址方式:指令按地址获得操作数的方式 七种寻址方式,一条指令可能含多种寻址方式
寄存器寻址
立即寻址
寄存器间接寻址 直接寻址 变址寻址(基址寄存器+变址寄存器间接寻址) 相对寻址 位寻址
单片微机原理及应用》教学课件
单片微机原理及应用》教学课件
ASM-51指令的格式(P.44)
[标号:]操作码 [目的操作数][,源操作数][;注释]
方括符[ ]表示可选项
标号代表指令所在地址,1-8个字母/ 数字,“ :”
结尾 操作码就是指令功能助记符,指令实体 目的操作数 源操作数 注释,以“;”开头