第一章 单片机基础知识
§ 1-1 单片机概述
§ 1-2 数制及数码内容提要,
§ 1-1 单片机概述一、什么是单片机单片机就是单片微型计算机 (Single-Chip Microcomputer)。
微型计算机系统的硬件部分通常由五部分组成,
输入设备 运算器 输出设备控制器 存储器这种计算机系统通常由多块印刷电路板制成:
多板机主板内存条 CPU
CPUCPU芯片内存条存储器芯片输入输出接口芯片定时计数器芯片
A/D,D/A
芯片单板机印刷电路板单硅晶片
CPU存储器控制电路 定时器时钟电路
I / O口单片机
( 1) 体积小,重量轻;
( 2) 可靠性高,运行速度快,抗干扰能力强;
( 3) 控制功能强,使用灵活,性价比高;
( 4) 易扩展,易于开发;
( 5) 受集成度限制,片内存储器容量较小,一般内 ROM在 8KB以下,内 RAM在 256B以内。
单片机是应工业测控的需要而诞生的,它的结构与指令功能都是按照工业控制要求设计的,故又称单片微控制器 (Single
Chip Microcontroller)。
单片机特点:
以单片机为核心的应用系统广泛应用于:
家用电器;
工业过程控制;
仪器仪表;
智能武器;
航空、汽车等领域。
二、单片机系统的组成
CPU
AB
DB
CB
存储器 接口部件键盘 显示器 数码管 打印机定时计数器单片机系统硬件部分软件部分单片机芯片外围器件
CPU
内存中断控制逻辑通用接口运算器寄存器组控制器并行 I / O口串行 UART
定时 /计数器
ADC0809,DAC0832
8253
8251
8255A,8155
2764,6264指令系统应用程序
§ 1-2 数制及数码计算机只识别和处理数字信息,数字是以二进制数的形式表示的。
它易于物理实现,同时,资料存储、传送和处理简单可靠;运算规则简单,使逻辑电路的设计、分析、综合方便,使计算器具有逻辑性。
一、数制
1、常用数制
( 1.)十进制数:
1985 = 1000+900+80+5
= 1× 103+9× 102+8× 101+5× 100
特点,有 0 ~ 9 十个不同的符号。
逢十进一。
一般用下脚标 D 表示,如 1985D,或无下脚标。
( 2.)二进制数:
特点:有 0,1两个不同的符号。
逢二进一。二进制数的下脚标为 B
例如:对于整数,
1001B=1× 23+0× 22+0× 21+1× 20 = 9D
对于小数,
0.101B = 1× 2-1 + 0× 2-2 + 1× 2-3 = 0.625D
二进制数每一位的权是:以小数点分界,
…..2 4,23,22,2 1,2 0,2 -1,2 -2,2 - 3,……
( 3.)十六进制数:
有 0~ 9,A,B,C,D,E,F 共十六个不同的符号。
逢十六进位。用下脚标,H” 表示十六进制数。
例,327 H = 3× 162+2× 161+7× 160
= 807D
3AB,11H = 3× 162+A× 161+B× 160+1× 161+1× 16-2
=939,0664 D
2、数制的转换
( 1.) 二进制转换为十进制数方法,按权展开。
111.101B =1× 22+1× 2 1+1× 2 0 +1× 2 -1 +0× 2 -2
+1× 2 –3
=4+2+1+0.5+0.125
=7.625D
( 2.) 十进制数转换为二进制数方法,整数部分除二取余,小数部分乘二取整
45 余数
22 1
11 0
5 1
2 1
1 0
0 1
2
2
2
2
2
2
即 45 = ( 101101) 2
例 1、将十进制数 45转换成二进制数。
例 2:十进制小数部分的转换,乘二取整
0.6875
× 2
最高位 取 1 1.3750
0.375
× 2
取 0 0.750
× 2
取 1 1,50
0.5
× 2
最低位 取 1 1,0
从上至下写成从左至右 10110.6875D = 0,B
二进制数转换成八进制数与上述类似。
( 3.)十六进制数与二进制数之间的转换,
十六进制数转换为二进制:
9 A B,7 C 5 H
1001 1010 1011,0111 1100 0101B
二进制数转换十六进制数,
0001 1011 1110 0011,1001 0111 1000B
1 B E 3,9 7 8H
二、数码
1、机器数与真值机器只认识二进制数,0,1。
这是因为,电路状态常常有两种情况,
如:电路的通、断; 高电平、低电平;可用 0,1表示。
在机器中,这种 0,1,0,1的表现形式称为机器数。
机器数分为无符号数、带符号数。
无符号数如,00000001,10010011,01010010,……
等等,范围,00H ~ FFH。
有符号数如,+1010110B,-1101001B,等等
01010110B,11101001B
2、机器数的编码及运算对带符号数而言,有原码、反码、补码之分,计算机内一般使用补码。
( 1) 原码将数,数码化,,原数前,+” 用 0表示,原数前,-” 用 1表示,数值部分为该数本身,这样的机器数叫原码 。
设 X——原数;则 [X]原 = X( X0)
[X]原 = 2n-1 – X ( X0),n为字长的位数 。
如,[+3]原 = 00000011B
[-3]原 = 27 - ( -3) = 10000011B
0有两种表示方法,00000000—— +0
10000000 —— -0
原码最大、最小的表示,+127,-128
( 2) 反码规定正数的反码等于原码;负数的反码是将原码的数值位各位取反 。
[X]反 = X ( X0)
[X]反 =( 2n –1) + X ( X0) 如,
[+4]反 = [+4]原 = 00000100 B
[-4]反 =(28–1)+(-5)=11111111-00000101= 11111010 B
反码范围,-128 ~ +127
两个 0,+0 —— 00000000 B
-0 —— 11111111 B
运用补码可使减法变成加法 。
规定:正数的补码等于原码 。
负数的补码求法,1) 反码 + 1
2) 公式,[X]补 = 2n + X ( X<0)
如,设 X = - 0101110 B,则 [X]原 = 10101110 B
则 [X]补 = [X]反 + 1 = 11010001 + 00000001 = 11010010 B
如,[+6]补 = [+6]原 = 00000110 B
[-6]补 = 28 + ( -6) = 10000000– 00000110 = 11111010 B
8位补码的范围 –128 ~ +127。
0 的个数:只一个,即 00000000
而 10000000 B是 -128的补码 。
原码、反码、补码对照表:见下表
12
3
( 3) 补码补码的概念:现在是下午 3点,手表停在 12点,可正拨 3点,也可倒拨 9点 。 即是说 -9的操作可用 +3来实现,在 12点里,3,-9互为补码 。
八位二进制数所能表示的数据范围机器数 无符号数 原码 反码 补码
00000000 0 +0 +0 +0
00000001 1 +1 +1 +1
.,,,,
01111111 127 +127 +127 +127
10000000 128 -0 -127 -128
10000001 129 -1 -126 -127
.,,,,
.,,,,
11111110 254 -126 -1 -2
11111111 255 -127 -0 -1
( 4) 补码的运算当 X≥0时,[X]补 = [X]反 =[X]原
[ [X]补 ]补 = [X]原
[X]补 + [Y]补 = [ X+Y ]补
[ X-Y ]补 = [ X+( -Y) ]补例:已知 X=52 Y=38 求 X-Y
方法 1,减法:
X-Y = 52-38 =14
0 0 1 1 0 1 0 0
-) 0 0 1 0 0 1 1 0
0 0 0 0 1 1 1 0
方法 2,加法
X-Y = [ [ X-Y]补 ]补 = [ [X]补 +[-Y]补 ]补
=[ [52]补 +[ -38]补 ]补
=[ 14 ]补 =14
[52]补,0 0 1 1 0 1 0 0
[-38]补,+) 1 1 0 1 1 0 1 0
1 0 0 0 0 1 1 1 0
自然丢失计算机在做算术运算时,必需检查溢出,以防止发生错误
(5) 运算的溢出问题由于计算机中表示数据的字长 ( 位数 ) 有一定限制,
所以数据的表示应有一个范围 。
如字长 8位时; 补码范围 -128~+127
若运算结果超出这个范围,便溢出 。
例:
[98]补,0 1 1 0 0 0 1 0
[25]补,+) 0 0 0 1 1 0 0 1
[123]补 0 0 1 1 1 1 0 1 1
未溢出 0 0
Cs+1 Cs( 未溢出 )
[85]补,0 1 0 1 0 1 0 1
[47]补,+) 0 0 1 0 1 1 1 1
[132]补,1 0 0 0 0 1 0 0
溢出 0 1
Cs+1 Cs ( 溢出 )
错:两个正数相加和为负数。
[- 85]补,1 0 1 0 1 0 1 1
[- 47]补,+) 1 1 0 1 0 0 0 1
[- 132]补,1 0 1 1 1 1 1 0 0
溢出 1 0
Cs+1 Cs
错:两个负数相加和为正数。
[- 19]补,0 1 0 1 0 1 0 1
[- 79]补,+) 1 0 1 1 0 0 0 1
[- 98]补,1 1 0 0 1 1 1 1
未溢出 1 1
Cs+1 Cs
错:两个负数相加和为正数。
总之:结果正确 ( 无溢出 ) 时,Cs+1 = Cs
结果错误 ( 溢出 ) 时,Cs+1≠ Cs
溢出判断:溢出 = Cs+1Cs( 即结果是 0为无溢出; 1为有溢出)
1,( 6) 十进制数的编码对机器:二进制数方便,
对人,二进制数不直观,习惯于十进制数 。
在编程过程中,有时需要采用十进制运算,但机器不认识十进制数 。
怎么办?
可以将十进制的字符用二进制数进行编码:
0 0000 5 0101 1010 1111
1 0001 6 0110 1011
2 0010 7 0111 1100
3 0011 8 1000 1101
4 0100 9 1001 1110
这叫做二进制数对十进制编码 ——BCD码 。
上述每 4位二进制数表示一个十进制字符,这 4位中各位的权依次是:
8,4,2,1——8421 BCD码 。
BCD码的运算:
例,1 8
+) 3
2 1
0 0 0 1 1 0 0 0
+) 0 0 0 0 0 0 1 1
0 0 0 1 1 0 1 1
B是非 BCD码(错)
需进行十进制调整:
0 0 0 1 1 0 0 0
+) 0 0 0 0 0 0 1 1
0 0 0 1 1 0 1 1 (个位大于 9,应进 1)
+) 0 1 1 0 (加 6使进 1)
0 0 1 0 0 0 0 1 (结果形如 21)
BCD码加法规则:
两个 BCD数相加时,,某位,的和小于 10则保持不变;
两个 BCD数相加时,,某位,的和大于 9,则和数应加 6修正 。
BCD码减法规则:
两个 BCD数相减时,,某位,的差未发生借位,则差数保持不变;
两个 BCD数相减时,,某位,发生了借位,其差应减 6修正 。
这里,某位,指 BCD数中的,个位,,,十位,,,百位,,……
加法举例:
0 1 1 0 0 1 0 1 ( 6 5)
+) 1 0 0 1 0 1 1 1 ( 97)
1 1 1 1 1 1 0 0
+) 0 1 1 0 0 1 1 0 (加 66调整)
1 0 1 1 0 0 0 1 0 ( 162)
减法举例:
0 0 1 1 0 1 0 0 ( 3 4)
-) 0 0 0 1 0 1 0 1 ( 15)
0 0 0 1 1 1 1 1
-) 0 1 1 0 (减 6调整)
0 0 0 1 1 0 0 1 ( 29)
( 7) 字符信息的表示计算机能识别 0,1,0,1,…… ;这些 0,1,0,1,…… 有的代表数值,有的仅代表要处理的信息 ( 如字母,标点符号,
数字符号等文字符号 ),所以,计算机不仅要认识各种数字,
还要能识别各种文字符号 。 人们事先已对各种文字符号进行二进制数编码 。
如,美国信息交换标准码 ——ASCII码,用一个字节表示一个字符 。 低 7位是字符的 ASCII码值;最高位是通信时的校验位 。
行列
000 001 010 0 1 1 100 101 1 1 0 111
0000 N U L D L E SP 0 @ P
,
p
0001 S O H DC1 ! 1 A Q a q
0010 S T X DC2,2 B R b r
0 0 1 1 ETX DC3 # 3 C S c s
0100 E O T DC4 $ 4 D T d t
0101 E N Q N A K % 5 E U e u
0 1 1 0 A C K S Y N & 6 F V f v
0 1 1 1 BEL ETB

7 G W g w
1000 BS C A N ( 8 H X h x
1001 HT EM ) 9 I Y i y
1010 LF S U B *,J Z j z
1 0 1 1 VT E S C +;
K [ k {
1 1 0 0 FF FS
,<
L \ l
|
1 1 0 1 CR GS

= M ] m }
1 1 1 0 SO RS
· >
N

n

1111 SI US /

O _ o D E L
综上所述,
计算机中的数可以有各种不同的表示方法,
计算机中以一个字节为一个单元保存数据,
一个字节为 8位二进制数,可以有 256种组合,
也就是可以表示 256个数据,
我们称它为机器数,每一个机器数实际表示的是什么,
要看采用的是那种表示方法。