单片机C51程序结构.docx
- 文档编号:7668497
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:12
- 大小:25.41KB
单片机C51程序结构.docx
《单片机C51程序结构.docx》由会员分享,可在线阅读,更多相关《单片机C51程序结构.docx(12页珍藏版)》请在冰豆网上搜索。
单片机C51程序结构
1C51程序流程与控制
C语言是一种结构化的编程语言。
其基本元素是模块,它是程序的一部分,只有一个入口和一个出口,不允许有中途插入或从模块的其它路径退出。
C语言有3种基本结构:
顺序结构;
选择结构;
循环结构;
1.1顺序结构程序
顺序结构的程序是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,如图所示,程序先执行A操作,再执行B操作,两者是顺序执行的关系。
选择结构程序
此结构中必包含一个判断框,根据给定的条件P是否成立而选择执行A框或B框。
选择结构由条件语句构成。
条件语句
条件语句又被称为分支语句,其关键字是由if语句或switch/case构成。
C语言提供了3种形式的if语句结构:
用法1:
if(条件表达式)语句
描述:
当条件表达式的结果为真时,就执行语句,否则就跳过。
例:
if(a>=3)
b=0;
用法2:
if(条件表达式)
语句1
else
语句2
描述:
当条件表达式成立时,就执行语句1,否则就执行语句2。
例:
if(a==b)
a++;
else
a--;
当a等于b时,a加1,否则a-1。
用法3:
if(条件表达式1)
语句1;
elseif(条件表达式2)
语句2;
elseif(条件表达式3)
语句3;
elseif(条件表达式n)
语句n;
else
语句m;
描述:
如果表达式1为“真”,则执行语句1,退出if语句;否则去判断表达式2,如果为“真”,则执行语句2,退出if语句;否则去判断表达式3···最后,如果表达式n也不成立,则执行else后面的语句m。
else和语句m也可省略不用。
例:
if(a>=3)
b=10;
elseif(a>=2)
b=20;
elseif(a>=1)
b=30;
else
b=0;
switch/case语句结构
我们学习了条件语句,用多个条件语句可以实现多方向条件分支,但是可以发现使用过多的条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读。
这时使用开关语句同样可以达到处理多分支选择的目的,又可以使程序结构清晰。
它的语法为下:
switch(表达式)
{
case常量表达式1:
语句1;break;
case常量表达式2:
语句2;break;
case常量表达式3:
语句3;break;
case常量表达式n:
语句n;break;
default:
语句m
}
描述:
运行中switch后面的表达式的值将会做为条件,与case后面的各个常量表达式的值相对比,如果相等时则执行后面的语句,再执行break(间断语句)语句,跳出switch语句。
如果case没有和条件相等的值时就执行default后的语句。
当要求没有符合的条件时不做任何处理,则可以不写default语句。
循环结构程序
循环程序的作用就是用来实现需要反复执行某一部分程序行的操作,有如下两类循环结构。
当型循环
在这种结构中,当判断条件P成立时,执行循环体A部分。
执行完毕回来再一次判断条件P。
如果条件成立则继续循环A,否则退出循环。
通常用while循环语句来实现,其形式如下:
While(表达式)
{
循环语句;
}
描述:
当表达式为非0(“真”)时,执行while中的内嵌循环语句。
直到型循环
在这种结构中,先执行循环A部分,然后判断条件P成立时,执行循环体A部分。
执行完毕回来再一次判断条件P。
如果条件成立则继续循环A,否则退出循环。
通常用do-while循环语句来实现,其形式如下:
do
{
循环语句;
}
while(表达式)
描述:
先执行do-while中的内嵌循环语句,再判断表达式表达式为非0(“真”)时,继续执行内嵌循环语句。
for循环语句
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
{
循环语句;
}
描述:
①先求解表达式1;
②求解表达式2,其值为“真”时,则执行for语句中的循环语句,然后执行第③步,如果表达式2,其值为“假”时,则结束循环,转到第⑤步。
③求解表达3;
④转回第②步继续执行;
⑤退出for循环。
表1-1C51中的关键字
关键字
用 途
说 明
auto
存储种类说明
用以说明局部变量,缺省值为此
break
程序语句
退出最内层循环
case
程序语句
Switch语句中的选择项
char
数据类型说明
单字节整型数或字符型数据
const
存储类型说明
在程序执行过程中不可更改的常量值
continue
程序语句
转向下一次循环
default
程序语句
Switch语句中的失败选择项
do
程序语句
构成do..while循环结构
double
数据类型说明
双精度浮点数
else
程序语句
构成if..else选择结构
enum
数据类型说明
枚举
extern
存储种类说明
在其他程序模块中说明了的全局变量
flost
数据类型说明
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句
构成if..else选择结构
int
数据类型说明
基本整型数
long
数据类型说明
长整型数
register
存储种类说明
使用CPU内部寄存的变量
return
程序语句
函数返回
short
数据类型说明
短整型数
signed
数据类型说明
有符号数,二进制数据的最高位为符号位
sizeof
运算符
计算表达式或数据类型的字节数
static
存储种类说明
静态变量
struct
数据类型说明
结构类型数据
swicth
程序语句
构成switch选择结构
typedef
数据类型说明
重新进行数据类型定义
union
数据类型说明
联合类型数据
unsigned
数据类型说明
无符号数数据
void
数据类型说明
无类型数据
volatile
数据类型说明
该变量在程序执行中可被隐含地改变
while
程序语句
构成while和do..while循环结构
表1-2存储器类型
存储器类型
说明
data
直接访问内部数据存储器(128字节),访问速度最快
bdata
可位寻址内部数据存储器(16字节),允许位与字节混合访问
idata
间接访问内部数据存储器(256字节),允许访问全部内部地址
pdata
分页访问外部数据存储器(256字节),用MOVX@Ri指令访问
xdata
外部数据存储器(64KB),用MOVX@DPTR指令访问
code
程序存储器(64KB),用MOVC@A+DPTR指令访问
表1-3C51编译器的扩展关键字
关键字
用 途
说 明
bit
位标量声明
声明一个位标量或位类型的函数
sbit
位标量声明
声明一个可位寻址变量
Sfr
特殊功能寄存器声明
声明一个特殊功能寄存器
Sfr16
特殊功能寄存器声明
声明一个16位的特殊功能寄存器
data
存储器类型说明
直接寻址的内部数据存储器
bdata
存储器类型说明
可位寻址的内部数据存储器
idata
存储器类型说明
间接寻址的内部数据存储器
pdata
存储器类型说明
分页寻址的外部数据存储器
xdata
存储器类型说明
外部数据存储器
code
存储器类型说明
程序存储器
interrupt
中断函数说明
定义一个中断函数
reentrant
再入函数说明
定义一个再入函数
using
寄存器组定义
定义芯片的工作寄存器
表1-4常用转义字符表
转义字符
含义
ASCII码(16/10进制)
\o
空字符(NULL)
00H/0
\n
换行符(LF)
0AH/10
\r
回车符(CR)
0DH/13
\t
水平制表符(HT)
09H/9
\b
退格符(BS)
08H/8
\f
换页符(FF)
0CH/12
\'
单引号
27H/39
\"
双引号
22H/34
\\
反斜杠
5CH/92
表1-5KEILuVision2C51编译器所支持的数据类型
数据类型
长 度
值 域
unsignedchar
单字节
0~255
signedchar
单字节
-128~+127
unsignedint
双字节
0~65535
signedint
双字节
-32768~+32767
unsignedlong
四字节
0~95
signedlong
四字节
-48~+47
float
四字节
±~±+38
*
1~3字节
对象的地址
bit
位
0或1
sfr
单字节
0~255
sfr16
双字节
0~65535
sbit
位
0或1
表1-6运算符优先级和结合性
级 别
类 别
名 称
运算符
结合性
1
强制转换、数组、
结构、联合
强制类型转换
()
右结合
下标
[]
存取结构或联合成员
->或.
2
增 量
加一
++
左结合
减 量
减一
--
指 针
取地址
&
取内容
*
算 术
单目减
-
长度计算
长度计算
sizeof
3
算 术
乘
*
右结合
除
/
取模
%
4
算术和指针运算
加
+
减
-
5
字 位
左移
<<
右移
>>
6
关系
大于等于
>=
大于
>
小于等于
<=
小于
<
恒等于
==
不等于
!
=
7
字 位
按位与
&
8
按位异或
^
9
按位或
|
10
按位取反
~
11
逻 辑
逻辑与
&&
左结合
12
逻辑或
||
13
逻辑非
!
14
条 件
条件运算
?
:
15
赋 值
赋值
=
复合赋值
Op=
16
逗 号
逗号运算
右结合
表1-7AT89C51特殊功能寄存器列表
(适用于同一架构的芯片)
序号
符 号
地 址
注 释
1
*ACC
E0H
累加器
2
*B
F0H
乘法寄存器
3
*PSW
D0H
程序状态字
4
SP
81H
堆栈指针
5
DPL
82H
数据存储器指针低8位
6
DPH
83H
数据存储器指针高8位
7
*IE
A8H
中断允许控制器
8
*IP
D8H
中断优先控制器
9
*P0
80H
端口0
10
*P1
90H
端口1
11
*P2
A0H
端口2
12
*P3
B0H
端口3
13
PCON
87H
电源控制及波特率选择
14
*SCON
98H
串行口控制器
15
SBUF
99H
串行数据缓冲器
16
*TCON
88H
定时器控制
17
TMOD
89H
定时器方式选择
18
TL0
8AH
定时器0低8位
19
TL1
8BH
定时器1低8位
20
TH0
8CH
定时器0低8位
21
TH1
8DH
定时器1高8位
带*号的特殊功能寄存器都是可以位寻址的寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 C51 程序结构