第一章 C51程序设计基础_第1页
第一章 C51程序设计基础_第2页
第一章 C51程序设计基础_第3页
第一章 C51程序设计基础_第4页
第一章 C51程序设计基础_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机应用系统,江阴职业技术学院电子工学系,第一章C51语言基础,本章主要内容为1,C51概要2,数据类型3,常数和变量4,运算符和式5,c程序的基本结构6,函数实训1C程序设计,1,C51概要(1)c语言的特征,c 总共只有32个关键字运算符丰富,共计34种。 数据结构丰富。 具有结构化的控制语句。 语法限制不太严格,编程自由度很大。 生成的目标代码质量高,程序执行效率高。 与汇编语言相比,用c语言写的程序移植性好的c语言,可以直接访问物理地址,可以进行位操作,可以实现汇编语言的大部分功能,可以直接操作硬件。 也有人称此为中级语言。 (二) C51与组件的比较,以下结合8051来介绍单片机c

2、语言的优势:即使不知道单片机的指令集,也能实现。 可以制作完美的单片机程序,不需要知道单片机的具体硬件,也可以制作符合硬件实际专业水平的程序,不同函数的数据执行霸盖,切片上的有限。 c语言对数据进行了很多专业处理,避免了运行中间的异步破坏,c语言提供了复杂的数据类型(数组、结构、联合、枚举、指针等),大幅度增强了程序的处理能力和灵活性,auto、static、 提供存储类型(如const )和专用于8051单片机的存储类型(如data、idata、pdata、xdata、code ),并自动为变量合理分配地址,如small、compact、large等编译符合片上内存的大小中断服务程序的现场保

3、护和恢复、中断向量的填写,都与单片机直接有关,全部由c编译器提供一般的标准库,供用户直接使用。 解释复杂的数据类型和函数原型有助于程序移植和单片机系列化产品的开发,通过严格的语法检查,可以轻松地接受各种错误少、高级语言水平容易迅速排除的实用程序服务。 例如,片上资源的初始化会自动生成一个特殊的实用程序,实时多任务操作系统可以调度多个任务、简化用户编程、增加运行的安全性等。(KEILC的搭乘顺序(1)制定项目。 单击“Project”菜单,然后从弹出菜单中选择“NewProject”和“c”程序的项目名称和名称。 只要是符合Windows文件规则的文件名即可。 “保存”后的文件扩展名为uv2。

4、这是KEILuVision2项目的文件扩展名。 (2)选择单片机的类型,在此选择常用的Ateml公司的AT89C51。 (3)创建文件、编辑源文件、保存文件时,注意后缀为. c(4),并将刚编辑的c文件添加到项目中。 (5)编译。 发现错误时,根据输出窗口的信息进行修正。 (6)全速驾驶。 此时,打开串行窗口,一边观察串行调试窗口一边陆续打出HelloWorld! “”。 学习练习:示例1-1、示例1-1包含(void ) scon=0x 50; /允许串行方式1、TMOD=0 x20的接收/计时器1计时器方式2TCON=0 x40; /计时器1开始计数TH1=0 xE8; /11.0592M

5、Hz1200波特率TL1=0 xE8; TI=1; TR1=1; /定时器while (1)打印(hello world! n )显示n) HelloWorld、第二、数据类型、c语言标识符和关键字的C51编译器仅支持前32位标识符作为有效标识符,因此用户标识符不可过长。 关键字是用编程语言保留的特殊标识符,具有固定的名称和意义,在程序描述中不允许与关键字相同的标识符。 KEILuVision2中的关键字除了根据ANSIC标准的32个关键字之外,还根据51单片机的特征扩展了关键字。 表41,表中显示了KEILuVision2C51编译器支持的数据类型。、1char字符类型、char类型的长度是

6、字节,通常用于定义处理字符数据的变量或常数,用无符号字符类型unsignedchar表示的数值范围是0255带符号字符类型signedchar,用字节的最高字节表示数据的符号,“0” 可显示的数值范围为-128 127。 默认值为signedchar类型。 unsignedchar经常用于处理ASCII字符或小于或等于255的整数。 2int整数、int整数的长度为2字节,存储2字节的数据。 signedint表示数值范围为-3276832767,unsignedint,数值范围为065535。 默认值为signedint型。 在C51程序设计中,变量数据类型的定义极其重要,在所有数据类型中,

7、只有bit和unsignedchar这两种数据类型可以直接支持机械指令,因此需要对其他数据类型C51编译器进行一系列复杂的变量数据和变量类型的处理时,在C51程序的设计过程中,如果满足数据要求,请尽可能使用unsignedchar变量和bit变量。 signedchar变量也只占用一个字节,但是因为测试代码的符号位需要额外的操作,所以代码的执行效率很低。 学习练习:在proteus中模拟,看看无符号char和无符号int用于延迟的效果:看看P1端口L0和L1发光二极管点亮的时间。 例1-2 #包含/预处理命令sbitLED1=P10; sbitLED2=P11; voidmain(void)/

8、主函数名称unsignedinta; /定义变量a是unsignedint型unsignedcharb; /定义变量b是无符号char型do/dowhile循环for(a=0; a65535; a )LED1=0; /65535次将P1.0端口设为低电平,点亮LEDLED1=1,将P1.0端口设为高电平,关闭ledfor (a=0; a30000; a ); /空环for(b=0; b255; b )LED2=0; 将/255次P1.1端口设为低电平,将点亮LEDLED2=1的P1.1端口设为高电平,关闭ledfor (a=0; a30000; a ); /空回路while(1)观察:将a改为

9、char型有什么效果? 3长长长、长长长长为4字节,存储4字节的数据。 签名长龙。 显示的数值范围是-2147483648 2147483647,不一致的长,显示的数值范围是04294967295。 缺省值为signedlong,4float浮点型float浮点型,其十进制有效数字为7位,是符合IEEE754标准的单精度浮点型数据,占4字节。 5*指针类型指针类型本身是一个变量,它是存储在该变量中的另一数据的地址。 该指针变量必须占用一定的存储单元,根据处理器长度而不同,在C51中其长度通常为13字节。 指针变量也有类型。 6bit位标量bit位标量是C51编译器的扩展数据类型,可以定义位标量

10、,但不能定义位指针或位数组。 值是二进制位,不是0,而是1,类似于某些高级语言的布尔型True和False。 变量数据类型的选择,在C51程序设计中,变量数据类型的定义极其重要,在所有的数据类型中,只有bit和unsignedchar两种数据类型可以直接支持机械指令,因此,对于其他数据类型C51编译器,可以使用一系列复杂的变量数据和因此,在C51程序的设计过程中,如果满足数据要求,请尽量使用unsignedchar变量和bit变量。 signedchar变量也只占用一个字节,但是因为测试代码的符号位需要额外的操作,所以代码的执行效率很低。7、sfr特殊功能寄存器、sfr也是扩展数据型,点是存储

11、器单元,值域是0255。 利用这个,可以访问51单片机内部的所有特殊功能寄存器。如果在sfrP1=0 x90语句中指定了P1端口位于片内的寄存器,则在下一语句中,用P1=255 (使P1端口的所有管脚处于高电平)语句操作特殊功能寄存器。 另外,sfr1616位特殊功能寄存器,sfr16占用两个存储器单元,并且值域为065535。 sfr16和sfr一样,是用于操作特殊功能寄存器的,而像计时器T2一样,是用于操作占2字节的寄存器的。 sfr和sfr16可以直接定义51单片机的特殊寄存器,定义方法如下: sfr特殊功能寄存器名=特殊功能寄存器地址常数; sfr16特殊功能寄存器名=特殊功能寄存器地

12、址常数AT89C51的P1端口可以这样定义sfrP1=0 x90定义P1I/O端口,其地址为90Hsfr16T2=0 xCC; /8052计时器2,地址T2L为0 xCCH,T2H为0 xCD,说明:sfr键后面有定义的名称,可以任意选择。但是,为了满足标识符的命名规则,希望P1端口具有可以使用P1的意义。 等号后面需要常数(特殊寄存器的直接地址),不允许带运算符的表达式。 此外,该常数必须在特殊功能寄存器的地址范围内(80HFFH )。 具体可以看到教材8051内部RAM地址表。 在sfr16中定义16位特殊功能寄存器时,等号后面有低位地址,高位地址一定在物理低位地址上。 注意:此方法不能用

13、于定义计时器0和1。 用sfr16变量读取16位特殊功能寄存器时,首先读取低位字节,然后读取高位字节写入特殊功能寄存器时,首先写入高位字节,然后写入低位字节。 例如,sfr 16时间2=0xcc; /0 xcc是计时器2的地位地址Timer2=0 x1234; 以下代入TL2=0X34和同等TH2=0X12; 9、sbit、sbit是C51的扩展数据类型,可以访问芯片内部的RAM的可寻址位或特殊功能寄存器的可寻址位。 (1)sbit比特变量名称比特地址sbitP1_1=Ox91; /将位的绝对地址分配给位变量。 与sfr一样,sbit的比特地址必须处于80H-FFH之间。 (2)Sbit比特变

14、量名称特殊功能寄存器名称比特位置sfrP1=0 x90; sbitP1_1=P11; 在可寻址位存在于特殊功能寄存器中的情况下,该方法(3)sbit比特变量名称字节地址位位置sbitP1_1=0 x901; 这样,在今后的程序语句中,P1.1针可以用P1_1读写。 通常,它们可以直接使用系统提供的预处理文件,在其中已经定义了每个特殊功能寄存器的简单名称。 该方法实际上与汇编相同,只是对特殊功能寄存器的地址进行了符号化。 学习练习:在示例1-2的项目中打开REG51.h头文件,查看各特殊寄存器的定义。5、常数和变量、常数是程序运行时不能更改值的量,常数的数据类型是整数、浮点型、字符型、字符串型和

15、比特标量。 1整数常数可以用十进制数表示,例如123,0,89。 十六进制以0 x开始,例如0x4、-0 x3B。 长整数在数字后面加l。 例如,104L、034L、0 xF340等。 2浮点常数分为十进制和指数表示。 十进制数由数字和小数点构成,例如0.888、3345.345、0.0等整数或小数部分为0,可以省略,但需要小数点。3字符类型常数是用单引号(例如a、d )括起来的字符,是无法显示的控制字符,可以在该字符前面加一个反斜杠“”来构成特殊转义字符。 4字符串类型常量由用双引号括起来的字符组成,例如“test”、“OK”。 如果引号中没有字符,则为空字符串。 在使用特殊字符时,也使用转

16、义字符,如双引号。 在c中,字符串常量被视为字符类型的数组,在存储字符串时,在字符串的末尾附加0转义字符。 字符串常数“a”和字符常数a不同,前者在存储时多占有1字节的字间。 五位标量。 值是二进制。 常数在不需要更改值时可用,如固定的数据表、字典等。 常数的定义方法有几种,以下说明。#difineFalse0 x0; /预定义语句中的常数#difineTrue0 x1; /如果在这里将False定义为0,将True定义为1,则程序在False编译时自动替换为0,同样地,将True替换为1unsignedintcodea=100此语句在code中将a定义为程序内存。 将constunsigne

17、dintc=100代入const中,将c定义为无符号int常数,将这两个语句的值存储在程序存储器中,但程序存储器在执行中无法变更,因此在这两个语句之后使用a=110,a这样的代入语句时学习练习:例1-3 :在Proteus模拟中看到执行效果,在例1-3#include/预处理文件中定义了特殊寄存器的名称,例如P1端口定义了P1voidmain(void)/模式数据constunsignedch 0 xFD,0 xFB,0 xF7 0 xEF,0 xDF,0 xBF,0 x7F,0 xFF,0 xDF,0 xEF,0 xfd 7,0 xfb,0 xFF,0 xFF,0 xFE,0 xFC,0 xFC,0 xf8,0 xf 0,00f unsignedinta; /为循环定义变量unsignedcharb/C51编程时,请注意使用变量类型/尽可能少的字节类型,在大程序中使用dofor(b=0; b32; b )for(a=0; a30000; a ); /暂时延迟时间P1=designb; /读取定义的花纹数据,把花纹数据写入P1口while(1),思考:用上述常数排列实现显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论