单片机基础与应用(C语言版)第3章 C51程序设计基础
单片机C51语言及程序设计PPT课件

.
9
【存储类别】 数据类型 【存储器类型】 变量名
共有四个说明符: 1、auto(自动型)——变量的作用范围在定义它的函数体或
语句块内。执行结束后,变量所占内存即被释放。 2、extern(外部型) ——在一个源文件中被定义为外部型的
变量,在其它源文件中需要通过extern说明方可使用。 3、static(静态型) ——利用static可使变量定义所在的函数
【存储类别】 数据类型 【存储器类型】 变量名
三种编译模式分别对应于三种缺省存储类型:
C51编译器可根据当前采取的编译模式自动认定默认的存 储类型
约定:若无特殊声明,一般均为“SMALL编译模式”
.
22
【存储类别】 数据类型 【存储器类型】 变量名
变量名可以由字母、数字和下划线三种字符组成,且第一个 字符必须为字母或下划线,变量名长度随编译系统而定。 变量名具有字母大小写的敏感性,如SUM和sum代表不同的 变量。
计算表达式或数据类型的字节数
静态变量
结构类型数据
构成Switch选择结构
重新进行数据类型定义
联合类型数据
无符号数数据
无类型数据
该变量在程序执行中可被隐含地改变
. 构成while和do…while循环结构
6
Keil C51编译器除了有ANSI C标准的32个关键字外,还根据51单片机的特点扩 展了相应的关键字。在Keil C51开发环境的文本编辑器中编写C程序,系统可 以把保留字以不同的颜色显示,缺省颜色为蓝色。下表为Keil C51编译器扩展
51单片机的 三个逻辑存储空间: 片内数据存储器,片外数据存储器和程序存储器。
.
单片机C51语言及程序设计

贰
壹
叁
C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。 用一条预处理命令#include <REG51.H>把这个头文件包含到C51程序中,无需重新定义即可直接使用它们的名称。
应用举例:
片内数据存储器,片外数据存储器和程序存储器。
通常下划线开头的标识符是编译系统专用的,因此在编写C语言源程序时一般不使用以下划线开头的标识符,而将下划线用作分段符。C51编译器规定标识符最长可达255个字符,但只有前32个字符在编译时有效,因此标识符的长度一般不要超过32个字符。
关键字是一种已被系统使用过的具有特定含义的标识符。用户不得再用关键字给变量等命名。C语言关键字较少,ANSI C标准一共规定了32个关键字,见表
变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。
【存储类别】 数据类型 【存储器类型】 变量名
变量名不得使用标准C语言和C51语言的关键字。
unsigned char data system_status = 0;
//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。
sfr或sfr16型 51MCU中有21个SFR,如何定义与这些单元相关的变量?
例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87H sfr16 DPTR=0x82; //定义DPTR的低端地址82H
单精度浮点数
for
程序语句
构成for循环结构
goto
程序语句
构成goto转移结构
if
程序语句
单片机C51语言及程序设计

单片机C51语言及程序设计单片机是一种微型计算机芯片,通常用于控制和执行各种电子设备中的任务。
单片机C51语言是一种基于C语言的编程语言,它在单片机开发中被广泛应用。
本文将对单片机C51语言及程序设计进行介绍。
一、单片机C51语言简介单片机C51语言是一种基于C语言的嵌入式编程语言,它是Intel公司为其8051系列单片机提供的编程语言。
C51语言与C语言的语法相似,但是在一些底层操作和特殊功能上有所区别。
使用C51语言编写的程序可以在8051系列单片机上直接运行,实现各种控制和功能。
C51语言的特点包括高效的编译器、丰富的库函数、快速的速度和较小的存储空间占用。
它可以利用C语言的各种高级特性进行程序设计,同时也支持直接对单片机的硬件进行底层操作。
二、单片机C51语言程序编写1.编译与烧录环境2.基本语法和数据类型C51语言的基本语法与C语言相似。
它支持各种数据类型,包括整数、浮点数、字符等。
同时,C51语言还定义了一些特殊的数据类型和关键字,如sfr(特殊功能寄存器)、xdata(扩展数据存储器)等。
3.控制语句和函数C51语言支持各种控制语句和函数,如条件语句(if-else、switch-case)、循环语句(for、while)、函数定义等。
通过这些语句和函数,我们可以实现复杂的控制逻辑和算法。
4.寄存器和端口操作单片机的核心是CPU和各种寄存器。
C51语言提供了一些特殊的语法和关键字,可以直接访问和操作寄存器。
通过这些操作,我们可以实现对单片机硬件的底层控制。
例如,下面的代码演示了如何使用C51语言对LED灯进行控制:sfr P0 = 0x80; // 特殊功能寄存器,用于控制P0口#define LED_PIN P0_0 // 使用宏定义定义LED的引脚void maiLED_PIN=0;//将LED引脚电平设为低电平while(1)LED_PIN=1;//将LED引脚电平设为高电平delay(1000); // 延时1秒LED_PIN=0;//将LED引脚电平设为低电平delay(1000); // 延时1秒}在上面的代码中,我们通过特殊功能寄存器P0和宏定义LED_PIN,定义了与LED相关的引脚和寄存器。
单片机-第3章-C51编程基础

3.3.2变量的绝对定位
C51有三种方式可以对变量(I/O端口)绝对定位: 绝对定位关键字_at_、指针、库函数的绝对定位宏。
C51扩展的关键字_at_专门用于对变量作绝对定位,用 在变量的定义中,其格式为: [存储类型] 数据类型 [存储区] 变量名1 _at_ 地址常数 [, 变量名2, ...]
在C51中对变量进行定义的格式为:
[存储类型] 数据类型 [存储区] 变量名1[=初值] [,变量名2[=初值]] [,……];
或者
[存储类型] [存储区] 数据类型 变量名1[=初值] [,变量名2[=初值]] [,……];
变量定义的4部分称为变量的4种属性,其中用方括 号表示的部分在定义时可以省略。
所占位数
ห้องสมุดไป่ตู้数的表示范围
16
-32768~32767
16
-32768~32767
32
-2147483648~2147483647
16
0~65535
16
0~65535
32
0~4294967295
32
3.4e-38~3.4e38
64
1.7e-308~1.7e308
8
-128~127
8
0~255
C-51的数据类型扩充定义
3.3.1变量存储类型与存储区
内用存储类型仍沿用ANSI C的说法,C51 变量 有4种存储类型 : 动态存储(auto)、 (静态存储 (static)、全局存储(extern)、寄存器存储(register)。
动态存储的变量用auto定义,叫动态变量,也 叫自动变量。其作用范围在定义它的函数内或复合 语句内部。
3.2 C51的数据类型
单片机原理与应用及C51程序设计第三章 单片机汇编程序设计课件

(1)以A为目的操作数
第三章 单片机汇编程序设计
MOV A,Rn ;A← Rn
MOV A,direct ;A←(direct)
MOV A,@Ri ;A←(Ri)
MOV A,#data ;A← #data
(2)#data:表示包含在指令中的8位立即数。 (3)#data16:表示包含在指令中的16位立即数。
第三章 单片机汇编程序设计
(4)rel:以补码形式表示的8位相对偏移量,范围为-128~127 ,主要用在相对寻址的指令中。
(5)addr16和addr11:分别表示16位直接地址和11位直接地 址。
第三章 单片机汇编程序设计
3.2 MCS-51系列单片机寻址方式
MCS-51单片机的寻址方式按操作数的类型,可分为数的寻址和 指令寻址,数的寻址有:常数寻址(立即寻址)、寄存器数寻址(寄 存器寻址)、存储器数寻址(直接寻址方式、寄存器间接寻址方式、 变址寻址方式)和位寻址,指令的寻址有绝对寻址和相对寻址,
对于特殊功能寄存器,在指令中使用时往往通过特殊功能寄 存器的名称使用,而特殊功能寄存器名称实际上是特殊功能寄存器单 元的符号地址,因此它们是直接寻址。例如:
MOV A,P0 其功能是把P0口的内容送给累加器A。P0是特殊功能寄存器 P0口的符号地址,该指令在翻译成机器码时,P0就转换成直接地址 80H。
2.片外数据存储器传送指令MOVX 在MCS-51系统中只能通过累加器A与片外数据存储器进行数据传
送,访问时,只能通过@Ri和@DPTR以间接寻址方式进行。MOVX指 令共有四条:
MOVX A,@DPTR ;A ← (DPTR) MOVX @DPTR,A ;(DPTR) ← A MOVX A,@Ri;A ← (Ri) MOVX @Ri,A;(Ri)← A 其中前两条指令通过DPTR间接寻址,可以对整个64K片外数据存 储器访问。后两条指令通过@Ri间接寻址,只能对片外数据存储器的低 端的256字节访问,访问时将低8位地址放于Ri中。
第3章单片机C51语言程序设计基础

3.1 语句与流程控制 3.2 函数 3.3 本章小结 3.4 实训三 简易十字路口交通信号灯控制
返回首页 第3章单片机C51语言程序设计基础
教学提示
C51 语言程序是由函数组成的。函数是C51 语言的基 本模块。用C51语言设计程序就是编写函数。从来源看, 函数可分为用户自定义函数和标准库函数两大类。在一个 C51 语言程序中有且只能有一个名为main的主函数。C51 语言程序的执行部分是由语句组成的。程序的各种主要功 能都是由语句实现的。C 语言的Байду номын сангаас句可分为流程控制语句、 表达式语句、复合语句、空语句。本章重点介绍C51语言 中语句的使用方法以及C51语言中新增的函数类型——中 断函数和重入函数。
第3章单片机C51语言程序设计基础
3.1 语句与流程控制
3.1.1 基本语句 3.1.2 分支语句 3.1.3 循环语句 3.1.4 辅助控制语句
第3章单片机C51语言程序设计基础
3.1.1 基本语句
基本语句主要用于顺序结构程序的编写。在C51语言中, 语句的结束符为分号。 1. 赋值语句
在任何合法的赋值表达式的尾部加上一个分号就构成 了赋值语句。赋值语句的一般形式为
图3.4 if-else语句的执行过程
【例3.3】 基于图3.2,编程实现下列功能:开机后,全部发 光二极管不亮。只有当K1键与K2键同时按下,发光二极管 才全亮;否则发光二极管全灭。
第3章单片机C51语言程序设计基础
3. if-else-if语句
if-else-if语句的一般形式: if( 表达式1 ) 语句1; else if( 表达式2 ) 语句2; else 语句3;
switch语句的一般形式:
第3章单片机C语言程序设计

北京航空航天大学出版社
3.2 数据类型、存储类型及存储模式 13
C51的存储类型
3 单片机的C语言程序设计
C51在定义变量、常量时,将通过不同的存储类型(data、bdata、 idata、pdata、xdata、code)将它们定位在不同的存储区中。存储类 型与AT89C52单片机实际存储空间的对应关系如下所示。
3 单片机的C语言程序设程序设计
掌握C51的数据类型、存储类型及函数等概念 了解C51与标准C的不同之处 熟悉C51的开发工具Keil C51
北京航空航天大学出版社
2
本章内容
C51的程序结构
数据类型、存储类型及存储模式 运算符、函数及程序流程控制 C51的构造数据类型 C51实例分析及混合编程
数在整个程序中的位置如何。 也可以写成几行,还可以在一行内写多条语句。但每条语句 都必须以分号“;”作为结束符。
3.C语言对大小字母敏感,C语言编译器编译程序时对同一
2.C语言程序的书写格式十分自由。一条语句可以写成一行,
个字母的大小写作为不同的变量来处理。
4.可以用/*……*/对C程序中的任何部分作注释。程序加上
函数定义由类型、函数名、参数表和函数体四部分组成。 函数的一般格式如下:
类型 函数名(参数表) 参数说明; { 数据说明部分; 执行语句部分; }
北京航空航天大学出版社
3.1C51的程序结构
6
C51的程序结构
编写C51 程序时应注意以下几点:
3 单片机的C语言程序设计
1.一个C51程序总是从main函数开始执行的,而不论main函
data 直接寻址内部数据存储区,访问速度快(128B),00~7FH bdata 可位寻址内部数据存储区,允许位与字节混合访问(16B) idata 间接寻址内部数据存储区,可访问片内全部RAM地址空间
单片机应用技术(C语言版)第3章MCS51指令系统及汇编PPT课件

01.08.2020
9
例如:
START: MOV →A
A,#23H ;23H
“START”为标号
“MOV”为操作码
“ A,#23H”为操作数
“23H → A”为注释
01.08.2020
10
3.1.2 指令中常用符号
Rn: n=0~7。当前选中的工作寄 存器R0~R7。
Ri: i=0、1。当前选中的工作寄存器组 中可作为地址指针的R0和R1。
单片机应用技术
(C语言版)
第3章 MCS-51指令系统及 汇编程序设计
01.08.2020
1
整体 概述
一 请在这里输入您的主要叙述内容
二
请在这里输入您的主要 叙述内容
三 请在这里输入您的主要叙述内容
第3章 MCS-51指令系统 及汇编程序设计
目录
3.1 基本概念 3.2 MCS-51单片机指令系统 3.3 汇编语言程序格式及伪指令 3.4 汇编语言程序设计方法
22
例如:
MOV A,R7 ;(R7)→ A
MOV 36H,A ;(A)→ 36H
ADD A,R0 ;(A)+(R0)→ A
对于工作寄存器组的操作,必须要考 虑PSW中RS1、RS0的值(P22),确 定当前使用的是哪一组寄存器以及它们 的实际地址。
01.08.2020
23
4 寄存器间接寻址
寄存器间接寻址:由指令指出某一寄存 器的内容作为操作数地址的寻址方式。
01.08.2020
3
3.1 基本概念
主要内容
3.1.1 汇编语言格式 3.1.2 指令中常用符号 3.1.3 寻址方式
01.08.2020
4
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教学内容 认识C51语言 C51数据类型 C51运算符 C51程序结构 C51函数 C51数组
认识C语言
C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中 所描述的“子程序”或“过程”的概念是一样的。
C程序
预编译命令 主函数
函数1 … … 函数i
函数定义
C程序基本结构
浮点型常量可分为十进制表示形式和指数表示形式两种,如0.888、 3345.345、125e3、-3.0e-3。 字符型常量是用单引号括起来的单一字符,如‘a’、‘9’等。 字符串型常量是用双引号括起来的一串字符,如“test”、“OK”等。 位类型的值是一个二进制数。如1或0。
变量
变量是一种在程序执行过程中其值能不断变化的量。
+ =、a-*==、b*+=5 等价于 a = a * (b + 5) 、%x=%、=/=3 等价于 x = x%3
算术运算符
+(加法运算) -(减法运算) * (乘法运算符) /(除法运算符) % (求余运算符,或称模运算符)如: ++ (变量自加1) -- (变量自减1)
4 % 2=0
注意
两个整数相除结果为整数,如8/5的结果为1,舍去小数部分。 如果参加运算的两个数中有一个数为实数,则结果是实型。 求余运算要求%两侧都是整型数据。
一个变量由变量名和变量值组成,变量名是存储单元 地址的符号表示,而变量的值就是该单元存放的内容。
变量必须先定义后使用,用标识符作为变量名,并指 出所用的数据类型和存储模式,这样编译系统才能为变 量分配相应的存储空间。
变量
void delay(unsigned char i) //延时函数1 {
unsigned char j,k; for(k=0;k<i;k++)
}
关系运算符
关系运算符
< <= > >=
优先级
高
== != 低
关系表达式
用关系运算符将两个表达式(可以是算术表达 式、关系表达式、赋值表达式或逻辑表达式) 连接起来的式子,称为关系表达式。
关系表达式的值为逻辑值“真”或“假”,以 1代表“真”,以0代表“假”。
例如:
(1)关系表达式“8==4”的值为 值为 。
函数体
认识C语言
一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独 立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行 总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列 顺序如何,最后在主函数中结束整个程序。 C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。 C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也 可以一行书写多条语句。
若a=1,b=2,c=3,x=4,y=3,写出下各个表达式的值:
(1)a+b>c&&b==c
for(j=0;j<255;j++); } =================================================
void delay(unsigned int i) {
unsigned int k; for(k=0;k<i;k++) ; }
//延时函数2
C51运算符
1. 赋值运算符 2. 算术运算符和算术表达式 3. 关系运算符和关系表达 4. 逻辑运算符和逻辑表达式
0或1 0~255 0~65535 0或1
常量和变量
常量的值在程序执行期间是不能发生变化的; 变量的值在程序执行期间可以发生变化。
常量
常量的值在程序执行期间是不能发生变化的。
整型常量可以表示为十进制数、十六进制数或八进制数等,例如: 十进制数12,-60等; 十六进制数以0x开头,如0x14、-0x1B等; 八进制数以字母o开头,如o14、o17等。
认识C语言
结构化语言 丰富的数据类型 便于维护管理 与汇编语言相比,C语言的优点如下:
➢不要求编程者详细了解单片机的指令系统,但需了 解单片机的存储器结构; ➢寄存器分配、不同存储器的寻址及数据类型等细节 可由编译器管理; ➢结构清晰,程序可读性强; ➢编译器提供了很多标准库函数,具有较强的数据处 理能力。
自增、自减运算
自增运算符(++)和自减运算符(--): (1)前置运算──++变量、--变量
即先增减、后运算。 (2)后置运算──变量++、变量--
即先运算、后增减。
实战演练:请说明程序运行完后x,y,z,m,n的值分别是多 少? main() { int x=6,y,z,m,n;
y=++x; z=x--; m=y/z; n=y%z;
认识C语言
C51数据类型
数据类型
unsigned char signed char unsigned int signed int
unsigned long signed long float * Bit sfr sfr16 sbit
名称
无符号字符型 有符号字符型
无符号整型 有符号整型 无符号长整型 有符号长整型
,表达式的
(2) 关系表达式“5>0”的值为
值为
。
,表达式的
逻辑运算符及其优先级
逻辑运算符
优先级
! (逻辑非)
&& (逻辑与)
|| (逻辑或)
注意:逻辑运算符与位操作运算符的区别。
逻辑表达式
用逻辑运算符将一个或多个表达式连接起来, 进行逻辑运算的式子。
逻辑量的真判断——非0 逻辑量的假判断——0
分隔符 为分号
赋值运算符
赋值语句的作用是把某个常量或变量或 表达式的值赋值给另一个变量。
符号为‘=’。这里并不是等于的意思, 只是赋值,等于用‘==’表示。
赋值语句左边必须是变量或寄存器,且 必须先定义。
常量不能出现左边。
赋值运算符和赋值表达式
简单43; = 2 等价于 i = i + 2
浮点型 指针型 位类型 特殊功能寄存器 16位特殊功能寄存器 可寻址位
长度
单字节 单字节 双字节 双字节 四字节 四字节 四字节 1~3字节
位 单字节 双字节
位
值域
0~255 -128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647 ±1.175494E-38~±3.402823E+38 对象的地址