资源描述
第一章 计算机基础知识及MCS-51单片机硬件结构
1.1 数制与编码
在计算机中,任何命令和信息都是以二进制数据的形式存储的。本节将讲解常用的十进制、二进制、十六进制的含义及相互转换的方法。
1.1.1 二进制数
二进制数只有两个数字符号:0和1。计数时按“逢二进一”的原则进行计数。在计算机中,二进制数的每一位是数据的最小存储单位。将8位(bit)二进制数称为一个字节(B),字节是计算机存储信息的基本数据单位。存储器的容量常用以下单位表示:
1B=8bit
1024B=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
对于8位二进制数(D0~D7),各位所对应的值为
D7
D6
D5
D4
D3
D2
D1
D0
例如:二进制数10110111,按位权展开求和计算可得
=1×+0×+1×+1×+0×+1×+1×+1×
=128+0+32+16+0+4+2+1
=
对于含有小数的二进制数,小数点右边第一位小数开始向右各位的权值分别为
…
1.1.2 十六进制数
计算机在输入输出或书写时,可采用十六进制数表示相应的二进制数。十六进制数有16个数字符号,其中0~9与十进制数相同,剩6个为A~F,分别表示十六进制数的确10~15,计数时按“逢十六进一”的原则进行计数。
为了便于区别不同进制的数据,一般情况下可在数据后跟一后缀:
二进制数用“B”表示(如1001111B)
十六进制数用“H”表示(如3AH)
十进制数用“D”表示(如39D或39)
1.1.3 不同数制之间的转换
计算机中的数只能用二进制数表示,十六进制数适合读写方便的需要,日常生活使用的是十六进制数,计算机根据需要对各种进制进转换。
1.二进制数转换为十进制数
对任意二进制数均可按权展开将其转化为十进制数。例如:
=1×+0×+1×+1×+0×+1×+1×+1×
=128+0+32+16+0+4+2+1
=183D
2.十进制数转换为二进制数
十进制数转换为二进制数,可将整数部分与小数部分别进行转换,然后合并。。其中整数部分可采用“除2取余法”进行转换,小数部分可采用“乘2取整法”进行转换。
例如:将37D转换为二进制数。
2
37
1
低位(每一次余数为低位)
2
18
0
2
9
1
2
4
0
2
2
0
2
1
1
高位(直到商数等于0为止)
0
结果为37D=100101B。
3.二进制数转换为十六进制数
因为=16,所以4位二进制数相当于1位十六进制数,二进制、十进制、十六进制对应数的转换关系见表1-1。
表1-1 二进制、十进制、十六进制对应转换表
十进制
二进制
十六进制
0
0000
0
1
0001
1
2
0010
2
3
0011
3
4
0100
4
5
0101
5
6
0110
6
7
0111
7
8
1000
8
9
1001
9
10
1010
A
11
1011
B
12
1100
C
13
1101
D
14
1110
E
15
1111
F
例如:1000101B=45H
1.1.4 ASCLL码
对于计算机非数值型数据不能直接装入计算机,必须将其转换为特定的二进制代码(即将其编码),以二进制代码所表示的字符数据的形式装入计算机。ASCLL码是一种国际标准信息交换码,它利用7位二进制代码来表示字符,再加上1位校验位,故在计算机中用1个字节8位二进制数来表示一个字符。(ASCLL码表可查资料)
1.2 单片机与嵌入式系统组成
单片机又称单片微控制器,其基本结构是将微型计算机的基本功能部件:中央处理机(CPU)、存储器、输入接口、输出接口、定时器/计算器、中断系统等全部集成在一个半导体芯片上。
1.3 MCS-51单片机总体结构
1.3.1 MCS-51 单片机总体结构框图及功能
单片机内部各功能部件通常都挂靠在内部总线上,它们通过内部总线传送数据信息和控制信息,各功能部件分时使用总线,即所谓的内部单总线结构。图2-1为8051单片机内部基本结构框图。
外部事件计数
外时钟源
振荡器和时序OSC
程序存储器4KB ROM
数据存储器256B RAM/SFR
振荡器和时序OSC
8051
CPU
64KB 总线扩展控制器
可编程I/O
可编程全双工串行口
外中断
内中断
控制
并行口
串行通信
图1-1 8051单片机内部基本结构框图
1.CPU
CPU是单片机内部的核心部件,是单片机的指挥和控制中心。从功能上看,CPU可分为运算器和控制器两大部分。
控制器主要包括程序计算器PC、指令寄存器、指令译码器及定时控制电路等。
PC是一个16位的专用寄存器,用来存放CPU要执行的存放在程序存储器中的下一条指令地地址。当系统上电复位后,PC的内容为0000H,所以单片机主控制程序的首地址自然应定位为0000H。
运算器由算术逻辑运算部件ALU、累加器ACC、程序状态字寄存器PSW等组成。程序状态寄存器PSW用于寄存当前指令执行后的某些状态信息,PSW各位定义见表1-2。
表1-2 PSW各位定义
D7
D6
D5
D4
D3
D2
D1
D0
Cy
AC
F0
RS1
RS0
OV
F1
P
Cy:进位/借位标志位。
AC:辅助进位标志。
F0:用户标志位。
RS0及RS1寄存器组选择控制位。RS0、RS1与寄存器组的对应关系见表1-3。
表1-3RS0、RS1与寄存器组的对应关系见表
RS1
RS2
寄存器组
片内RAM地址
指令助符
0
0
0组
00H~07H
R0~R7
0
1
1组
08H~0FH
R0~R7
1
0
2组
10H~17H
R0~R7
1
1
3组
18H~1FH
R0~R7
OV:溢出标志。
2.RAM
RAM为单片机内部程序存储器,其存储器空间包括随机存储器区、寄存器区、特殊功能寄存器及位寻址区。
3.ROM
ROM为单片机内部程序存储器。
4.并行I/O口
P0~P3是四个8位并行I/O口,每个口既可作为输入,也可作为输出。
5.定时器/计数器
6.中断系统
MCS-51单片机有5个中断源。
7.串行接口
串行接口提供对数据各位按序一位一位地传送。MCS-51中的串行接口是一个全双工通信接口,即能同时进行发送和接收数据。
8.时钟电路
CPU执行指令的一系列动用都是在时序电路的控制下一拍一拍进行的,时钟电路用于产生单片机中最基本的时间单位。
1.3.2 MCS-51 引脚功能
VCC:芯片电源,接+5V。
VSS:接地端。
XTAL1、XTAL2:晶体振荡电路反相输入端和输出端。
ALE/PROG:地址锁存允许/片内EPROM编程脉冲
ALE功能:用来锁存P0口送出的低8位地址
PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
PSEN:外ROM读选通信号。
RST/VPD:复位/备用电源。 在Vcc掉电情况下,接备用电源。
EA/Vpp:内外ROM选择/片内EPROM编程电源。
P0、P1、P2、P3口,共32个引脚。均可作为普通I/O口使用,但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 外部数据存储器读选通(低电平有效)
P0口有三个功能
1.外部扩充存储器时,当作数据总线(D0~D7)。
2.外部扩充存储器时,当作低8位地址总线(A0~A7)。
3.不扩充时,可做一般I/O使用,但内部无上拉电阻,作为输入输出时应在外部接上拉电阻。
P1只做I/O使用,其内部有上拉电阻。
P2有两个功能
1.扩充外部存储器时,当作高8位地址总线(A8~A15)使用。
2.做一般I/O使用,其内部有上拉电阻。
1.4 CS-51存储结构及位处理器
由于时间有限,这一部分内容只作简要介绍。
从物理结构上划分方法如下:
(1).片内程序存储器
(2).片处程序存储器
(3).片内数据存储器
(4).片外数据存储器
1.4.1 程序存储器
程序存储器用于存放编好的程序及程序中常用的常数,程序存储器由ROM构成,单片机掉电后ROM内容不会丢失。
在程序存储器中,MCS-51定义7个单元用于特殊用途。
0003H:外部中断0中断入口地址
000BH:定时器0中断入口地址
0013H: 外部中断1中断入口地址
001BH: 定时器1中断入口地址
0023H: 外部中断2中断入口地址
1.4.1 数据存储器
数据存储器用于放程序运算的中间结果、状态标志等。数据存储器由RAM构成,一旦掉电,其数据将丢失。
图1-2 片内数据存储器的配置
1.通用寄存器区
在低128的RAM区中,将地址00~1FH共32个单元设为工作寄存器区,这32个单元又分为4组,每组由8个单元按序组成通用寄存器R0~R7。
2.可位寻址区
即可对字节的某一位直接进行处理,如20H.4等。
3.只能字节寻址的RAM区
在30H~7FH区的80个RAM单元为用户RAM区,只能按字节存取。堆栈区一般设在些区域。堆栈指针SP指向栈顶单元,堆栈按“先入后出,后入先出”的原则进行。
1.4.2 专用寄存器区(SFR)
在片内数据存储器的80H~FFH单元(高128B)中,有21个单元作为专用寄存器,又称为特殊功能寄存器。如下表。
表1-4 特殊功能寄存器(SFR)地址
寄存器
位地址及位名
字节地址
D7
D6
D5
D4
D3
D2
D1
D0
B
F7H
F6H
F5H
F4H
F3H
F2H
F1H
F0H
F0H
ACC
E7H
E6H
E5H
E4H
E3H
E2H
E1H
E0H
E0H
PSW
D7H
D6H
D5H
D4H
D3H
D2H
D1H
D0H
D0H
Cy
AC
F0
RS1
RS0
OV
F1
P
IP
BFH
BEH
BDH
BCH
BBH
BAH
B9H
B8H
B8H
PS
PT1
PX1
PT0
PX0
P3
B7H
B6H
B5H
B4H
B3H
B2H
B1H
B0H
B0H
P3.7
P3.6
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
IE
AFH
AEH
ADH
ACH
ABH
AAH
A9H
A8H
A8H
EA
ES
ET1
EX1
ET0
EX0
P2
A7H
A6H
A5H
A4H
A3H
A2H
A1H
A0H
A0H
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
SBUF
99H
SCON
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
98H
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
P1
97H
96H
95H
94H
93H
92H
91H
90H
90H
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
TH1
8DH
TH0
8CH
TL1
8BH
TL0
8AH
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
89H
TCON
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
88H
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
PCON
87H
DPH
83H
DPL
82H
SP
81H
P0
87H
86H
85H
84H
83H
82H
81H
80H
80H
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
1.5 MCS-51工作方式
MCS-51单片机的工作方式包括:复位方式、程序执行方式、节电方式和EPROM的编程和校验方式。
复位方式:MCS-51的复位电路包括上电复位电路和按键(外部)复位电路,如图1-3所示。
图1-3 MCS-51复位电路
程序执行方式是单片机的基本工作方式,通常可分为连续执行和单步执行两种工作方式。
节电方式:一种能减少单片机功耗的工作方式,通常有空闲方式和掉电方式两种。
1.6 MCS-51单片机的时序
计算机执行指令的过程分为取指令、分析指令、和执行指令三个步骤,每个步骤又由许多微操作组成,这些微操作必须在一个统一的时钟脉冲的控制下才能按照正确的顺序执行。
时钟脉冲由时钟振荡器产生,通常振荡器输出的时钟频率为为6~16MHz。MCS-51时钟电路如下图所示。
图1-4 MCS-51时钟电路图
1.时钟周期
时钟周期也称为振荡周期,即振荡器的振荡频率的倒数,是时序中最小的时间单位。例如:时钟频率为6MHz,刚它的时钟周期应是166.7ns。时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏。
2.机器周期
执行一条指令的过程可分为若干个阶段,每个一个阶段完成一规定的操作,完一个规定操作所需要的时间称为一个机器周期。一个机器周期包含12个时钟周期。
3.指令周期
指令周期定义为执行一条指令所用的时间。MCS-51单片机指令可分为单周期指令、双周期指令、四周期指令三种。只有乘法指令和除法指令是四周期指令。
1.6 最小系统
最小系统电路图如下图所示:
图1-5 最小系统电路图
第二章 MCS-51指令系统及汇编语言程序设计
2.1 指令系统简介;
MCS-51系列单片机指令系统共有111条指令,其中有49条单字节指令、45条双字节指令和17条三字节指令。MCS-51汇编语言指令格式由以下向个部分组成:
[标号:] 操作码 [目的操作数] [源操作数] [:注释]
其中,[]中的项表示为可选项
例如:LOOP: MOV A,Ri :A←Ri
2.2 寻址方式;
所谓寻址方式就是寻找或获得操作数的方式。指令的一个重要组成部分是操作数。由寻址方式指定参与运算的操作数或操作数所在单元的地址。寻址方式的一个重要问题是:何在整个存储范围内,灵活、方便地找到所需要的单元。
1.立即寻址
在立即寻址方式中,操作数直接出现在指令中,指令的操作数可以是8位或16位数。例如:MOV A,#20H;
MOV DPTR,#20000H
2.直接寻址
在直接寻址方式中,操作数的单元地址直接出现在指令中,这一寻址方式可进行内存储单元的访问。它包括:
⑴.特殊功能寄存器地址空间。这也是唯一可寻址特殊功能寄存器(SFR)的寻址方式。例如:
MOV TCON,A
MOV A, P1
⑵.内部RAM的低128字节
例如:MOV A,76H
3.寄存器寻址
在寄存器寻址方式中,寄存器中的内容就是操作数。
例如:MOV A,Ri 。假若Ri中存放在操作数为3BH,则指令执行结果是A=3BH。
4.寄存器间接寻址
在寄存器间接寻址方式中,指定寄存器中的内容是操作数的地址,该地址对应存储器单元的内容才是操作数。
例如:MOV A,@R0
5.变址寻址
变址寻址方式是以程序指针PC或数据指针DPTR为基址寄存器,以累加器A作为变址寄存器,两者内容相加(即基地址+偏移量)形成16位的操作数地址,变址寻址方式主要用于访问固化在程序存储器中的某个字节。
变址寻址方式有两类:
⑴.用程序指针PC作基地址,A作变地址,形成操作数地址:@A+PC。
⑵.用数据指针DPTR作基地址,A作变址,形成操作数地址:@A+DPTR。
6.相对寻址
相对寻址是以程序计数器PC的当前值作为基地址,与指令中的第二字节给出的相对偏移量rel进行相加,所得和为程序的转移地址。相对偏移量rel是一个用补码表示的8位有符号数,rel的范围为+127~128字节之间。
例如:SJMP 08H
JZ 30H
7.位寻址
位寻址给出的是直接地址。例如:SETB ET0
2.3 指令系统;
单片机指令分为五类:
1, 数据传送类;
2, 算术远算类;
3, 逻辑转移类;
4, 控制转移类;
5, 位操作。
1, 数据传送类(29条)
属于这一类的助记符有:MOV 、MOVC、MOVX、
XCH、XCHD、
PUSH、POP
①、MOV A ,Rn ②、MOV @Ri , A
@Ri Direct
Direct #data
#data
③、MOV Rn ,A ④、MOV Direct1 , A
Direct #data
#data Direct2
@Ri
Rn
注:★ 书写时,不要漏掉“,”号。 ★执行后不影响任何标志位。
例:设片内RAM 30H单元内容为40H,第40H单元内容为10H,P1口作为输入口,其输入数据为CAH,求经下列程序段执行后的结果。
MOV R0, #30H
MOV A, @R0
MOV R1, A
MOV B, @R1
MOV @R1, P1
MOV P2, P1
⑤、MOVX A , @DPTR ⑥、MOVC A ,@A+DPTR
@Ri @A+PC
⑦、MOVX @DPTR , A
@Ri , A
⑧、XCH A ,Rn ⑨、XCHD A ,@Ri
@Ri @DPTR Direct
⑩、MOV DPT,#DATA16 ⑩、PUSH Direct
POP Direct
注:由于复位后,SP的值为07H,这就会出现堆栈区与工作寄存器区两者重叠。为此,必须在程序的开头部分通过指令重新定义堆栈区域。如:MOV SP, #70H
2、算术运算类(24条形码)
属于这一类的助记符有: ADD,ADDC,INC
SUBB,DEC
MUL,DIV,DA
①、ADD Rn ②、INC A
ADDC A ,@Ri Rn
SUBB #DATA @Ri
DIRECT DIRECT
DPTR
③、DEC A ④、 MUL AB
Rn DIV AB
@Ri DA A
DIRECT
3、逻辑运算类(24条)
属于这一类的助记符有:ANL,ORL,XRL,CPL,CLR
① ANL A Rn ANL A,@Ri ANL A DIRECT ANL A #DATA
② ANL direct, A ANL direct, #data
③ ORL A, Rn ORL A, direct
ORL A, @Ri ORL A, #data
④ ORL direct, #data ORL direct, A
⑤ XRL A, Rn XRL A, direct
XRL A, #data XRL A, @Ri
⑥ XRL direct, A XRL direct, #data
③ CPL A
CLR A
RL A
RLC A
RR A
RRC A
SWAP A
4、控制转移类(17条)
属于这一类的助记符有:JMP,LJMP,AJMP,
LCALL,ACALL,SJMP
JZ,JNZ,DJNZ,CJNE
①、JMP @A+DPTR ②、NOP
LJMP addr16 RET
AJMP addr11 RETI
LCALL addr16 ③、JZ rel
ACALL addr11 JNZ rel
SJMP rel (地址范围为) DJNZ Rn , rel
Direct , rel
④、CJNE Rn , #DATA, rel
A, #DATA, rel
@Ri, #DATA, rel
A, Direct, rel
5、位操作指令(17条)
属于这一类的助记符有:JB,JNB,JBC,CLR,SETB,CPL,ANL,ORL,MOV
①、CLR C ②、SETB C
BIT BIT
③、CPL C ④、ANL C ,BIT
BIT /BIT
⑤、ORL C ,BIT ⑥、MOV C ,BIT
C ,/BIT BIT ,C
⑦、JB BIT ,REL ⑧、JC rel
JNB BIT ,REL JNC rel
JBC BIT , REL、
2.4 汇编语言程序设计基础;
程序设计语言可分为三类:机器语言、汇编语言、高级语言。
机器语言:当指令和地址采用二进制代码表示时,称之为机器语言。CPU直接识别和执行的是机器语言代码,但是,机器语言对人们来说不便于记忆和交流,而且极易出错,故一般不采用机器语言直接编程。但是,对于任何其他语言编写的程序,或者说计算机所执行的每一操作,最终都必须转换为机器语言的指令代码,CPU才能识别和执行。
汇编语言:是一种采用助记符来表示的机器语言,即用助符号来代表指令的操作码和操作数,用标号或符号代表地址、常数或变量。这种用助记符编写的程序称为源程序,汇编语言必须翻译成机器语言的目标代码(目标程序),计算机才能执行。
高级语言:使用接近人们习惯的自然语言的英语缩写和数学表达的形式编写程序,这样就可以大大提高编程的效率。用高级语言编写的源程序,需要经编译程序翻译成机器语言表示的目标程序,计算机方能执行。
2.5 伪指令
MCS-51单片机汇编语言中常用的伪指令如下:
1.ORG(汇编起始地址)
格式:ORG 16位地址
2.END(结束汇编)
格式:END
功能:汇编语言源程序的结束标志,即通知汇编程序不再继续往下汇编。
3.EQU(等值)
格式:标志符 EQU 数或汇编符号
功能:把数或汇编符号赋给标识符,且只能赋值一次。
如:LOOP EQU 20H
4.DB(定义字节)
格式: [标号:] DB 项或项表
功能:将项或项表中的字节(8位)数据依次存入标号所示的存储单元中。使用时,项与项之间用“,”分隔;字符型数据用“”括起来;数据可采用二进制、十六进制及ASCLL码等形式表示。
例如:TAB: DB 12H,0AFH,“9”
5.DW(定义字)
格式:[标号:] DW 项或项表
功能:功能:将项或项表中的字(16位)数据依次存入标号所示的存储单元中。
例如:TAB: DW 0112H,04AFH
6.DS(定义存储单元)
格式:标号:DS 数字
功能:从标号所指示的单元开始,根据数字的值保留一定数量的字节存储单元,留给以后存储数据用。
例如:SPACE:DS 10
7.BIT(地址符号命令)
格式:标识符 BIT 位地址
功能:将位地址赋以标识符。
例如:A1 BIT P1.0
经以上定义后,A1就可当作位地址来使用。
MOV C,A1
2.6 程序设计实例;
程序1:求符号函数。
设X、Y分别为30H、31H单元。
分析:由设计要求可以看出,程序有三条路径需要选择,因此需要采用分支程序设计,其流程图如图2-1所示。
开始
0→Y
X=0?
X>0?
2→Y
1→Y
结束
Y
Y
N
N
图2-1 符号函数流程图
程序如下:
ORG 2000H
X EQU 30H
Y EQU 31H
MOV A, X
JZ LOOP0 ;A为0值,转LOOP0
JB ACC.7, LOOP1 ;最高位为1,为负数
MOV A, #01H ;A←1
SJMP LOOP0
LOOP1:MOV A, #02H ;A←2
LOOP0: MOV Y, A ;Y←A
SJMP $
END
程序2:在内部RAM的42H开始的连续单元中存放一组8位无符号数,该数组长度n(n≤3DH)存放在41H中,找出这组数中的最大数,并将其存入内部RAM的40H单元中。
分析:可以先将第一个数组元素送40H单元内,然后将数组中的其它数依次与其比较,若大于40H中的值,则取代它再比较下一位。直到所有元素都比较完。此时40H单元中即为最大值。
程序:
ORG 2000H
MOV R0, #42H
MOV 40H,@R0
DEC 41H
LOOP: INC R0
MOV A, @R0
CJNE A, 40H, COMP
COMP: JC NEXT
MOV 40H,A
NEXT: DJNZ 41H,LOOP
SJMP $
END
程序3:编写程序实现延时1min
分析:可利用CPU中每执行一条指令都有固定的时序这一特征,令其重复执行某些指令从而达到延时的目的。
程序:
DELAY: MOV R7, #0E6H 1
LOOP1: MOV R6, #0FFH 1
LOOP2:MOV R5, #0FFH 1
LOOP3: NOP 1
NOP 1
DJNZ R6, LOOP3 2
DJNZ R6, LOOP2 2
DJNZ R7, LOOP1 2
RET 2
程序中:
内循环一次所需机器周期数=(1+1+2)个=4个。
内循环共循环255次的机器周期数=4×255个=1020个。
次外循环一次所需机器周期数=(4×255+1+2)个=1023个。
次外循环共循环255次,所以该子程序总的机器周期数=(255×1023+1+2)个=260868个。
外循环一次所需机器周期数=(260868+1+2)个=260871个。
外循环共循环255次,所以该子程序总的机器周期数=(230×260871+1+2)个=60,000,033个。
因为一个机器周期为12个时钟周期,所以该子程序延时间=260868×12/。
程序4:编写一个循环闪烁灯程序,用P1口的P1.0~P1.7分别控制8个发光二极管的阴极,每次其中某个灯闪烁点亮2次,依次进行,循环不止。
程序:
MOV A, #0FEH
SHIFT: LCALL FLASH
RR A
SJMP SHIFT
FLASH: MOV R2, #02H
FLASH1:MOV P1, A
LCALL DELAY
MOV P1, #00H
LCALL DELAY
DJNZ R2, FLASH1
RET
思考题:
题1:编写一个循环闪烁灯程序,用P1口的P1.0~P1.7分别控制8个发光二极管的阴极,每次其中两个点亮,依次进行,循环不止。
题2:编写一个循环闪烁灯程序,用P1口的P1.0~P1.7分别控制8个发光二极管的阴极,由两边向中间的灯依次点亮,循环不止。
题3:在内部RAM的42H开始的连续单元中存放一组8位无符号数,该数组长度n(n≤3DH)存放在41H中,找出这组数中的最小数,并将其存入内部RAM的40H单元中。
第三章 C51及程序设计
3.1 C语言的重要知识点
3.1.1 C的数据类型
C语言中数据有常量和变量之分,它们分别属于以下这些类型。常量:在程序运行过程中,其值不能改变的量。如3、-1、‘a’、经#define PRICE 30后,PRICE为一常量,其值为30。变量:其值可以改变的量。一个变量应该有一个名字,在内存中占据一定的存储单元,如图。 3
a
变量名
变量值
存储单元
C语言规定变量必须先定义后使用。标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须为字母或下划线。
习惯上,符号常量名用大写,变量名用小写,以示区别。
数据类型
定义
如
基本类型
整型
整形常量:即整常数。
12、0x12
整形变量:定义符为int、signed int、Unsigned int、signed short int、Unsigned short int、long int、Unsigned long int
字符型
字符型常量:用单撇号括起来的一个字符。
‘a’、‘?’
字符串型常量:用双撇号括起来的一个字符。
“china”、“ 123.2”
字符型变量:定义符为char
实型
实型常量:分为十进制小数形式和指数形式
123.45、123e3
实型变量:定义符为float、double、long double
枚举类型
构造类型
数组类型
结构体类型
共用体类型
指针类型
空类型
一、 算术运算符和算术表达式
C的运算符有以下几类:
1.算术运算符: (+ - * / %)
2.关系运算符: (> < == = >= <= !=)
3.逻辑运算符: (! && ||)
4.位运算符: (<< >> ~ | ∧(异或) &)
5.赋值运算符: ( = )
6.条件运算符: (? :)
7.逗号运算符: ( , )
8.指针运算符: (* &)
9.自增、自减运算符: (++ --)
二、逗号运算符和逗号表达式
逗号表达式形式:表达式1,表达式2
3.1.2 C语句
一、C语句可以分为以下5类
1.控制语句:C语言有9种控制语句,它们是:(~表示内嵌的语句)
(1).if~else~
(2).for()~
(3).while()~
(4).do~while()
(5).continue
(6).break 结束整个循环
(7).switch 结束本次循环
(8).goto
(9).return
2.函数调用语句 如:printf(“This is a C statement”)
3.表达式语句 如:赋值语句
4.空语句 如: ;
二、数据的输入输出
C语言函数库中有一批“标准输入输出函数”,它们是:putchar(输出字符),getchar(输入字符),printf(格式输出),scanf(格式输入),puts(输出字符串),gets(输入字符串。
三、选择结构程序设计
1.If语句有三种形式
①.If(表达式)语句 如:if(x>y)printf(“%d”,x);
②.If(表达式) 语句1 else 语句2
如:if(x>y)printf(“%d”,x); else printf(“%d”,y);
③.If(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
else 语句n
2.条件运算符:
格式: 表达式1?表达式2:表达式3
如:max=( a > b )? a : b
3.switch语句
格式:switch(表达式)
{case 常量表达式1:语句1
case 常量表达式2:语句2
case 常量表达式n:语句n
default :语句n+1
}
四、循环控制语句
构成循环语句的语句有:
1.Goto语句和if语句构成循环;P107
2.while语句
格式:while(表达式) 语句 P107
3.do-while语句
格式:do 循环体语句
While (表达式);P109
4.for语句
格式:for(循环变量赋值初值;循环条件;循环变量增值)语句
如:for(i=1;i<=100;i++) sum=sum+i;
五、数组
一维数组定义方式:类型说明符 数组名[常量表达式];
如:int a[10]
二维数组定义方式:类型说明符 数组名[常量表达式] [常量表达式]; 如: float a[2][3],b[3][3]
六、函数
一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由函数完成的。一个C程序可由一个主函数
展开阅读全文