设计与开发

单片机 = 单片机中数的表示及运算

小编 2024-10-13 设计与开发 23 0

单片机中数的表示及运算

单片机中的数是以二进制表示的,分为有符号数和无符号数两种。

有符号数的表示方法

有符号数是指有“ + (正)”、“ − (负)”符号的数。由于单片机采用二进制数,所以只有“1 ”和“0”两种数字,其中用“ 0 ”表示“ + ”,用“ 1 ”表示“ − ” 。单片机中的数据一般只有8位,一般规定最高位为符号位,因为要用1位表示数的符号,所以只有7位用来表示数值,可以表示− 127~+128。

有符号数的表示方法有 3 种:原码、反码和补码。同一有符号数,用 3 种表示方法得到的数是不同的。下面用3种方法来表示两个有符号数+1011101和− 1011101。

(1)原码

用“1”表示“−”,用“0”表示“+”,其他各数保持不变,采用这种方法表示出来的数称为原码。

+1011101用原码表示是01011101,可写成[01011101] 原。

− 1011101用原码表示是11011101,可写成[11011101] 原。

(2)反码

反码是在原码的基础上求得的。对于正的有符号数,其反码与原码相同;对于负的有符号数,其反码除符号位与原码相同外,其他各位数由原码各位数取反得到。

+1011101用反码表示是01011101,可写成[01011101] 反。

− 1011101用反码表示是10100010,可写成[10100010] 反。

(3)补码

补码是在反码的基础上求得的。对于正的有符号数,其补码与反码、原码相同;对于负的有符号数,其补码除符号位与反码一致外,其他数由反码加1得到。

+1011101用补码表示是01011101,可写成[01011101] 补。

− 1011101用补码表示是10100011,可写成[10100011] 补。

有符号数的运算

用原码表示有符号数简单、直观,但在单片机中,如果采用原码进行减法运算,需要很复杂的硬件电路;如果用补码,可以将减法运算变为加法运算,从而省去减法器而简化硬件电路。

例如:用二进制减法运算和补码加法运算分别计算35 − 21。

① 二进制减法运算:35 − 21=00100011 − 00010101=00001110

② 用补码加法运算。

先将算式转换成补码形式,35 − 21=[+35]+[ − 21]= [00100011] 原 +[10010101] 原 =[00100011] 反+ [11101010] 反 =[00100011] 补 +[11101011] 补。

再对补码进行二进制加法运算:

从上面的运算过程可以看出,补码的符号也参与运算,在8位单片机中,由于数据长度只能有8位,上式结果有9位,第9位会自然丢失,补码加法的运算结果与二进制减法的运算结果是一样的,都是00001110=14。

由此可见,用补码的形式进行运算,可以将减法运算转换为加法运算,运算结果仍是正确的,所以单片机普遍采用补码的形式表示有符号数。

无符号数的表示方法

无符号数因为不用符号位, 8 位全部用来表示数据,所以这种方法可以表示的数据范围是 0 ~ 255 。 8位二进制数的不同表示方式的换算关系见表1-6。

表1-6 8位二进制数的不同表示方式的换算关系

表1-6

续表

表1-6

从表1-6中可以看出,对于同一个二进制数,当采用不同的表示方式时,得到的数值是不同的,特别是大于10000000的有符号数。若想确切知道单片机中的二进制数所对应的十进制数是多少,先要了解该二进制数是有符号数还是无符号数,再换算出该二进制数对应的十进制数。

单片机简介

单片机简介

数字电路简介

在一个控制系统中, 单片机是电路的一部分, 单片机中的程序是针对其所在的电路编写

的。因此,要对单片机编程并实现一定的功能,必须了解整个系统的电路图。单片机编程是

针对某个特定的电路进行的单片机编程是针对某个特定的电路进行的, 这一点和普通的编程不一样。 编程时很可能要经常参照电路图。与单片机直接相关的电路大都是数字电路。 数字电路各部分的功能十分明确, 因此相对比较容易掌握。

简单地说,数字电路就是只有“0”和“1”两种信号的电路。判别信号究竟是“0”还

是“1”是通过电压的大小(常称作“电平” )来判断的。不同的数字器件的电平判断标准是

不一样的。常用的数字器件以高电平(超过某一阈值的电平)作为逻辑“1” ,以低电平(低

于某一阈值的电平)作为逻辑“0” 。其中高电平阈值大于低电平阈值,处于高电平阈值与低

电平阈值之间的电压是无效的。 高电平阈值与低电平阈值的具体值与数字器件的供电电压有

关,如 AT89S51 单片机的高电平阈值为(0.2Vcc+0.9)V,低电平阈值为(0.2Vcc-0.1)V,

其中 Vcc 为单片机的供电电压。 早年常用的数字器件的额定供电电压为 5V, 现在 3.3V、 1.8V

等电压的数字器件已经大量使用了。在 Easy 51 Kit Pro 中,我们仍使用 5V 供电的单片机。

另外,还有一种 RS-232 电平标准,以-12V~-5V 作为逻辑“1” ,以 5V~12V 作为逻辑“0” 。

电脑上的串口都符合 RS-232 标准。还有一个“地”的概念。在电路中“地”并不是通常意义中的地,而是指电路中的一点,这一点的电压被人为地规定为 0V。

MCS-51 单片机简介

目前生产单片机产品的公司非常多, 当中较有影响力的有 intel 公司推出的 MCS-51 系

列等。很多公司的产品都是与 MCS-51 架构兼容(MCS-51 compatible)的。本资料中采用的

atmel 公司的 AT89C51/52 或 AT89S51/52 单片机,就是兼容 MCS-51 架构的单片机。

Atmel 公司的 AT89C51( 以后简称“C51”)、AT89C52( 以后简称“C52”)、AT89C2051

( 以后简称“C2051”)以及 C51、C52 的换代产品 AT89S51( 以后简称“S51”)、AT89S52

( 以后简称“S52”)容易上手、价格低廉(不超过 10 元/片)、资料丰富,是初学者入门

时广泛采用的单片机。

C51 拥有 4096 字节(1 字节=8 位)的片内程序存储器、128 字节的 RAM、32 个 I/O 口、

两个定时器、6 个中断源、一个串口等。C52、C2051 的资源与 C51 差别不大,其中 C52 的片

内程序存储器为 8192 字节、RAM 为 256 节、定时器有 3 个,其它与 C51 一样; C2051 的片

内程序存储器为 2048 字节、I/O 口只有 15 个,另比 C51 多了一个模拟比较器,工作电压范

围比较宽,为 2.7V~6V(C51/52、S51/52 为 4.5~5.5V),其它与 C51 一样。

I/O、 定时器、 中断、 串口等资源的用法在后面有详细介绍。 这里只对程序存储器与 RAM

作一下说明。单片机程序代码经过编译(C 程序)或汇编(汇编程序)后,要把编译或汇编

得到的代码文件(一般来说编译得到 hex 格式文件、汇编得到 bin 格式文件)烧写到单片机

内,存放这个程序的地方就是程序存储器。显而易见,单片机的程序存储器越大,我们就可

以把越大、越复杂的程序放进去。如果我们编写的程序太大,那么单片机的程序存储器就有

可能会放不下这个程序。这时,解决办法就只有精简代码、外接程序存储器(前提是所用的

单片机支持使用外部程序存储器)或采用程序存储器容量更大的单片机。RAM 是单片机程序

运行时存放变量的地方,常量也可以放在 RAM 中。C51 中的 RAM 大小为 128 字节,这就是说

单片机程序中最多只能同时存在 128 个 unsigned char 型的变量或 64 个 unsigned int 型的

变量(在 Keil 环境中,int 型变量的长度为 16 位,这与 VC 的 32 位不一样)或者是相应的

中国科学技术大学业余无线电协会 各种不同类型变量的组合。 可以看出, 单片机程序所允许的规模比 Windows 或其它操作系统环境下的程序要小得多。编写单片机程序时一定要注意不要滥用资源。

S51 与 S52 分别是 C51、C52 的换代产品。从用户的角度看,S5x 单片机比相对应的 C5x

单片机多了看门狗与在线编程 (ISP) 功能, 另外最高运行速度有所增加 (C5x 最高支持 24MHz

的时钟频率, 而 S5x 最高支持 33MHz 的时钟频率, 但市面上比较容易买到的 S5x 单片机仍只

最高支持 24MHz 的时钟频率)。看门狗的使用在后面会有详细介绍,我们来看看单片机的在线编程(ISP)功能。要把程序烧写到 AT89C 系列单片机中, 最常用的做法是把单片机插入专用的编程器中, 通过编程器把程序烧到单片机里。 这样做的麻烦之处是在调试程序时, 编程者对程序作出的每次修改,都要把单片机从电路中拔出来,插到编程器,烧好后又要把单片机重新插回电路板。可以想

象,这种工作是吃力不讨好的。利用 S5x 单片机的 ISP 功能,我们就无须来回插拔单片机,

只要在电路中把单片机的 ISP 编程引脚接出来, 并且这几个引脚所接的外围电路对 ISP 没有

影响,就可以用 ISP 编程器对单片机进行烧写了。另外,支持 AT89C 系列单片机的编程器成

本要比 ISP 下载线高最少几倍。一根并口 ISP 下载线的成本仅几元钱。

除了 S 系列、C 系列外,atmel 公司的 MCS-51 兼容产品也有其它系列,它们的主要区

别在于供作电压范围,在此就不作介绍了。

值得注意的是,一片单片机可以反复擦写的次数是有限的,atmel 的 C 系列、S 系列单

片机的声称可重复擦写次数为 1000 次。

下面以 S52 为例,对其引脚功能一一作出说明。C51、C52 以及 S51 的引脚功能与 S52

大致相同,如有遇到不同的地方会用 粗斜体字 特别说明。

单片机程序指令的执行是以振荡器的振荡来驱动的。在MCS-51架构中,每12个振荡器

周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。

不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。

在MCS-51架构中,每12个振荡器

周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。

不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。因此,单

片机所接的振荡器频率越高,它执行指令的速度就越快。

型号同样为AT89S52的芯片,在其后面还有频率编号,有24MHz和33MHz等可选。读者在

购买和选用时要注意了。 如AT89S52 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯

片。单片机芯片后缀的详细含义可见相应单片机数据手册的Ordering Information。

复位 RST 9

复位

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将

使单片机复位,只要这个引脚保持高电平,单片机便一直处于复位状态。复位后P0~P3口均

置1,引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位引脚由高电平

变为低电平时,芯片从ROM的00H处开始运行程序。复位操作不会对内部RAM有所影响。常用

的复位电路如图2.4所示。当单片机上电时,由于电容的作用,RST引脚会处于短暂的高电平

状态,直到电容充电到一定程度时,RST引脚的电平会被8.2K的电阻拉低,单片机开始运行

程序。图中的按键为手动复位按键,当按下复位按键后,RST引脚会被1K的电阻上拉至高电

平, 单片机复位, 按键松开后, RST恢复低电平, 单片机重新从程序存储器的00H处运行程序。

手动复位按键在单片机的最小系统中并不是必须的,但对单片机的复位控制会方便些。

常用的复位电路

输入输出引脚

(1)P0端口[P0.0~P0.7] P0是一个8位漏极开路型双向I/O端口, 端口置1 (对端口写1)

时作高阻抗输入端端口置1 (对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。 P0端口要外接上拉电阻。

(2)P1端口[P1.0~P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接收低8位地址信息。除此之外P1端口还用于一些专门功能,

3)P2端口[P2.0~P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口

送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(4)P3端口[P3.0~P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱

动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存

储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,

其它的控制或复用引脚

(1)ALE/-PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的

低位字节。 即使不访问外部存储器, ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频

率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚

用于输入编程脉冲PROG。

(2)PSEN 29 该引脚是外部程序存储器的选通信号输出端。 当S52由外部程序存储器取

指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会

有脉冲输出。

(3)-EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。

要使S52只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。当使

用内部的程序存储器时,此引脚应与Vcc相连。当使用内部的程序存储器时,此引脚应与Vcc相连。对Flash存储器编程时,用于施加Vpp编程电压。

C2051 的引脚功能与 C51 相仿,在此不另外介绍了

相关问答

单片机 中& =!是什么意思_作业帮

[最佳回答]写完整一点才好回答呀,这三个符号和C语言中意思一样,比如X&=!(1

单片机 C语言中比如led=~led,波浪线什么意思?

...该操作为单目操作,即只有一个操作数。~与其后的数值或变量相结合,执行取反计算。取反是按照二进制位进行计算的,当原操作数的第i位为0时,结果的第i位为1...

单片机 P1=10101010和P1=0xaa结果不同我用语句P1=10101010结...

[最佳回答]keil中无法直接使用二进制数,就是说你写的10101010是十进制.可以找个头文件#include,之后就能写P1=b10101010了keil中无法直接使用二进制数,就是说...

单片机 C语言中比如led=~led,波浪线什么意思? - 芝芝雨 的回...

言位操作的一种,其操作符为~。该操作为单目操作,即只有一个操作数。~与其后的数值或变量相结合,执行取反计算。取反是按照二进制位进行计...该操作...

单片机 中的sbit=0x90中的0x和90分别指的是什么是什么意思?

这个是C51单片机特有的语句之一。sbit是C51扩展的变量类型,用来定义特殊功能寄存器的位变量。P1_0指的是芯片管脚上的标准输入输出管脚1.0。由于P1.0并不是...

单片机 四种方式初值计算公式?

定时中断初值计算方法是:1、确定定时时间化为微妙t。2、晶振频率以m为单位f。3、计算初值:s=65536-t*f/12比如11.0592m晶振,定时10毫秒t=10*1000=10000us...

单片机 设(70H)=30H什么意思?括号有什么含义?

括号里的表示内存地址号,加上括号表示按地址号寻址以指向该内存括号里的表示内存地址号,加上括号表示按地址号寻址以指向该内存

单片机 中(20H)=20H是什么意思?还有字节寻址和位寻址求大神们详解?

(20H)=20H在单片机20H地址里赋值20H字节寻址一般用不到吧位寻址是某个二进制位,不能直接访问全部的内存。字节寻址是8个二进制位,可以访问全部内存。(20H)...

单片机 inc是什么意思?

我想你的意思应该是(16H)=X,(17H)=Y,表示定义16H这个数据存储器单元中用来存放X,定义17H这个数据存储器单元中用来存放Y,INC16H的意思是把16H这个地址单...我...

单片机 的EA是什么意思?

EA=effectiveaddressEA引脚表示存取外部程序代码之意,低电平动作,当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。EA引脚必须...

猜你喜欢