您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > no4单片机的C51语言
第4章单片机的C51语言4.1C51的程序结构4.2C51的数据结构4.3C51与汇编语言的混合编程4.4C51仿真开发环境4.5C51初步应用编程第4章单片机的C51语言51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。第4章单片机的C51语言C51是为51系列单片机设计的一种C语言,其特点:C51语言已成为51系列单片机程序开发的主流软件方法。•结构化语言,代码紧凑——效率可与汇编语言媲美•接近真实语言,程序可读性强——易于调试、维护•库函数丰富,编程工作量小——产品开发周期短•机器级控制能力,功能很强——适合于嵌入式系统开发•与汇编指令无关,易于掌握——在单片机基础上上手快第4章单片机的C51语言C51与标准C语言对比相同之处:语法规则、程序结构、编程方法差异之处:数据类型、存储模式、中断处理本章教学内容:①C51的数据结构②单片机I/O口的初步应用③C51编程实践与KeilC使用方法第4章单片机的C51语言4.1C51的程序结构4.2C51的数据结构4.3C51与汇编语言的混合编程4.4C51仿真开发环境4.5C51初步应用编程KeilC51下的程序结构Project(工程)C51(库函数)LIB(库函数)(头文件)KeilC51main(函数)File_1(*.c)Func1-n(函数)……Func1-1(函数)File_n(*.c)Funcn-n(函数)……Funcn-1(函数)File_1(*.asm)……sub1(子程序)subn(子程序)File_n(*.asm)……sub1(子程序)subn(子程序)…………①程序由函数组成(一个主函数,或一个主函数和若干自定义函数);②利用预处理命令对变量或函数进行集中定义或说明;③函数和变量都需遵循先定义后使用的基本原则;④主函数中的所有语句执行完毕,则程序结束。第4章单片机的C51语言C51与标准C程序结构完全相同第4章单片机的C51语言举例:LED闪烁控制功能第4章单片机的C51语言预处理命令---------函数说明------------全局变量定义------主函数------------调用函数------------局部变量定义---------程序体程序体------第4章单片机的C51语言4.1C51的程序结构4.2C51的数据结构1.C51的变量2.C51的指针4.3C51与汇编语言的混合编程4.4C51仿真开发环境4.5C51初步应用编程第4章单片机的C51语言在程序执行过程中,数值可以发生改变的量称为变量。变量名与存储单元地址相对应,变量值与存储单元的内容相对应。例如在哈佛结构的存储空间中如何建立变量概念?第4章单片机的C51语言【存储种类】数据类型【存储类型】变量名(标准C)(标准C)*括号项——可以缺省(但需有缺省值)C51变量定义的四要素:(C51特有)(标准C+C51)第4章单片机的C51语言【存储种类】数据类型【存储类型】变量名共有四个说明符:1、auto(自动型)——变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。2、extern(外部型)——在一个源文件中被定义为外部型的变量,在其它源文件中需要通过extern说明方可使用。3、static(静态型)——利用static可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。4、register(寄存器型)——将变量对应的储存单元指定为通用寄存器,以提高程序运行速度。缺省存储种类为auto(自动)型变量第4章单片机的C51语言举例:自动变量与外部变量的差异第4章单片机的C51语言*有符号数类型可以忽略signed标识符标准C语言的数据类型【存储种类】数据类型【存储类型】变量名第4章单片机的C51语言C51扩充数据类型:bit、sfr或sfr16、sbitbit型关键词bit用于定义一个位变量,语法规则:bitbit_name[=0或1];例如:bitdoor=0;//定义一个叫door的位变量且初值为0标准C的变量定义举例:inta=5;//定义一个初值为5的整形变量a语法规则:intint_name[=常数];注意:上述变量的物理地址是由编译器分配的第4章单片机的C51语言sfr或sfr16型关键词sfr或sfr16用于定义SFR字节地址变量,语法规则:sfr或sfr16sfr_name=字节地址常数;51MCU中有21个SFR,如何定义与这些单元相关的变量?第4章单片机的C51语言例如,sfrP0=0x80;//定义P0口地址80HsfrPCON=0x87;//定义PCON地址87Hsfr16DPTR=0x82;//定义DPTR的低端地址82H注意:SFR字节地址变量的物理地址是由MCU资源决定的第4章单片机的C51语言sbit型部分SFR具有位地址,如何定义与这些位地址相关的变量?CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PD0^7D7HD6HD5HD4HD3HD2HD1HD0HD0HPSWD0^6D0^5D0^4D0^3D0^2D0^1D0^0绝对位地址相对位地址字节地址两种位地址表达形式:绝对位地址、相对位地址第4章单片机的C51语言1)将SFR的绝对位地址定义为位变量名sbitbit_name=位地址常数;例如,sbitCY=0xD7;3)将SFR的相对位位置定义位变量名sbitbit_name=sfr_name^位位置;例如,sbitCY=PSW^7;2)将SFR的相对位地址定义为位变量名sbitbit_name=sfr字节地址^位位置;例如,sbitCY=0xD0^7;关键词sbit用于定义SFR位地址变量,三种定义形式:C51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变量。第4章单片机的C51语言用一条预处理命令#includereg51.h把这个头文件包含到C51程序中,无需重定义即可直接使用它们的名称。第4章单片机的C51语言应用举例:sbit和bit的区别:sbit定义特殊功能寄存器中的可寻址位;bit定义一个普通的位变量,一个函数中可包含bit类型的参数,函数返回值也可为bit类型。第4章单片机的C51语言【存储种类】数据类型【存储类型】变量名51单片机的三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器。建立C51存储类型与存储空间的对应关系data区code区xdata区bdata区pdata区idata区第4章单片机的C51语言C51的存储类型与存储空间对应关系表SMALL系统COMPACT系统LARGE系统编译模式例:chardataa;unsignedintxdatab;三种编译模式分别对应于三种缺省存储类型:第4章单片机的C51语言【存储种类】数据类型【存储类型】变量名C51编译器可根据当前采取的编译模式自动认定默认的存储类型约定:若无特殊声明,一般均为“SMALL编译模式”变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。强调:头文件中定义的变量都是大写的第4章单片机的C51语言【存储种类】数据类型【存储类型】变量名第4章单片机的C51语言C51扩展的若干关键字一览表变量名不得使用标准C语言和C51语言的关键字。unsignedchardatasystem_status=0;第4章单片机的C51语言//定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。数据结构定义举例变量名为system_status位与片内RAM区无符号字符型自动型初值为零第4章单片机的C51语言unsignedcharbdatastatus_byte;unsignedintcodeunit_id[2]={0x1234,0x89ab};staticcharm,n;//定义status_byte为无符号字符型自动变量,该变量位于bdata区//定义unit_id[2]为无符号整型自动变量,该变量位于code区中,是长度为2的数组,且初值为0x1234和0x89ab。//定义m和n为2个位于data区中的有符号字符型静态变量。第4章单片机的C51语言4.1C51的程序结构4.2C51的数据结构1.C51的变量2.C51的指针4.3C51与汇编语言的混合编程4.4C51仿真开发环境4.5C51初步应用编程C51的指针与标准C的指针几乎是一样的,都可以简单理解为“存储地址的变量”,例如:2.C51的指针第4章单片机的C51语言int*b=&a;取变量a的地址指针变量inta;//定义一个整型变量a//定义一个整型指针变量b,其初值为a的地址第4章单片机的C51语言在C51里定义指针,需要额外说明两个问题:1)指针变量自身位于哪个存储区域?2)被指向变量位于哪个存储区中?C51指针的一般定义形式:数据类型【存储类型1】*【存储类型2】指针变量名;数据类型——被指向变量的数据类型,不能缺省存储类型1——被指向变量所在的存储区类型,缺省时根据该变量的定义语句确定存储类型2——指针变量所在的存储区类型,缺省时根据C51编译模式的默认值确定指针变量名——按C51变量名的规则选取第4章单片机的C51语言例1charxdataa=‘A’;char*ptr=&a;举例说明C51指针定义的用法(SMALL编译模式下)【解】Øptr是一个指向char型变量的指针变量;Ø它本身位于SMALL编译模式默认的data存储区里;Ø它的值是位于xdata存储区里的char型变量a的地址;Ø“存储类型1”缺省时,靠被指向变量的定义确定存储类型。数据类型【存储类型1】*【存储类型2】指针变量名;第4章单片机的C51语言例2charxdataa=‘A’;char*ptr=&a;charidatab=‘B’;*ptr=&b;【解】ØPtr先指向位于xdata存储区的char型变量a,后指向位于idata存储区的char型变量b;Ø“存储类型1”缺省时,ptr指针具有一定随意性。数据类型【存储类型1】*【存储类型2】指针变量名;第4章单片机的C51语言例3charxdataa=‘A’;charxdata*ptr=&a;【解】Øa是位于xdata存储区里的char型变量;Øptr是固定指向xdata存储区中char型变量的指针变量;Ø“存储类型1”存在时,ptr指针具有固定指向性。数据类型【存储类型1】*【存储类型2】指针变量名;第4章单片机的C51语言例4charxdataa=‘A’;charxdata*idataptr=&a;【解】Øptr是固定指向xdata存储区的char型变量的指针变量;Ø它自身存放在idata存储区中;Ø“存储类型2”存在时,ptr指针具有明确的存储区域。数据类型【存储类型1】*【存储类型2】指针变量名;第4章单片机的C51语言解:unsignedcharidataa=‘A’;若ptr是一个unsignedchar型指针变量,它本身位于idata存储区,它的初值是位于idata存储区里的unsignedchar型自动变量a(初值为‘A’)的地址。试据此完成相关变量的定义和初始化。unsignedchar*idataptr=&a;第4章单片机的C51语言4.1C51的程序结构4.2C51的数据结构4.3C51与汇编语言的混合编程4.4C51仿真开发环境4.5C51初步应用编程第4章单片机的C51语言ØC51语言编程可胜任单片机的基本测量与控制任务。Ø对于某些特殊的I/O接口处理、中断处理、强调程序执行速度等场合,仍希望采用汇编程序。ØC51编译器提供了与汇编语言程序的接口规则,可方便地实现C51与汇0编语言程序的相互调用。Ø本节仅讨论在C51中调用汇编函数和在C51中嵌入汇编代码两种方法。概要第4章单片机的C51语言1
本文标题:no4单片机的C51语言
链接地址:https://www.777doc.com/doc-4246601 .html