版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章4.1 C51特点及程序结构 4.2 C51的数据类型及运算符4.3 C51程序设计基础C51程序设计简介教学目的和要求掌握C51程序设计基础,能够利用C51编写基本MCS-51单片机应用系统程序*C51特点及程序结构C51特点 语言简洁,使用方便灵活:关键字少可移植性好:不依赖于机器硬件方便操作计算机硬件:可访问机器物理地址和进行位操作生成的目标代码质量高:仅比用汇编语言编写的低1020%不能自动检查数组的边界各种运算符的优先级别多:15个C51特点及程序结构C51程序结构 include /预处理命令long fun1(); /函数说明 main() /主函数 /* 每个函数都由“函
2、数定义”和“函数体” 组成,main()函数是程序的入口 */fun1() /功能函数 C51特点及程序结构C51程序结构 include /预处理命令long fun1(); /函数说明 main() /主函数 /* 每个函数都由“函数定义”和“函数体” 组成,main()函数是程序的入口 */fun1() /功能函数 C51特点及程序结构C51关键字 bit声明一个位标量或位类型的函数sbit声明一个可位寻址变量sfr声明一个特殊功能寄存器sfr16声明一个16位的特殊功能寄存器data直接寻址的内部数据存储器bdata可位寻址的内部数据存储器idata间接寻址的内部数据存储器pdata分
3、页寻址的外部数据存储器xdata外部数据存储器code程序存储器interrupt定义一个中断函数reentrant定义一个再入函数using定义芯片的工作寄存器C51特点及程序结构C51关键字 *ACC累加器内部RAM:E0H*B乘法寄存器内部RAM:F0H*PSW程序状态字内部RAM:D0HSP堆栈指针内部RAM:81HDPL数据存储器指针低8位内部RAM:82HDPH数据存储器指针高8位内部RAM:83H*IE中断允许控制器内部RAM:A8H*IP中断优先控制器内部RAM:D8H*P0端口0内部RAM:80H*P1端口1内部RAM:90H*P2端口2内部RAM:A0H*P3端口3内部RA
4、M:B0HC51特点及程序结构C51关键字 PCON电源控制及波特率选择内部RAM:87H*SCON串行口控制器内部RAM:98HSBUF串行数据缓冲器内部RAM:99H*TCON定时器控制内部RAM:88HTMOD定时器方式选择内部RAM:89HTL0定时器0低8位内部RAM:8AHTL1定时器1低8位内部RAM:8BHTH0定时器0低8位内部RAM:8CHTH1定时器1高8位内部RAM:8DH带*号的特殊功能寄存器都是可以位寻址的寄存器 C51特点及程序结构C51变量定义 若在程序中使用变量,必须先定义后使用,需要用标识符作为变量名,并指出所用的数据类型和存储模式: 【存储种类】 数据类型
5、 【存储器类型】 变量名表自动(auto,缺省)、外部(extern)、静态(static)和寄存器(register)data(00-7FH,直接访问)bdada(20-2FH,位)idata(00-FFH,间接访问)pdata(00-FFH,外RAM)xdata (0000FFFFH,外RAM)code(0000FFFFH,外ROM)sfr P1 = 0 x90;/声明P1口,其地址90Hsfr16 T2 = 0 xCC;/*声明52定时器2,16位的T2*/sbit P1.0 = P10;/声明P1口第0位为P1.0sbit TI = 0 x980;/*声明98H(SCON)的第0位为T
6、I*/注意:sfr、sfr16、sbit其声明语句只能放函数外。不能定义bit、sbit、sfr、sfr16型指针和数组。sbit、sfr、sfr16通常用在51单片机系统自带的头文件中,具体参见reg51.h或reg52.h。C51特点及程序结构C51绝对地址访问 1. 绝对宏 使用“# include ”即可利用其中定义的宏来访问绝对地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD,具体用法参见absacc.h。例如:val = XWORD 0 x4000;/ 指向片外RAM的4000H地址val1 = CBYTE 0 x0002;
7、/ 指向ROM的0002h地址C51特点及程序结构C51绝对地址访问 2. _at_ 关键字 可以使用 _at_ 关键字来访问绝对地址。格式如下:【存储器类型】 数据类型 标识符 _at_ 地址常数 例如:xdata char m10 _at_ 0 x1000; /*指定m数组从片外RAM的1000H开始 */注意:(1)绝对变量不能被初使化;(2)bit型函数及变量不能用_at_指定。*C51的数据类型及运算符 C51的数据类型 C51的数据类型有基本类型、构造类型、指针类型与空类型。在C51编译器中int 和 short 相同,float 和 double 相同。 C51特点及程序结构C5
8、1的数据类型 1. char 字符类型 长度1个字节,用于定义字符数据变量或常量。分为signed char (默认)和unsigned char。signed char 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示,表示的数值范围是-128+127。unsigned char 类型用字节中所有的位来表示数值,表示的数值范围是0255。C51特点及程序结构C51的数据类型 2. int 整型 长度2个字节,用于存放一个双字节数据。分为signed int (默认)和unsigned int。signed int 类型用字节中最高位字节表示数据的符号,“0
9、”表示正数,“1”表示负数,负数用补码表示,表示的数值范围是-32768+32767 。unsigned int 类型用字节中所有的位来表示数值,表示的数值范围是065535 。C51特点及程序结构C51的数据类型 3. long 长整型 长度4个字节,用于存放一个四字节数据。分为signed long (默认)和unsigned long。signed long 类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示,表示的数值范围是-2147483648 +2147483647 。unsigned int 类型用字节中所有的位来表示数值,表示的数值范围是 04
10、294967295。C51特点及程序结构C51的数据类型 4. float 浮点型 长度4个字节,在十进制中具有 7 位有效数字,是符合 IEEE754 标准的单精度浮点型数据用于存放一个四字节数据。5. bit 位标量 利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,只能是 0 或者 1。C51特点及程序结构C51的数据类型 6. 数组类型数组是相同数据类型的元素按一定顺序排列的集合。将有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,名字称为数组名,编号称为下标。例如:int a5 = 1,2,3,4,5;char s = “Jilin
11、University”;C51特点及程序结构C51的数据类型 7. 结构体 是一种组合数据类型,将若干个不同类型的变量结合在一起而形成的一种数据集合体。组成该集合体的各个变量称为结构元素或成员,整个集合体使用一个单独的结构变量名。8. 共用体 可以把不同类型的数据组合在一起使用,但它与结构体在内存中存储变量的方式不同,结构体定义的各个变量在内存中占用不同的内存单元,而共用体可使不同的变量分时使用同一内存单元。C51特点及程序结构C51的数据类型 9. 枚举 声明一组命名常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。10. 指针 指针变量中存放的是指向另一个数据的地址。指针变
12、量要占据一定的内存单元,在 C51 中它的长度一般为 13个字节。指针变量定义的一般形式为:数据类型说明符 【存储器类型】 * 指针变量名C51特点及程序结构C51的运算符 运算符就是完成某种特定运算的符号。由运算符及运算对象所组成的具有特定含义的式子被称为表达式。运算符按其在表达式中所起的作用,可分为:赋值、算术、增量与减量、关系、逻辑、位、复合赋值、逗号、条件、指针和地址运算符、强制类型转换运算符和sizeof运算符等。C51特点及程序结构C51的运算符 运算符按其在表达式中与运算对象的关系又可分为:单目、双目和三目运算符。单目运算符只需要有一个运算对象,双目运算符要求有两个运算对象,三目
13、运算符要求有三个运算对象。&A=&b将b变量的地址存入A寄存器中*A用来取寄存器所指地址内的值Max=(ab)?a:b; /三目运算符,条件运算符具体参见表4-2C51特点及程序结构C51的函数函数定义时要同时声明其类型。调用函数前要先声明该函数。传给函数的参数值,其类型要与函数原定义一致。接收函数返回值的变量,其类型也要与函数一致。C51语言的编译器中含有丰富的库函数,使用时,必须在源程序的开始处使用预处理命令#include将有关的头文件包含进来。C51特点及程序结构C51的函数1. 内部函数 C51内部函数只有9个,包含在头文件intrins.h中。2. 输入输出函数 输入输出函数用于处
14、理包括文件、控制台等各种输入输出设备,各种函数以“流”的方式实现,包含在在头文件stdio.h中。 C51特点及程序结构C51的函数3. 实用工具函数实用工具函数中汇集了常用的工具类函数,如数制转换函数,随机序列产生函数等,包含在在头文件stdlib.h中 。4. 数学函数 数学函数包含了常规的数学计算函数,在头文件 math.h 中。C51特点及程序结构C51的函数5. 字符函数用于对单个字符进行处理,包含在头文件 ctype.h中。6. 字符串处理函数 字符串处理函数用于对字符串进行合并、比较等操作,包含在在头文件string.h中。C51特点及程序结构C51的函数7. 中断服务函数定义中
15、断服务函数的一般形式为:函数类型 函数名()interrupt n using rinterrupt 为关键字,其后n是中断号,n的取值范围为031。具体的中断号n和中断向量取决于不同的8051系列单片机芯片。using 为关键字,后面的r是一个03的常整数,分别选择4个不同的工作寄存器组。C51特点及程序结构C51的函数编写8051单片机中断函数时应遵循以下规则:中断函数不能进行参数传递,会导致编译出错。中断函数没有返回值,建议在定义中断函数时将其定义为void类型,以明确说明无返回值。在任何情况下都不能直接调用中断函数,否则会产生编译错误。如果中断函数中用到浮点运算,必须保存浮点寄存器的状
16、态。如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器组必须与中断函数相同。C51编译器从绝对地址8n3处产生一个中断向量,其中n为中断号。该向量包含一个到中断函数入口地址的绝对跳转。*C51程序设计基础 基本结构C51语言属于结构化设计语言,程序由若干模块组成,每个模块包含若干基本结构(顺序、分支、循环),每个基本结构中包含若干语句。 C51程序设计基础 基本结构1. 分支(选择)结构 if(表达式)语句; if(表达式)语句1; else语句2; if(表达式1)语句1; else if(表达式2)语句2; else if(表达式n-1)语句n-1; else语句n;C51程序设计
17、基础 基本结构1. 分支(选择)结构 switch (表达式) case 常量表达式1:语句1; break;case 常量表达式2:语句2; break;case 常量表达式n-1:语句n-1; break;default: 语句n;C51程序设计基础 基本结构2. 循环结构 (1) while语句C51使用while语句实现当型循环,格式如下:while (表达式) /条件语句; /循环体C51程序设计基础 基本结构2. 循环结构 (2) do-while语句C51使用do-while语句实现直到型循环,格式如下:do 语句; /循环体while (表达式); /条件C51程序设计基础 基
18、本结构2. 循环结构 (3) for语句在C51程序设计中,for语句的功能强大,使用最为灵活,格式如下:for (表达式1; 表达式2; 表达式3) 语句; /循环体注意:在C51中允许三种循环结构相互嵌套。C51程序设计基础 C51与汇编语言混合编程混合编程:在一个应用程序中,用不同的编程语言编写源程序,最后通过编译/连接器生成一个可执行的完整程序。汇编语言:执行速度快、效率高、实时性强。但编程繁琐,可读性和可移植性都较差。C51语言:功能丰富、表达能力强、使用灵活方便、开发周期短、可读性强、可移植性好。但硬件操作没有汇编方便、效率没有汇编高、编写延时程序精确度不高等,因而目前单片机系统开
19、发中经常用到C51与汇编混合编程技术。C51程序设计基础 C51与汇编语言混合编程C51语言和汇编语言的混合编程通常是程序的框架或主体部分用C51编写,对那些使用频率高、要求执行效率高、延时精确的部分用汇编语言编写,这样既保证了整个程序的可读性,又保证了单片机应用系统的性能。在单片机C 语言与汇编语言混合编程中,应注意相应的使用方法和参数传递。C51程序设计基础 C51与汇编语言混合编程1. 混合编程的基本方式 (1)在C51 中嵌入汇编程序# pragma ASM ;汇编程序# pragma ENDASM 需要更改文件选项。将“Properties”选项卡中的“Generate Assemb
20、ler SRC File”和“Assemble SRC File”两项设置为有效。“Link Public Only”项设置为无效。C51程序设计基础 C51与汇编语言混合编程1. 混合编程的基本方式 (2)在C51 中调用汇编程序分别用C51 与A51 对源程序进行编译然后用L51 将obj 文件连接即可关键问题在于C 函数与汇编函数之间的参数传递和得到正确返回值,以保证模块间的数据交换。C51程序设计基础 C51与汇编语言混合编程2C51 与汇编程序的参数传递 (1) 在C51 中嵌入汇编程序的参数传递如果要在C 程序中和汇编程序中实现数据传递,可以通过变量或特殊功能寄存器来实现。C51程
21、序设计基础 C51与汇编语言混合编程2C51 与汇编程序的参数传递 (2) 在C51 中调用汇编程序的参数传递通过函数调用的形式来实现。在C51 中调用汇编程序进行参数传递时都必须严格遵守C51 函数的参数和返回值相关约定。在C51 中调用汇编程序实现参数传递的方式主要有两种:一种是通过寄存器传递参数;另一种是通过固定存储区传递。C51程序设计基础 C51程序设计实例【例4-1】将内部RAM 2000H20FFH单元清零。 ORG 0000H MOV R0, # 00H MOV DPTR, # 2000H CLR AL1: MOVX DPTR, A INC DPTR INC R0 CJNE R
22、0, #00H, L1 SJMP $ END# include main() int i; unsigned char xdata *p=0 x2000; for (i=0;i256;i+) *p=0; p+;C51程序设计基础 C51程序设计实例【例4-2】利用循环编写延时函数,延迟时间为n(ms)(假设8051CPU的时钟频率为12MHz)。#includevoid delay(unsigned int n)/延时n(ms)函数unsigned int i,j;for(i=0;in;i+) for(j=0;j120;j+);注:时钟频率为12MHz时,n为1,循环120次约为1ms。C51程序设计基础 C51程序设计实例【例4-3】如图所示,8051的P1.0、P1.1、P1.2、P1.3分别接入4支发光二极管L0、L1、L2、L3,P3.0、P3.1、P3.2、P3.4分别接4支开关K0、K1、K2、K3,开关断开对应的发光二极管亮,开关闭合对应的发光二极管灭。#include /预处理命令#includevoid main(void) /主函数unsigned char buf; /变量说明P1=0 xff; /P1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 搪瓷瓷釉制作工岗前技术传承考核试卷含答案
- 汽轮机装配调试工岗前理论考核试卷含答案
- 复混肥生产工岗前品质考核试卷含答案
- 医生外出学习请假条
- 2025年新能源环卫装备合作协议书
- 2025年聚芳酯PAR项目发展计划
- 2025年PURL系列反应型皮革用聚氨酯乳液合作协议书
- 2026年新能源汽车换电模式项目可行性研究报告
- 2025年煤化工考试试题及答案
- 清水混凝土模板支撑施工方案
- 2026年药店培训计划试题及答案
- 2026春招:中国烟草真题及答案
- 物流铁路专用线工程节能评估报告
- 2026河南省气象部门招聘应届高校毕业生14人(第2号)参考题库附答案
- 2026天津市南开区卫生健康系统招聘事业单位60人(含高层次人才)备考核心试题附答案解析
- 五年级上册道德与法治期末测试卷新版
- 2022年医学专题-石家庄中国鲍曼不动杆菌感染诊治与防控专家共识
- YY/T 1543-2017鼻氧管
- YS/T 903.1-2013铟废料化学分析方法第1部分:铟量的测定EDTA滴定法
- FZ/T 70010-2006针织物平方米干燥重量的测定
- 高血压的血流动力学基础课件
评论
0/150
提交评论