§4第4章节C51程序设计及Proteus仿真

上传人:w****i 文档编号:92282391 上传时间:2019-07-08 格式:PPT 页数:62 大小:3.51MB
返回 下载 相关 举报
§4第4章节C51程序设计及Proteus仿真_第1页
第1页 / 共62页
§4第4章节C51程序设计及Proteus仿真_第2页
第2页 / 共62页
§4第4章节C51程序设计及Proteus仿真_第3页
第3页 / 共62页
§4第4章节C51程序设计及Proteus仿真_第4页
第4页 / 共62页
§4第4章节C51程序设计及Proteus仿真_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《§4第4章节C51程序设计及Proteus仿真》由会员分享,可在线阅读,更多相关《§4第4章节C51程序设计及Proteus仿真(62页珍藏版)》请在金锄头文库上搜索。

1、,张岩,机械工业出版社:单片机原理及应用张岩 ISBN:978-7-111-50104-6,第4章 C51程序设计及Proteus仿真,内容提示 ,C51程序设计语言功能丰富,表达能力强,使用灵活,目标程序效率高,可移植性好,而且能直接对计算机硬件进行操作。既有高级语言使用方便的特点,也有汇编语言直接面向硬件的特点。本章首先重点介绍C51的程序特点、编程实例,介绍Proteus仿真软件环境的使用方法和仿真实例。在介绍了虚拟仿真开发工具Proteus仿真软件结构和资源基础上,说明了软件的使用和参数的设置。以典型示例讲述了基于Proteus ISIS的电路设计和调试方法。,学习目标 , 掌握C51

2、语言的基本结构和语句、构造数据类型和函数; 掌握C51语言的基本使用和程序设计; 掌握Proteus软件的基本使用和参数的设置; 掌握Proteus软件电路设计方法、调试方法。,知识结构 ,目录,CONTENTS,4.1 编程语言种类及其特点 4.2 C51简介及特征 4.3 单片机的C51编程 4.4 Proteus软件仿真 4.5 实验与实训,4.1 编程语言种类及其特点,4.1.1 汇编语言的特点,汇编语言具有执行速度快、占存储空间少、对硬件可直接编程、比较灵活,程序代码的效率很高等特点,特别适合对实时性能要求比较高的场合使用。,程序设计人员须熟悉单片机的内部结构和工作原理。程序编写的周

3、期往往较长,且调试和排错也比较困难,程序可读性较差,对产品移植、升级不太有利。,4.1.2 C语言的特点,1,NO.,语言简洁,2,NO.,可移植性好,3,NO.,4,NO.,表达方式灵活,5,NO.,可进行结构化程序设计,6,NO.,可以直接操作计算机硬件,7,NO.,生成的目标代码质量高,表达能力强,4.1.3 C51语言的特点,C51程序本身不依赖于机器硬件系统。 C51提供了很多数学函数并支持浮点运算。 C51编程简单、方便、易读的特征。 C51产生的目标代码短、运行效率高。,2,3,4,1,同,异,语法规定 程序结构 程序设计方法,C51语言与标准的C语言的异同,库函数 数据类型 存

4、储模式 输入/输出处理 函数使用方面,如中断函数。,仅要求对8051的存储器结构有初步了解,寄存器分配、寻址及数据类型等由编译器管理,库包含标准子程序,具有较强的数据处理能力,标准子程序,具有较强的数据处理能力,模块化编程技术,使已编好程序容易移植,1,2,3,4,5,C51与汇编ASM-51相比,4.2 C51简介及特征,4.2.1 C51扩展,02,03,05,07,08,01,06,04,09,存储区,存储区类型,存储模型,存储类型说明符,变量数据类型说明符,位变量和位可寻址数据,SFR,指针,属性,4.2.2 数据类型,1bit类型 bit用于声明位变量,其值为1或0。用bit类型声明

5、的变量位于内部RAM的位寻址区。0x200x2F的16个字节单元,只能声明168=128个位变量。 例如,“bit bdata flag”则声明位变量flag位于内部RAM的位寻址区。 【例4.1】 判断一个正整数是奇数还是偶数。 解:bit func(unsigned char n) /* 声明函数的返回值为bit类型 */ if(n%2) return(1); else return(0); ,2sbit类型 sbit类型用于声明可位寻址区或特殊功能寄存器中的可寻址位的某个位变量,其值为1或0。 【例4.2】声明位变量。 解: char bdata bobject; /* 声明可位寻址ch

6、ar型变量bobject */ sbit bobj3=bobject3; /* 声明位变量bobj3为bobject的第3位*/ sbit CY=0xD07; /* 指定0xD0中的第7位为CY */ sbit CY=0xD7; /* 声明绝对地址0xD7表示CY的位地址*/,3sfr类型 sfr类型用于声明特殊功能寄存器(8位),位于内部RAM地址为0x800xFF的128B存储单元(变量)。 特别提示:sfr的值只能为常量值,其范围在特殊功能寄存器的地址范围内(0x800xFF)。 【例4.3】定义TMOD位于0x89、P0位于0x80、P1位于0x90、P2位于0xA0、P3位于0xB0

7、。 解: sfr TMOD=0x89; /* 声明变量TMOD其地址为0x89 */ sfr P0=0x80; /* 声明变量P0为特殊功能寄存器,其地址为0x80 */ sfr P1=0x90; /* 声明变量P1为特殊功能寄存器,其地址为0x90 */ sfr P2=0xA0; /* 声明变量P2为特殊功能寄存器,其地址为0xA0 */ sfr P3=0xB0; /* 声明变量P3为特殊功能寄存器,其地址为0xB0 */,4sfr16类型 sfr16类型用于声明两个连续地址的特殊功能寄存器(地址范围为065535)。 【例4.5】在8052中,用两个连续地址0xCC和0xCD表示定时/计数

8、器2的低字节和高字节计数单元,可用sfr16声明。 sfr16 T2=0xCC; /* 声明T2为16位特殊功能寄存器,地址低字节0xCC,高字节0xCD */,4.2.3 存储类型,1存储区与存储模式,存储种类 数据类型 存储器类型 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。 (1)char data varl; /*字符变量varl被定义为data型,被分配在片内RAM*/ (2)bit bdata flags; /*位变量fla

9、gs被定义为bdata型,定位片内RAM中的位寻址区*/ (3)float idata x,y,z; /*浮点型变量x,y和z被定义为idata存储类型,定位在片内RAM中,并只能用间接寻址方式进行访问*/ (4)unsigned int pdata dimension; /*无符号整型变量dimension定义为pdata型,位于片外数据存储区,相当于MOVX Ri访问*/ (5)unsigned char xdata vector1044; /*无符号字符型三维数组变量vector1044被定义为xdata存储类型,定位在片外RAM中,占据1044=160个字节*/,2绝对地址访问 (1)

10、绝对宏 在程序中,包含了头文件“#include” #define CBYTE (unsigned char volatile code *) 0) /* code空间 */ #define DBYTE (unsigned char volatile data *) 0) /* data空间 */ #define PBYTE (unsigned char volatile pdata *) 0) /* pdata空间 */ #define XBYTE (unsigned char volatile xdata *) 0) /* xdata空间 */ 以上存取对象是char类型字节。,#defi

11、ne CWORD (unsigned int volatile code *) 0) /* code空间 */ #define DWORD (unsigned int volatile data *) 0) /* data e空间 */ #define PWORD (unsigned int volatile pdata *) 0) /* pdata空间 */ #define XWORD (unsigned int volatile xdata *) 0) /* xdata空间 */ 以上存取对象是int类型字 例如: #define PortA XBYTE0x7FFC /* PortA则指向

12、0x7FFC绝对物理地址*/ #define PortB XBYTE0x7FFD /* PortB则指向0x7FFD绝对物理地址*/ rval=CBYTE0x0002; /* 指向程序存贮器的0x0002地址 */ rva2=XWORD 0x0004; /* 指向外RAM的0x0004地址 */,(2)_at_关键字 直接在数据定义后加上_at_ const即可,但是注意: 1)绝对变量不能被初使化; 2)bit型函数及变量不能用_at_指定。 例如: idata struct link list _at_ 0x40; /* 指定list结构从40h开始 */ xdata char text2

13、5 _at_0xE000;/* 指定text数组从0E000H开始 */ (3) 连接定位控制 此方法是利用连接控制指令code xdata pdata data bdata对“段”地址进行绝对地址访问,如要指定某具体变量地址,则很有局限性,不作详细讨论。,4.2.4 指针,1通用指针 指针是指未对指向的对象(变量)存储空间进行说明的指针。 【例4.6】通用指针使用示例。 解:void main(void) char *p_c; /* 定义指向字符变量的指针变量p_c */ char data c_1; char xdata c_2; c_1=a; c_2=b; p_c= /* p_c指向外部

14、RAM的变量c_2 */ ,2存储区域的指针 存储区域的指针是指在指针声明中同时包含存储器类型,这种指针与标准C语言不兼容。 【例4.7】指定存储区域指针使用示例。 解: #include“reg51.h” #include“absacc.h” #define IN1 XBYTE0x7FF8 /*定义IN1为外部RAM(地址0x7FF8) */ void main(void) char data *pd_c /* 定义字符变量(内部RAM)的指针变量pd_c */ char xdata *px_c; /* 定义字符变量(外部RAM)的指针变量px_c */ char data a10; /*

15、定义内部RAM区数组a */ char xdata b10; /* 定义外部RAM区数组b */,unsigned char xdata *adr; /*定义外部RAM区指针变量adr */ pd_c= ,4.2.5 函数,1C51语言自定义函数 定义函数的语法格式如下: 返回值类型 函数名(形参列表)编译模式reentrantinterrupt musing n 其中: 返回值类型指返回类型,在默认情况下为int。 编译模式为small、compact或large,用来指定函数中局部变量参数和参数所在存储器空间。 reentrant:函数是否可重入,要注意可重入函数中变量的同步。 interrupt:可以用interrupt告诉计算机这个函数是中断服务函数。 using:指定函数所使用的寄存器组。,【例4.8】自定义函数(寄存器组)及调用使用示例程序。 解: char sum(char data a,char data b) using 3 /* 定义sum函数,返回值char型,形式参数a和b,工作寄存器选择3区 */ char ave; ave=(a+b)/2; return ave; ,void main(void) /* 主函数 */ char data res; char data c_l; char data c_2; c_l=20; c_2=21; res=su

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号