C51程序设计基础解析
c51程序的基本结构

c51程序的基本结构一、简介c51程序是指在C语言编写的基于8051单片机的程序。
c51程序的基本结构是指程序的框架和组成部分。
在本文中,我们将深入探讨c51程序的基本结构,包括程序的主要组成部分、编译和连接过程、初始化和中断处理等方面。
二、程序的主要组成部分c51程序的主要组成部分包括以下几个部分:1. 头文件包含在c51程序的开头,需要包含一些常用的头文件,以便在程序中使用一些常用的函数和宏定义。
常见的头文件包括reg51.h、intrins.h等。
2. 函数声明在程序的主体之前,需要进行函数的声明。
函数的声明包括函数的返回类型、函数名和参数列表。
通过函数声明,我们可以通过函数名在程序中调用相应的函数。
3. 全局变量定义在程序的主体之前,可以定义一些全局变量。
全局变量可以在程序的任意位置访问,因此非常适合用来存储一些需要在不同函数间共享的数据。
4. 主函数在c51程序中,主函数是程序的入口。
主函数中包含程序的主要执行逻辑。
在主函数中,可以调用其他函数、执行一些初始化操作以及进行一些逻辑判断和循环等操作。
5. 其他函数除了主函数外,c51程序中还可以定义其他函数。
这些函数可以在主函数中调用,也可以在其他函数中调用。
通过将程序的不同功能模块封装成独立的函数,可以提高程序的可读性和易维护性。
三、编译和连接过程c51程序的编译和连接过程主要包括以下几个步骤:1. 预处理在预处理阶段,编译器将对程序进行宏替换和文件包含操作。
通过宏替换,程序中的宏定义将被替换为相应的代码;通过文件包含,程序中包含的头文件将被插入到相应的位置。
2. 编译在编译阶段,编译器将把预处理后的代码转换成汇编语言。
在这个阶段,编译器将对代码进行词法分析和语法分析,生成汇编语言代码。
3. 汇编在汇编阶段,汇编器将把汇编语言代码转换成机器语言代码。
这个阶段主要涉及符号和地址的分配,以及生成可重定位的目标文件。
4. 链接在链接阶段,链接器将把多个目标文件和库文件合并成一个可执行文件。
c51设计基础

c51设计基础2008年10月23日星期四09:25 A.M.1.7 寄存器组定义8051系列的器件包含4个相同的寄存器组,每个寄存器组包括8个寄存器(R0~R7),C51编译器可使在一函数中决定用哪一寄存器组成为可能。
绝对寄存器的访问可用AREGS/NOAREGS和REGISTERBANK来控制。
定义一个带扩展性的函数语法如下:返回类型函数名([参数])[模式][再入][中断n]using n再入和中断将在后两节讨论。
例:void rb_function(void) using 3;“using”不允许用于外部函数,它对函数的目标代码影响如下:l 函数入口处将当前寄存器保存入栈;l 指它的寄存器还会改变;l 函数退出前寄存器组被恢复。
“using”定义对于返回一个寄存器内的值的函数是无用的。
编程者必须十分小心以保证任何寄存器切换都只在仔细控制的区域发生。
如果不做到这一点将会产生不正确的函数结果。
即使当编程者使用同一寄存器组时,带“using”属性的函数原则上也不能返回一个位值。
实际产生的代码决定于编译器及不同开关条件,有时用命令产生绝对的寄存器地址,当需要进行这样的地址计算时,使用REGISTERBANK指令的影响只是计算Arn寄存器使用的地址,而必进行实际切换。
1.8 中断服务程序C51编译器及其对C语言的扩充允许编程者对中断的所有方面进行控制。
这种支持能使系统编程者创建高效的中断服务程序,用户只需在普通和高级方式下关心中断及必要的寄存器组切换操作,C51编译器将产生最合适的代码。
1.8.1 中断服务程序的定义使用中断服务函数的完整语法如下:返回值函数名([参数])[模式][再入] interrupt n[using n]“interrupt”后接一个0~31的常数,不允许使用表达式。
中断不允许用于外部函数,它对函数目标代码的影响如下:l 当使用函数时,SFR中的ACC、B、DPH、DPL和PSW(当需要时)入栈;l 如不使用寄存器组切换,甚至中断函数所需的所有工作寄存器(Rn)都入栈;l 函数退出前,所有的寄存器内容出栈;l 函数由8051控制命令“RETI”终止。
单片机应用技术(C语言版)第4章C51程序设计入门ppt课件

10.05.2021
完整最新ppt
8
在计算机中不能随意给一个变量赋任意 的值,因为变量在单片机的内存中要占空 间的,变量不同,所占的空间不同。
为了合理利用单片机的内存空间,在编 程时要设定合适的数据类型。
10.05.2021
完整最新ppt
9
33
4、 C51变量定义举例
1)定义存储在data区域的动态 unsigned char变量:
unsigned char data sec=0, min=0, hou=0;
2)定义存储在data区域的静态 unsigned char变量:
static unsigned char data scan_code=0xfe;
sfr 特殊功能寄存器名 = 地址常数
地址常数范围:0x80~0xff。
特殊功能寄存器定义例子(见reg51.h 、reg52.h等文件):
sfr P0=0x80; 存器
//定义P0寄
sfr P1=0x90; 寄存器
//定义P1口
sfr 10.05.2021 PSW=0x完d整0最新;ppt //定义PSW
10.05.2021
完整最新ppt
14
3、 sbit型位变量的定义
特殊功能寄存器的位声明 一般格式为:
sbit 位变量名 = 位地址表达式 这里的位地址表达式有三种形式: 直接位地址 特殊功能寄存器名带位号 字节地址带位号
10.05.2021
完整最新ppt
15
a、用直接位地址定义位变量
定义特殊功能寄存器的位。例如:
sbit P0_0=0x80; sbit P1_1=0x91; sbit RS0=0xd3; //定义PSW的第3 位
单片机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
程序语句
第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语句的一般形式:
C51语言程序设计基础

C51语言程序设计基础C51语言的编程步骤与C语言类似,可以分为预处理、编译、汇编和链接四个阶段。
预处理阶段通过宏替换、文件包含等操作,将源代码转化为C语言代码。
编译阶段将C语言代码转化为汇编代码。
汇编阶段将汇编代码转化为机器码,并生成目标文件。
链接阶段将多个目标文件组合在一起,生成最终的可执行文件。
C51语言中的程序结构与C语言类似,有全局变量、函数声明、函数定义等部分。
全局变量声明必须在函数之外,可以使用关键字data定义变量的数据类型。
函数声明和定义使用关键字code,表示函数会被编译为汇编代码。
1. mov命令:用于将一个值从一个寄存器或内存地址复制到另一个寄存器或内存地址。
语法为mov dest, src,其中dest为目标操作数,src为源操作数。
2. add命令:用于将源操作数的值加到目标操作数中。
语法为add dest, src。
3. sub命令:用于将源操作数的值从目标操作数中减去。
语法为sub dest, src。
4. inc命令:用于将目标操作数的值加1、语法为inc dest。
5. dec命令:用于将目标操作数的值减1、语法为dec dest。
除了上述命令外,C51语言还提供了一些控制流语句,如if语句、for循环、while循环等。
这些控制流语句的语法与C语言相似,使用关键字if、for、while等。
与C语言不同的是,C51语言没有布尔类型,通常使用条件判断命令(如cjne、djnz等)来实现条件控制。
综上所述,C51语言是一种用于嵌入式系统开发的编程语言,语法和C语言相似,但也存在一些差异。
了解C51语言的基础知识对于进行单片机编程是非常重要的。
希望本文能够帮助读者快速入门C51语言,并在实际项目中得到应用。
单片机C51语言程序设计基础

3.1 C51程序的基本结构
• 单片机C51语言继承了C语言的特点,其程序结构 与一般C语言的程序结构没有差别。C51源程序文 件的扩展名为“.c”,如Test.c、Function.c等。 每个C51源程序中包含一个名为“main()”的主函 数,C51程序的执行总是从main()函数开始的。当 主函数中所有语句执行完毕,则程序执行结束。
•
•
• •
3.3 C51的标识符与关键字
• 标识符和关键字是一种编程语言最基本的组成部 分,C51语言同样支持自定义的标识符以及系统保 留的关键字。在进行C51程序设计时,需要了解标 识符和关键字的使用规则。
3.3.1 标识符
• 标识符常用来声明某个对象的名称,如变量和常量的声明、 数组和结构的声明、自定义函数的声明以及数据类型的声 明等。示例如下。 • int count; • void Function1(); • 在上面的例子中,count为整型变量的标识符,Function1 为自定义函数的标识符。 • 在C51语言中,标识符可以由字母、数字(0~9)和下划线 “_”组成,最多可支持32个字符。并且,C51标识符第一 个字符必须是字母或者下划线“_”。例如“ut1”、 “ch_1”等,都是正确的。而“5count”则是错误的标识 符。另外,C51的标识符区分大小写,例如“count1”和 “COUNT1”代表两个不同的标识符。
3.3.2 关键字
• 关键字是C51语言重要的组成部分,是C51编译器 已定义保留的专用特殊标识符,有时也称为保留 字。这些关键字通常有固定的名称和功能,如int、 float、if、for、do、while、case等。
3.4 C51的变量类型
• 数据类型是C51语言最基本的组成部分。在C51中, 每个变量在使用之前必须定义其数据类型。C51语 言中的数据类型分为基本数据类型和聚合数据类 型,这里首先介绍基本数据类型。
单片机c51程序设计

单片机c51程序设计单片机C51程序设计是一门结合了硬件知识和软件编程技能的学科,它广泛应用于自动化控制、智能设备、嵌入式系统等领域。
C51单片机是指使用C语言进行编程的8051系列单片机,它具备丰富的指令集和灵活的编程方式。
下面将从单片机的基本概念、C51编程基础、程序设计步骤以及实例分析等方面进行介绍。
单片机的基本概念单片机,又称微控制器,是一种集成了处理器核心、存储器、输入/输出接口等的微型计算机系统。
它具有体积小、功耗低、成本低、可靠性高等特点。
C51单片机是基于Intel 8051微控制器架构的,具有8位数据总线和16位地址总线,支持多种外设接口。
C51编程基础1. C语言基础:熟悉C语言的基本语法,如变量声明、条件语句、循环语句、函数等。
2. 数据类型:了解C51单片机支持的数据类型,包括特有寄存器位操作。
3. 内存结构:掌握C51单片机的内存结构,包括内部RAM、外部RAM、程序存储器等。
4. 中断系统:理解中断的概念和中断服务程序的编写。
5. 定时器/计数器:了解如何使用单片机的定时器/计数器进行时间控制和事件计数。
程序设计步骤1. 需求分析:明确程序设计的目标和功能需求。
2. 系统设计:设计系统的整体架构,包括硬件连接和软件模块划分。
3. 编写代码:根据设计编写C51程序代码,包括初始化代码、主函数、中断服务程序等。
4. 调试:使用仿真软件或实际硬件对程序进行调试,确保程序正确运行。
5. 优化:根据调试结果对程序进行优化,提高效率和稳定性。
6. 测试:进行全面的测试,确保程序在各种条件下都能稳定运行。
实例分析以一个简单的LED闪烁程序为例,介绍C51程序设计的基本流程:```c#include <reg51.h>// 定义LED连接的端口#define LED_PORT P1void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--)for (j = 110; j > 0; j--);}void main() {while (1) {LED_PORT = 0xFF; // 关闭所有LED灯delay(500); // 延时500msLED_PORT = 0x00; // 打开所有LED灯delay(500); // 延时500ms}}```在这个例子中,我们首先包含了8051单片机的寄存器定义文件`reg51.h`,定义了LED灯连接的端口为P1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 一般当程序必须作多选1时,可以采用switch语句。
break:是跳出循环的命令,任何由switch、for、 while、do-while构成的循环,都可以用break来跳 出。 必须注意的是break一次只能跳出一层循环,通常都和if 连用,当某些条件成立后就跳出循环。 default:当所有case的条件值都不成立时,就执行 default所指定的动作,作完后也要使用break指令跳出 switch循环。 范例 SwitchDemo.c(P58)
说明:
C程序从main开始执行程序,前一个void表示无值返回; C程序中用到的变量一定要先定义变量的数据类型,只有定义 了变量的数据类型后,变量才会在内存中按其数据类型长度给其分配 空间。
1.3.1 数据类型
数据类型 位数 bit 1 signed char 8 unsigned char 8 enum 16 signed short 16 unsigned short 16 signed int 16 unsigned int 16 字节数
果与某个条件值相符合,则执行该case的动作,之后一 定要写break退出循环。
• 如果所有的条件值都不符合,则执行default的动作,每
一个动作之后一定要写break,否则会继续执行。
• 另外case之后的条件值必须是数据常数,不能是变量,
而且不可以重复,即条件值必须各不同,如果有数种 case所做的动作一样时,也可以写在一起,即上下并列。
(4) switch-case语句
switch (条件表达式) { case条件值1: case条件值2: case条件值3: default: }
动作1 break;
动作2 break;
动作3 break; 动作4 break;
• switch内的条件表达式的结果必须为整数或字符。 • Switch用条件表达式的值来与各case的条件值对比,如
• •
的存储结构有初步了解; 寄存器分配,不同存储器的寻址及数据类型等细 节由编译器管理; 程序有规范的结构,可分成不同的函数,这种方 式可使程序结构化; 提供的库包含多个标准子程序,具有较强的处理 能力; 由于具有方便的模块化设计,便于移植。
•
•
ቤተ መጻሕፍቲ ባይዱ
汇编语言特点
• 代码执行效率高; • 占用存储空间少; • 可移植性差。
(2) if (条件表达式) { 动作1 } else { 动作2 } 如果条件表达式为真,则执行动作1,略过else 的部分,接着往下执行,如果条件表达式为假, 则略过if的部分而执行else的动作2,然后再往下 执行。 范例 IfDemo2.C (P54)
(3)if (条件表达式1) if (条件表达式2) if (条件表达式3) { 动作A } else { 动作B } else { 动作C } else { 动作D } 动作 A:条件表达式1,2,3都成立时才会执行。 动作 B:条件表达式1,2成立,但条件表达式3不成立时才会 执行。 动作 C:条件表达式1成立,条件表达式2不成立时才会执行。 动作 D:条件表达式1不成立时才会执行。 范例 IfDemo3.C
长度上比较:高级语言比汇编语言长15%~200%; 执行时间上比较:高级语言比汇编语言增长50%~300%。 C51用于编写复杂的大型程序,对要求反应灵敏、控制及 时,实时检测等控制系统都是用汇编语言和C语言联合编 写的。对时钟要求严格时,使用汇编语言是唯一的方法。
1.3 C语言程序设计知识
简单C程序举例 void main( ) { int b ,a=1; // a表示一个整型变量,变量名为a // ;为语句结束符号 b=++a; // a的值加一变为2,然后将a的值赋给b }
C的优势
• C语言作为一种方便语言得到广泛支持,多个硬件
• •
开发都用C,如单片机、DSP、ARM。 C本身不依赖于机器硬件系统,基本上不作修改就 可将程序从不同单片机中移植过来。 C提供很多数学函数并支持浮点运算,开发效率高。
1.2 C51与ASM-51相比的优势
• 对单片机的指令系统不要求了解,仅要求对8051
说 明
将6赋值给a变量,即a变量值等于6 等同于a=a+b,将a和b相加的结果又存回a 等同于a=a-b,将a和b相减的结果又存回a 等同于a=a*b,将a和b相乘的结果又存回a 等同于a=a*b,将a和b相除的结果又存回a 等同于a=a%b,a值除以b值的余数又存回 a
• 有两个操作数的运算符都可写成复合形式 • 变量 运算符 =变量 等效为 变量=变量 运算符 变量 • x>>=y 等效为 x=x>>y
注意:汇编语言中字节做与或非运算(ANL ORL XRL CPL ) 为按位操作。
位操作
位操作可大大提高单片机程序的运行速度,方便用户编程, 经常用到。
运算符 范 例 ︱ & ^ ~ >> << a︱b a&b a^b ~a a>>b a<<b 说 明 a和b按位作OR运算 a和b按位作AND运算 a和b按位作XOR运算 将a的每一位取反 将a按位右移b个位,左侧补“0”,溢出舍去 将a按位左移b个位,右侧补“0”,溢出舍去
逗号运算符
• 表达式1,表达式2,‥‥表达式n • 表达式按从左到右的方式运算,整个表达式的值 • •
取决于最后一个。 例:unsigned char x=100; unsigned char y; y=(x=x/10,x/2) //先计算 x/10=10,然后计算 x/2=5,所以y=5
条件运算符
关系运算符
运算符 > < == >= <= != 范例 a>b a<b a==b a>=b a<=b a!=b 说 明 测试a是否大于b 测试a是否小于b 测试a是否等于b 测试a是否大于或等于b 测试a是否小于或等于b 测试a是否不等于b
结果为逻辑值真“1”、假“0”。
例:设x=4,y=3,z=2 ,则x>y的值为1,x>y>z的值 为0。(左结合性)
逻辑运算符
运算符 && 范例 a&&b 说 明 a和b逻辑与,两个变量都是“真”, 结果才为 “真”否则结果为“0”
||
!
a||b
!a
a和b作逻辑OR,只要有任何 一个变量为“真”,结果就为“真” !
将a变量的值取反,即原来为“真”则 变 “假”,为“假”则变为真
“0”代表假,“非0”代表真 例:a=3, b=6 , 则 !a的值为0 a&&b的值为1
本课程主要内容
• 单片机基础知识(复习) • C51编程语言及开发环境Keil uVision • 功能模块的C语言编程实现
MCS-51系列单片机的结构
(1)面向控制的8位CPU; (2)128B的片内数据存储器; (3)可以寻址64KB的片外程序存储器; (4)可以寻址64KB的片外数据存储器; (5)32根双向和可单独寻址的I/O线; (6)一个全双工的异步串行口; (7)两个16位定时/计数器; (8)5个中断源,两个中断优先级; (9)有片内时钟振荡器; (10)采用高性能HMOS生产工艺生产; (11)有布尔处理(位操作)能力; (12)含基本指令111条,其中单机器周期指令64种。
MCS-51系列单片机的内部总体结构
8 8 ROM/EPROM
微处理器 (运算部 件)
数据存储 器RAM B
P0口
P2口
程序存储 器
VCC
VSS
XTAL1 控制部件 XTAL2 P1口
串 行 口
定 时 / 计数器
中断 系统
特殊功 能寄存 器 ( SFR)
P3口
PSEN EA
ALE RESET
8
8
第一讲 C51程序设计基础
1.3.3 C语言的基本运算符--算术运算符
运算符
+ * / %
范例
a+b a-b a*b a/b a%b
说 明
a变量值和b变量值相加 a变量值和b变量值相减 a变量值乘以b变量值 a变量值除以b变量值 a变量值除以b变量值的余数
赋值运算符
运算符
= += -= *= /= %=
范例
a=6 a+=b a-=b a*=b a/=b a%=b
unsigned int a; for(a=100;a>=0;a--)
1.3.2 常量与变量
常量:使用预定义对常量进行定义,使用一个标识符代替一 个常量。 例:#define CONST 10 为了与变量区别,常量一般使用大写。
#define 宏名 字符串 以一个宏名称来代表一个字符串,当程序任何地方使用宏名 称时将以代表的字符串来替换,可以是一个常数、表达式 等。 #define uchar unsigned char #define unit unsigned int
主要内容:
• 单片机程序设计语言 • 单片机汇编语言与C语言的特点 • C语言程序设计知识(复习)
1.1 单片机程序设计语言
(1)机器语言 如: 7401 7802 38 :机器可以识别的语言 0111010000000001 0111100000000010 00111000
(2)汇编语言:由指令助记符书写的语言 如: MOV A, #01H MOV R0,#02H ADD A, R0 (3)C语言:通用程序设计语言,由函数组成 如: void main( ) { int m; m=1+2; }
变量
变量有3个相关参数:变量名、变量值、变量地址。 • 变量名由字母、数字、下划线组成,首字母必 须是字母或下划线。 • 在程序定义变量时首先要选择它的数据类型, 一个变量可能有多大值,要几个字节能存下, 在够用的情况下,尽量选一个字节的char。 例: bit b_Start; char c_Start; int i_Start; • 变量使用前必须进行定义。