您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > MCS-51单片机C语言程序设计
第4章单片机C语言程序设计主要内容一、C语言与MCS-51二、C51的数据类型三、C51的运算量与存储类型四、C51的运算符和表达式五、表达式语句与复合语句六、C51的输入/输出七、C51的程序结构八、函数九、C51构造数据类型一、C语言与MCS-511、C语言与51单片机2、C51与标准C3、C51程序结构1、C语言与51单片机C语言目前已成为电子工程师进行单片机系统开发时的常用编程语言。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充。用C语言编写的应用程序必须经单片机的C语言编译器(简称C51),转换生成单片机可执行的代码程序。基于51系列单片机的C语言或C语言编译器简称为C51语言或C51。1、C语言与51单片机用汇编程序设计MCS–51系列单片机应用程序时,必须要考虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能寄存器正确、合理的使用以及按实际地址处理端口数据。用C语言编写MCS–51单片机的应用程序,虽然不像用汇编语言那样具体地组织、分配存储器资源和处理端口数据,但在C语言编程中,对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。1、C语言与51单片机支持MCS–51系列单片机的C语言编译器有很多种。如AmericanAutomation、Avocet、BSO/TASKING、DUNFIELDSHAREWARE、KEIL、Franklin等。其中KEIL以它的代码紧凑和使用方便等特点优于其它编译器,目前用得最为普遍。2、C51与标准CC51的主要语法规定、程序结构及程序设计方法都与标准的C语言相同,但在某些方面有区别。具体地说,在以下几个方面不一样:(1)C51中定义的库函数和标准C语言定义的库函数不同。标准的C语言定义的库函数是按通用微型计算机来定义的,而C51中的库函数是按MCS-51单片机相应情况来定义的;(2)C51中的数据类型与标准C的数据类型也有一定的区别,在C51中还增加了几种针对MCS-51单片机特有的数据类型;2、C51与标准C(3)C51变量的存储模式与标准C中变量的存储模式不一样,C51中变量的存储模式是与MCS-51单片机的存储器紧密相关的;(4)C51与标准C的输入输出处理不一样,C51中的输入输出是通过MCS-51串行口来完成的,输入输出指令执行前必须要对串行口进行初始化;(5)C51与标准C在函数使用方面也有一定的区别,C51中有专门的中断函数。表1ANSIC标准关键字关键字用途说明auto存储种类说明用于声明局部变量,为默认值break程序语句退出最内层循环体case程序语句switch语句中的选择项char数据类型声明单字节整型数或字符型数据const存储种类说明在程序执行过程中不可修改的值continue程序语句转向下一次循环default程序语句switch语句中缺省选择项do程序语句构成do…while循环结构double数据类型声明双精度浮点数else程序语句构成if…else条件结构enum数据类型声明枚举类型数据extern存储种类说明在其他程序模块中声明了的全局变量float数据类型声明单精度浮点数for程序语句构成for循环结构goto程序语句构成goto循环结构if程序语句构成if…else条件结构int数据类型声明整型数long数据类型声明长整型数register存储种类说明使用CPU内部寄存器变量return程序语句函数返回short数据类型声明短整型signed数据类型声明有符号整型数sizeof运算符计算表达式或数据类型的字节数static存储种类说明静态变量struct数据类型声明结构体类型数据switch程序语句构成switch选择结构typedef数据类型声明重新进行数据类型定义union数据类型声明联合类型数据unsigned数据类型声明无符号数据void数据类型声明无类型数据或函数volatile数据类型声明声明该变量在程序执行中可被隐含地改变while程序语句构成while和do…while循环结构表2C51编译器扩充关键字关键字用途说明_at_地址定位为变量进行绝对地址定位_priority_多任务优先声明规定RTX51或RTX51Tiny的任务优先级_task_任务声明定义实时多任务函数alien函数特性声明用于声明与PL/M51兼容的函数bdata存储器类型声明可位寻址的MCS-51内部数据存储器bit位变量声明声明一个位变量或位类型函数code存储器类型声明MCS-51的程序存储空间compact存储器模式按compact模式分配变量的存储空间data存储器类型声明直接寻址MCS-51的内部数据寄存器idata存储器类型声明间接寻址MCS-51的内部数据寄存器interrupt中断函数声明定义一个中断服务函数large存储器模式按large模式分配变量的存储空间pdata存储器类型声明分页寻址的51外部数据空间sbit位变量声明声明一个位变量sfr特殊功能寄存器声明声明一个8位特殊功能寄存器sfr16特殊功能寄存器声明声明一个16位特殊功能寄存器small存储器模式按small模式分配变量的存储空间using寄存器组定义定义MCS-51的工作寄存器组xdata存储器类型声明定义MCS-51外部数据空间3、C51程序结构和标准C程序结构相同,采用函数结构每个C51程序由一个或多个函数组成,在这些函数中至少应包含一个主函数main(),也可以包含一个main()函数和若干个其它的功能函数。程序的执行总是从main()函数开始的,其位置无特殊规定。程序的开始部分一般是预处理命令、函数说明和变量定义等。预处理命令include函数说明longfun1();floatfun2();intx,y;floatz;功能函数1fun1(){函数体…}功能函数2fun2(){函数体…}主函数main(){主函数体…}实例简单控制指示灯功能要求:系统启动后,当按下一个按钮开关后再闪烁5次后熄灭。以后每次按下按钮开关,发光二极管都会闪烁5次。硬件设计:实际动手:仿真:(Proteus)C程序(续):#includereg52.h#includestdio.hsbitp10=P1^0;sbitp20=P2^0;voiddelay(unsignedinti);voidmain(){intn,c;P1=0xff;P2=0xff;C程序(续):if(p20==0){c=1;}if(c==1){n=5;while(n0){p10=0;delay(10000000);p10=1;delay(10000000);n--;}c=0;}}C程序(续):voiddelay(unsignedinti){unsignedintj;for(j=0;ji;j++){}}汇编程序org0000hsjmpmainorg0030hmain:movp2,#0ffhmovc,p2.0jcmainmovr0,#5hloop:movp1,#00hacalldelaymovp1,#0ffhacalldelaydjnzr0,loopsjmpmain汇编程序delay:movr1,#05hnext2:movr2,#0ffhnext1:movr3,#0FFhdjnzr3,$djnzr2,next1djnzr1,next2retend二、C51的数据类型基本数据类型长度取值范围unsignedchar1字节0~255signedchar1字节-128~+127unsignedint2字节0~65535signedint2字节-32768~+32767unsignedlong4字节0~4294967295signedlong4字节-2147483648~+2147483647float4字节1.175494E-38~3.402823E+38bit1位0或1sbit1位0或1sfr1字节0~255sfr162字节0~65535特殊功能寄存器型这是C51扩充的数据类型,用于访问MCS-51单片机中的特殊功能寄存器数据,它分sfr和sfr16两种类型。sfr为字节型特殊功能寄存器类型,占一个内存单元;sfr16为双字节型特殊功能寄存器类型,占用两个字节单元。利用它们可以访问MCS-51内部的所有两个字节的特殊功能寄存器。在C51中对特殊功能寄存器的访问必须先用sfr或sfr16进行声明。位类型这也是C51中扩充的数据类型,用于访问MCS-51单片机中的可寻址的位单元。在C51中,支持两种位类型:bit型和sbit型。它们在内存中都只占一个二进制位,其值可以是“1”或“0”。其中用bit定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的,而用sbit定义的位变量必须与MCS-51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。三、C51的运算量与存储类型1、常量2、变量3、存储模式4、绝对地址的访问5、对特殊功能寄存器的访问6、对并行口的访问7、对位地址的访问1、常量常量是指在程序执行过程中其值不能改变的量。C51中支持整型常量、浮点型常量、字符型常量和字符串型常量。(1)整型常量C51中整型常量可以表示成以下几种形式:十进制整数。如234、-56、0等。十六进制整数。以0x开头表示,如0x12表示十六进制数12H。长整数。在C51中当一个整数的值达到长整型的范围,则该数按长整型存放,在存储器中占四个字节,另外,如一个整数后面加一个字母L,这个数在存储器中也按长整型存放。如123L在存储器中占四个字节。(2)浮点型常量浮点型常量也就是实型常数。有十进制表示形式和指数表示形式。十进制表示形式又称定点表示形式,由数字和小数点组成。如0.123、34.645等都是十进制数表示形式的浮点型常量。指数表示形式为:[]数字[.数字]e[]数字例如:123.456e-3、-3.123e2等都是指数形式的浮点型常量。(3)字符型常量字符型常量是加单引号的字符,如‘a’、‘1’、‘F’等。可以是可显示的ASCII字符,也可以是不可显示的控制字符。对不可显示的控制字符须在前面加上反斜杠“\”组成转义字符。利用它可以完成一些特殊功能和输出时的格式控制。常用的转义字符如课本P73表4-4所示。表4.4常用转义字符转义字符含义ASCII码\0空字符(null)00H\n换行符(LF)0AH\r回车符(CR)0DH\t水平制表符(HT)09H\b退格符(BS)08H\f换页符(FF)0CH\‘单引号27H\”双引号22H\\反斜杠5CH(4)字符串型常量字符串型常量由双引号“”括起的字符组成。如“D”、“1234”、“ABCD”等。字符串常量与字符常量是不一样的,一个字符常量在计算机内只用一个字节存放,而一个字符串常量在内存中存放时不仅双引号内的字符一个占一个字节,而且系统会自动的在后面加一个转义字符“\0”作为字符串结束符。因此不要将字符常量和字符串常量混淆,如字符常量‘A’和字符串常量“A”是不一样的。2、变量在C51中,变量在使用前必须对变量进行定义,指出变量的数据类型和存储模式。以便编译系统为它分配相应的存储单元。定义的格式如下:[存储种类]数据类型[存储器类型]变量名表(1)存储种类存储种类是指变量在程序执行过程中的作用范围。C51变量的存储种类有四种,分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。如果省略存储种类,则该变量默认为自动(auto)变量。(2)数据类型说明符数据类型说明符:指明变量的数据类型,指明变量在存储器中占用的字节数。可以是基本数据类型说明符,也可以是组合数据类型说明符,还可以是用typedef或#define定义的类型别名。在C51中,为了增加程序的可读性,允许用户为系统固有的数据类型说明
本文标题:MCS-51单片机C语言程序设计
链接地址:https://www.777doc.com/doc-4005998 .html