微机原理与单片机应用:5 单片机C51程序设计基础

上传人:pu****.1 文档编号:570256972 上传时间:2024-08-03 格式:PPT 页数:52 大小:411KB
返回 下载 相关 举报
微机原理与单片机应用:5 单片机C51程序设计基础_第1页
第1页 / 共52页
微机原理与单片机应用:5 单片机C51程序设计基础_第2页
第2页 / 共52页
微机原理与单片机应用:5 单片机C51程序设计基础_第3页
第3页 / 共52页
微机原理与单片机应用:5 单片机C51程序设计基础_第4页
第4页 / 共52页
微机原理与单片机应用:5 单片机C51程序设计基础_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《微机原理与单片机应用:5 单片机C51程序设计基础》由会员分享,可在线阅读,更多相关《微机原理与单片机应用:5 单片机C51程序设计基础(52页珍藏版)》请在金锄头文库上搜索。

1、第第5章章 单片机单片机C51程序设计基础程序设计基础5.1 C51数据与运算数据与运算C语言中有如下几个基本数据类型:语言中有如下几个基本数据类型: 5.1.1 C51的数据类型的数据类型char: 单字节,可以存放一个字符。单字节,可以存放一个字符。int: 整数,对大多数单片机开发软件而言是双字节大小整数,对大多数单片机开发软件而言是双字节大小float: 单精度浮点数。单精度浮点数。double:双精度浮点数。:双精度浮点数。关键字:关键字:short int data;long int adder;16位位32位位unsigned charsigned char 0255-128 +

2、127单片机特有的数据类型单片机特有的数据类型 bit位变量,值为位变量,值为0或或1sbit声明可位寻址空间的一个位声明可位寻址空间的一个位sfr特殊功能寄存器,特殊功能寄存器,8位位sfr16特殊功能寄存器,特殊功能寄存器,16位位例:例: bit YesOrNo; /定义定义bit类型变量,占用类型变量,占用bdata区的一个位区的一个位 sbit P0_1 = P01; /申明一个引用名申明一个引用名P0_1,指向端口,指向端口P0的第的第1位位 /系统不会为系统不会为sbit类型的数据分配额外的空间类型的数据分配额外的空间 sfr P0 = 0x80; /用用sfr定义定义8位的位的

3、SFR sfr16 DPTR = 0x82; /用用sfr16定义定义16位的位的SFR sfr16 T2 = 0xCC; /含含TH2和和TL2表表5.1 C51数据类型数据类型数据类型数据类型位宽位宽字节数字节数数值范围数值范围bit101char81-128+127unsigned char810255short162-32768+32767unsigned short162065535int162-32768+32767unsigned int162065535long324-2147483648+2147483647unsigned long32404294967295float32

4、41.175494E-383.402823E+38(6位数字)位数字)double6481.175494E-383.402823E+38(10位数字)位数字)sbit101sfr810255sfr161620655355.1.2 C51的存储类型的存储类型3种存储模式种存储模式 :Small模式,所有缺省变量参数均装入模式,所有缺省变量参数均装入内部内部RAM。 优点是速度快,优点是速度快, 缺点在于空间有限,仅适用于小规模程序设计。缺点在于空间有限,仅适用于小规模程序设计。Compact模式,所有缺省变量均位于模式,所有缺省变量均位于外部外部RAM区的一页区的一页 (256个字节),具体哪一

5、页可由个字节),具体哪一页可由P2口指定口指定 (在(在STARTUP.A51文件中说明,也可用文件中说明,也可用pdata指定)。指定)。 优点是可用空间较优点是可用空间较Small宽裕,宽裕, 速度比速度比Small慢但比慢但比Large要快。要快。Large模式,所有缺省变量可放在多达模式,所有缺省变量可放在多达64KB的外部的外部RAM区区。 优点在于空间大,可存变量多,优点在于空间大,可存变量多, 缺点是速度较前两种模式要慢。缺点是速度较前两种模式要慢。表表5.2 51单片机存储类型及存储区单片机存储类型及存储区类型关键字类型关键字存储区存储区描述描述dataDATA单片机内部单片机

6、内部RAM空间的低空间的低128字节,可在一个周期内直接寻址。字节,可在一个周期内直接寻址。bdataBDATADATA区中可以字节、位混合寻址的区中可以字节、位混合寻址的16字节位寻址区。字节位寻址区。idataIDATA52系列的单片机内部系列的单片机内部RAM高高128字节字节必须采用间接寻址。必须采用间接寻址。xdataXDATA片外片外RAM,地址范围,地址范围64KB,使用,使用DPTR间接寻址。间接寻址。pdataPDATA片外片外RAM分页寻址的分页寻址的256字节,可通过字节,可通过P0口的地址对其寻址。口的地址对其寻址。codeCODE程序存储区,内容只读,使用程序存储区,

7、内容只读,使用DPTR变址寻址。变址寻址。5.1.3 8051特殊功能寄存器的特殊功能寄存器的C51定义定义(1)sfr:声明字节寻址的特殊功能寄存器,例如:声明字节寻址的特殊功能寄存器,例如:sfr P0 = 0x80;(2)sfr16该关键字对于一些该关键字对于一些8051派生系列单片机,派生系列单片机, 可以声明其内两个连续地址的特殊功能寄存器(可以声明其内两个连续地址的特殊功能寄存器(SFR),), 例如:例如:sfr16 T2 = 0xCC;(3)sbit:声明可位寻址的特殊功能寄存器和别的可位寻址目标。:声明可位寻址的特殊功能寄存器和别的可位寻址目标。 “=”号后将绝对地址赋给变量

8、名,其声明形式又有以下号后将绝对地址赋给变量名,其声明形式又有以下3种:种:用已声明的用已声明的sfr寄存器名寄存器名 整数常量,例如:整数常量,例如: sfr KEYS = 0x80;/ 声明声明KEYS为特殊功能寄存器,地址为为特殊功能寄存器,地址为0x80。sbit KEY_UP = KEYS 1;/ 指定指定KEYS的第的第1位连接位连接UP按键。按键。sbit KEY_DOWN= KEYS 2;/ 指定指定KEYS的第的第2位连接位连接DOWN按键。按键。sbit KEY_SET= KEYS 3; 用一个整数常量作为基地址用一个整数常量作为基地址 后一个整数常量作为指定位,后一个整数

9、常量作为指定位, 例如:例如: 地址地址0x88对应的是对应的是TCON寄存器,寄存器,第第5位表示定时器位表示定时器0计数溢出标志位,计数溢出标志位,第第4位表示定时器位表示定时器0计数允许位,计数允许位,第第1位表示定时器位表示定时器0中断允许位:中断允许位:sbit TF0= 0x88 5;sbit TR0= 0x88 4;sbit IE0= 0x88 1;sbit EA= 0xA8 7;/ 指定指定0xA8的第的第7位为位为EA,即全局中断允许,即全局中断允许 直接用一个整数常量作为绝对地址,例如:直接用一个整数常量作为绝对地址,例如: sbit TF0= 0x8D;sbit TR0=

10、 0x8C;sbit IE0= 0x89;5.1.4 8051并行接口及位变量的并行接口及位变量的C51定义定义REG51.h和和REG52.h这两个头文件这两个头文件 sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;AT89X51.H头文件头文件 sbit P0_0 = 0x80;sbit P0_1 = 0x81;sbit P0_2 = 0x82;sfr SEGDATA = P0;/* 数码管数据端口数码管数据端口 */sbit SEL0 = P1 0;/* 数码管数码管0片选端口片选端口 */sbit SEL1 = P1 1;

11、/* 数码管数码管1片选端口片选端口 */sbit KEY_SET = P1 7;/* 设置按键设置按键 */5.2 C51运算符、表达式及其规则运算符、表达式及其规则5.2.1 (复合)赋值运算符(复合)赋值运算符例如:例如: count=5; total1=total2=0;Total=Total+3;Total+=3;5.2.2 算术运算符算术运算符5.2.3 自增和自减运算符自增和自减运算符例如:例如: -Couter; Couter-; +Amount; Amount+;放前后都一样放前后都一样num1=4;num2=8; a=+num1;b=num2+;放前后不一样放前后不一样5.

12、2.4 关系运算符关系运算符5.2.5 逻辑运算符逻辑运算符5.2.6 位运算符位运算符& 运算的规则是当两个位都为运算的规则是当两个位都为1时,结果为时,结果为1,否则为,否则为0; | 运算的规则是当两个位都为运算的规则是当两个位都为0时,结果为时,结果为0,否则为,否则为1; 运算的规则是当两个位相同时,结果为运算的规则是当两个位相同时,结果为0,否则为,否则为1; 运算的规则是当为运算的规则是当为1时结果为时结果为0,当为,当为0时,结果为时,结果为1。(1)设置位:)设置位: 设置某位为设置某位为1,而其他位保持不变,可以使用位逻辑或运算,而其他位保持不变,可以使用位逻辑或运算 ch

13、ar c; c = c | 0x40;(2)清除位:)清除位: 设置某位为设置某位为0,而其他位保持不变,可以使用位逻辑与运算,而其他位保持不变,可以使用位逻辑与运算 c = c & 0xBF; 5.2.7 条件运算符条件运算符 ?:首先对第一个表达式进行检验,首先对第一个表达式进行检验,如果为真,则返回表达式如果为真,则返回表达式2的值;的值;如果为假,则返回表达式如果为假,则返回表达式3的值。的值。5.2.8 指针和地址运算符指针和地址运算符指针数据类型是一种存放指向另一个数据的地址的变量类型。指针数据类型是一种存放指向另一个数据的地址的变量类型。 变量变量 = * 指针变量指针变量 (将

14、指针变量所指向的目标变量的值赋给等号左边的变量)(将指针变量所指向的目标变量的值赋给等号左边的变量)指针变量指针变量 = & 目标变量目标变量 (将目标变量的地址赋给等号左边的变量)(将目标变量的地址赋给等号左边的变量)unsigned int data A _at_ 0x0028;/ 变量变量A存放在地址存放在地址0x0028unsigned int data B _at_ 0x002A;/ 变量变量B存放在地址存放在地址0x002Aunsigned int data *P _at_ 0x002C; / 指针变量指针变量P存放在地址存放在地址0x002CA = 10;/ 变量变量A初值为初值

15、为10B = 20;/ 变量变量B初值为初值为20P = &B;/ 指针指针P现在指向变量现在指向变量B*P = 100; / 指针指针P所指变量(变量所指变量(变量B)存放内容更改为)存放内容更改为100P = &A;/ 指针指针P现在指向变量现在指向变量AB = *P;/ 变量变量B的值现在更改为的值现在更改为10注:注:_at_关键字用于变量存储的绝对定位(关键字用于变量存储的绝对定位(Absolute Variable Location)还有另一种变量存储绝对定位方法,即使用宏(还有另一种变量存储绝对定位方法,即使用宏(macro)主要有:主要有:CBYTE DBYTE PBYTE X

16、BYTE CWORD DWORD PWORD XWORD例:例:#include rval = CBYTE0x00002; sval = DBYTE0x02; DBYTE0x02 = 5;5.2.9 优先级和结合性优先级和结合性表表5.3 C51运算符的优先级和结合性运算符的优先级和结合性优先级优先级运算符运算符结合性结合性最高最高( ) - - .自左向右自左向右! + - + - * & sizeof自右向左自右向左* / %自左向右自左向右+ -自左向右自左向右自左向右自左向右 =自左向右自左向右= !=自左向右自左向右&自左向右自左向右自左向右自左向右|自左向右自左向右&自左向右自左向

17、右|自左向右自左向右?:自右向左自右向左= += -= *= /= %= &= = |= =自右向左自右向左最低最低,自左向右自左向右5.3 C51流程控制语句流程控制语句5.3.1 C51程序的基本结构及其流程图程序的基本结构及其流程图三种基本结构:顺序结构、选择结构和循环结构三种基本结构:顺序结构、选择结构和循环结构 1. 顺序结构及其流程图顺序结构及其流程图 2. 选择结构及其流程图选择结构及其流程图 选择结构还有两种派生结构:串行多分支结构和并行多分支结构选择结构还有两种派生结构:串行多分支结构和并行多分支结构 (1)串行多分支结构流程图)串行多分支结构流程图 (2)并行多分支结构)并

18、行多分支结构 3.循环结构及其流程图循环结构及其流程图 循环结构又有循环结构又有“while”型和型和“do while”型两类型两类 (1)while型循环结构型循环结构 (2)do while型循环结构型循环结构 5.3.2 选择语句选择语句选择语句有三种:选择语句有三种:if语句、语句、switch/case语句和条件表达式语句和条件表达式 5.3.3 循环语句循环语句三种基本的循环语句:三种基本的循环语句:for语句、语句、while语句和语句和do-while语句语句 5.4 C51构造数据类型构造数据类型5.4.1 数组数组5.4.2 指针指针5.4.3 结构体结构体5.4.4 共

19、用体共用体5.4.5 枚举枚举5.5 函数函数include / 预处理命令预处理命令longfun1( );/ 函数说明函数说明floatfun2( );int x,y;/ 全程变量说明全程变量说明float z;func1( )/ 功能函数功能函数1 局部变量说明局部变量说明; 函数体函数体;Main( )/主函数主函数 局部变量说明局部变量说明; 主函数体主函数体;func2( )/功能函数功能函数2 局部变量说明局部变量说明; 函数体函数体;对被调用函数的说明对被调用函数的说明在一个函数中调用另一个函数必须具有以下条件:在一个函数中调用另一个函数必须具有以下条件:(1)被调用函数必须已

20、经存在(库函数或用户自定义函数)被调用函数必须已经存在(库函数或用户自定义函数) (2)如果程序中使用了库函数,或使用了不在同一文件中的)如果程序中使用了库函数,或使用了不在同一文件中的 自定义函数,则应该在程序的开头处使用自定义函数,则应该在程序的开头处使用include包含包含 语句,将所调用函数的信息包括到程序中来。语句,将所调用函数的信息包括到程序中来。 #include “stdio.h”/ 将标准输入、输出头文件(在函数库中)将标准输入、输出头文件(在函数库中)/包含到程序中,该文件中包含包含到程序中,该文件中包含printf()等库函数。()等库函数。#include “math

21、.h”/ 将函数库中专用数学库的函数将函数库中专用数学库的函数包含到包含到/ 程序中来。程序中来。(3)如果程序使用自定义函数,且该函数与调用它的函数同在)如果程序使用自定义函数,且该函数与调用它的函数同在 一个文件中,则应根据主调函数与被调函数在文件中的位一个文件中,则应根据主调函数与被调函数在文件中的位 置,决定是否对被调用函数作出说明。置,决定是否对被调用函数作出说明。 如果被调用函数出现在主调用函数之后如果被调用函数出现在主调用函数之后调用之前,对被调用函数的返回值类型做出说明调用之前,对被调用函数的返回值类型做出说明 返回值类型说明符返回值类型说明符 被调用函数的函数名被调用函数的函

22、数名( ); 如果被调用函数出现在主调用函数之前如果被调用函数出现在主调用函数之前可以不对被调用函数加以说明可以不对被调用函数加以说明 如果在所有函数定义之前,在文件的开头处,在函数的如果在所有函数定义之前,在文件的开头处,在函数的 外部已经说明了函数的类型外部已经说明了函数的类型 则在主调用函数中不必对所调用的函数再作返回值类型说明则在主调用函数中不必对所调用的函数再作返回值类型说明 5.5.3 函数的嵌套调用与递归调用函数的嵌套调用与递归调用 1.函数的嵌套调用函数的嵌套调用 函数的嵌套调用,即在调用一个函数的过程中,函数的嵌套调用,即在调用一个函数的过程中,允许调用另外一个函数。允许调用

23、另外一个函数。 每次调用都将使每次调用都将使8051系统把系统把2字节(调用指令的下一条指令字节(调用指令的下一条指令地址)压入内部堆栈,而地址)压入内部堆栈,而C编译器通常依靠堆栈来频繁地进编译器通常依靠堆栈来频繁地进行参数传递。行参数传递。所以在一个函数内应将嵌套调用的层次限制在所以在一个函数内应将嵌套调用的层次限制在45层以内。层以内。 2.函数的递归调用函数的递归调用 函数的递归调用,即在调用一个函数的过程中,函数的递归调用,即在调用一个函数的过程中,又直接或间接地调用该函数本身。又直接或间接地调用该函数本身。 举例:利用函数的递归调用计算一个数的阶乘!举例:利用函数的递归调用计算一个

24、数的阶乘! int factorial(int n) int result; if (n = = 0) result = 1; else result = n * factorial(n-1); / factorial函数的递归调用函数的递归调用 return(result);5.5.4 中断服务函数中断服务函数 1.中断服务函数的定义中断服务函数的定义 返回值类型标识符返回值类型标识符 函数名函数名( ) interrupt 中断号中断号 using 寄存器组号寄存器组号函数体语句函数体语句; 中断函数不能进行参数传递;中断函数不能进行参数传递; 中断函数没有返回值;建议定义为中断函数没有返

25、回值;建议定义为void类型类型 在任何情况下都不能直接调用中断函数,否则会产生编译错误。在任何情况下都不能直接调用中断函数,否则会产生编译错误。 如果在中断函数中调用了其它函数,则被调用函数所使用的如果在中断函数中调用了其它函数,则被调用函数所使用的 寄存器必须与中断函数不同。否则会产生不正确的结果。寄存器必须与中断函数不同。否则会产生不正确的结果。 C51编译器对中断函数编译时会自动在程序开始和结束处加上编译器对中断函数编译时会自动在程序开始和结束处加上 相应的内容,具体如下:相应的内容,具体如下: 在程序开始处对在程序开始处对ACC、B、DPH、DPL和和PSW入栈,结束时出栈。入栈,结

26、束时出栈。 中断函数未加中断函数未加using 修饰符的,开始时还要将修饰符的,开始时还要将R0R1入栈,入栈, 结束时出栈。结束时出栈。 如中断函数加如中断函数加using 修饰符,则在开始将修饰符,则在开始将PSW入栈后还要修改入栈后还要修改 PSW中的工作寄存器组选择位。中的工作寄存器组选择位。 C51编译器从绝对地址编译器从绝对地址8中断号中断号3处产生一个中断向量,处产生一个中断向量, 中断号即是修饰符中断号即是修饰符interrupt后面的数字。后面的数字。 该向量包含一个到中断函数入口地址的绝对跳转。该向量包含一个到中断函数入口地址的绝对跳转。 中断函数最好写在文件的尾部,并且禁

27、止使用中断函数最好写在文件的尾部,并且禁止使用extern存储类型存储类型 说明。防止其它程序调用。说明。防止其它程序调用。2.修饰符修饰符interruptinterrupt是是C51中非常重要的一个修饰符中非常重要的一个修饰符 在该修饰符后,中断号的取值为在该修饰符后,中断号的取值为031, 0 外部中断外部中断01 定时定时/计数器计数器T02 外部中断外部中断13 定时定时/计数器计数器T14 串行口中断串行口中断5 定时定时/计数器计数器T2返回值类型标识符返回值类型标识符 函数名函数名( ) interrupt 中断号中断号 using 寄存器组号寄存器组号函数体语句函数体语句;3

28、.修饰符修饰符using using用于指定本函数内部使用的工作寄存器组,其后寄存器用于指定本函数内部使用的工作寄存器组,其后寄存器组号的取值为组号的取值为03,表示本函数使用的工作寄存器组号。,表示本函数使用的工作寄存器组号。 void int1( ) interrupt 2 using 1count +;/ count为全局变量为全局变量统计外中断统计外中断1的中断次数的中断服务程序的中断次数的中断服务程序 5.5.5指向函数的指针变量指向函数的指针变量 指针变量可以指向变量、字符串和数组指针变量可以指向变量、字符串和数组 指针变量还可以指向函数,即可以用函数的指针变量来调用函数指针变量还

29、可以指向函数,即可以用函数的指针变量来调用函数 一个函数在编译时,一个函数在编译时,C编译器会给它分配一个入口地址,该地编译器会给它分配一个入口地址,该地址就称为函数的指针。可以用一个指针变量指向函数,然后址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。通过该指针变量调用此函数。举例:用函数的指针变量调用函数举例:用函数的指针变量调用函数int hcf(u,v);main( ) int sum; int (*func_pointer)( ); / 函数指针变量定义函数指针变量定义 func_pointer=hcf; / 将函数将函数hcf的入口地址赋给指针变量的入

30、口地址赋给指针变量func_pointer sum = 3 + (*func_pointer)(a,b); / 用函数指针变量调用函数用函数指针变量调用函数.5.5.6 局部变量和全局变量局部变量和全局变量关于变量关于变量: 主函数中定义的变量也只能在主函数中使用,不能在其它主函数中定义的变量也只能在主函数中使用,不能在其它 函数中使用。同时,主函数中也不能使用其它函数中定义函数中使用。同时,主函数中也不能使用其它函数中定义 的变量。因为主函数也是一个函数,它与其它函数是平行的变量。因为主函数也是一个函数,它与其它函数是平行 关系。这一点是与其它语言不同的,应予以注意。关系。这一点是与其它语言

31、不同的,应予以注意。 形参变量是属于被调函数的局部变量,实参变量是属于主调形参变量是属于被调函数的局部变量,实参变量是属于主调 函数的局部变量。函数的局部变量。 允许在不同的函数中使用相同的变量名,它们代表不同的对允许在不同的函数中使用相同的变量名,它们代表不同的对 象,分配不同的单元,互不干扰,也不会发生混淆。象,分配不同的单元,互不干扰,也不会发生混淆。 如在前例(如在前例(p135)中,形参和实参的变量名都为中,形参和实参的变量名都为n,是完全允许的。,是完全允许的。 在复合语句中也可定义变量,其作用域只在复合语句范围内。在复合语句中也可定义变量,其作用域只在复合语句范围内。5.6 C5

32、1的库函数的库函数 5.6.1一般一般I/O函数函数stdio.h表5.4 流输入和流输出函数函数函数说明明getchar使用使用_getkey和和putchar读入和回入和回应一个字符一个字符_getkey通通过8051串口串口读入一个字符入一个字符gets使用使用getchar函数函数读入和回入和回应一个字符一个字符printf/printf517使用使用putchar函数函数输出格式化的数据出格式化的数据putchar使用使用8051串口串口输出一个字符出一个字符puts使用使用putchar函数函数输出字符串和出字符串和换行符行符nscanf/scanf517使用使用getchar函数

33、函数读取格式化数据取格式化数据sprintf/sprintf517将格式化数据将格式化数据输出到字符串出到字符串Sscanf/sscanf517从字符串中从字符串中读入格式化数据入格式化数据ungetchar将字符放回将字符放回getchar输入入缓冲区冲区vprintf使用使用putchar函数函数输出格式化数据出格式化数据vsprintf将格式化数据将格式化数据输出到字符串中出到字符串中5.6.2字符函数库字符函数库string.h 表表5.5 字符串操作函数字符串操作函数函数函数说明明strcat连接两个字符串接两个字符串strchr返回指向字符串中指定字符首次出返回指向字符串中指定字符

34、首次出现位置的指位置的指针strcmp比比较两个字符串两个字符串strcpy将一个字符串内容复制到另一个字符串中将一个字符串内容复制到另一个字符串中strcspn返回字符串第一个匹配另一字符串中字符的字符索引返回字符串第一个匹配另一字符串中字符的字符索引值strlen返回字符串的返回字符串的长度度strncat将一个字符串中指定的字符将一个字符串中指定的字符连接到另一个字符串中接到另一个字符串中strncmp比比较两个字符串中指定数目的字符两个字符串中指定数目的字符strncpy将一个字符串中指定数目的字符复制到另一个字符串中将一个字符串中指定数目的字符复制到另一个字符串中strpbrk返回一

35、个指返回一个指针,指向字符串中第一个匹配另一个字符串中任一字符的位置,指向字符串中第一个匹配另一个字符串中任一字符的位置strops返回指定字符在字符串中首次出返回指定字符在字符串中首次出现的位置的位置strrchr返回指向指定字符在字符串中最后出返回指向指定字符在字符串中最后出现的位置的指的位置的指针strrpbrk返回一个指返回一个指针,指向搜索字符串中最后一个匹配另一字符串中任一字符的,指向搜索字符串中最后一个匹配另一字符串中任一字符的位置位置strrpos返回指定字符在字符串中最后出返回指定字符在字符串中最后出现的位置的位置strspn返回字符串中第一个不匹配另一字符串中任一字符的索引

36、返回字符串中第一个不匹配另一字符串中任一字符的索引strstr返回一个指返回一个指针,指向字符串中与另一字符串相同的字符,指向字符串中与另一字符串相同的字符5.6.3标准函数库标准函数库stdlib.h及其它头文件及其它头文件(1)标准函数库()标准函数库(STDLIB.H)头文件中包含类型转换和)头文件中包含类型转换和 存储器分配函数的原型和定义,如下所列:存储器分配函数的原型和定义,如下所列: atof atoi atolcalloc init_ mempool mallocrand realloc strtod strtol strtoulfreerand (2)数学函数库()数学函数库

37、(math.h)头文件中包含所有浮点运算函数)头文件中包含所有浮点运算函数 的定义和原型,其它的数学运算函数也包含在该文件中,的定义和原型,其它的数学运算函数也包含在该文件中, 所有的数学运算函数如下:所有的数学运算函数如下: absacosasinstanstan2 cabscoscoshexpfabsfloorfmod fprestore fpsaavelabsloglog10 modf powsinsinhsqrttantanh(3)绝对地址访问()绝对地址访问(absacc.h)头文件中包含的宏定义允许)头文件中包含的宏定义允许 用户直接访问用户直接访问8051单片机的不同存储区,所有

38、的宏定义单片机的不同存储区,所有的宏定义 如下:如下: CBYTE CWORD DBYTE DWORD FARRAYFCARRAY FCVAR FVAR PBYTEPWORDXBYTE XWORD(4)内部函数库()内部函数库(intrins.h)包含有诸如)包含有诸如_nop_一类的单片一类的单片 机内部操作函数:机内部操作函数: _chkfloat_crol_ _cror_irol_ _iror_lrol_ _lror_nop_ _testbit_crol_带循环 是位左移,后面补0。 例如P1=0xEE; /P1=_crol_(P1,1); 效果是11101110、11011101、10

39、111011. /P1=1; 效果就是11101110、11011100、10111000. 右移是同样的原理。 (5)访问)访问SFR和和SFR_bit地址头文件(地址头文件(reg.h) C51库提供了一些头文件库提供了一些头文件reg.h,在在8051系列单片机中,这些头文件用来定义一些指向系列单片机中,这些头文件用来定义一些指向特殊功能寄存器常量。这些文件列表如下:特殊功能寄存器常量。这些文件列表如下:reg151s.h reg152.h reg320.h reg410.h reg451.hreg452.h reg509.h reg51.h reg515.h reg515a.hreg5

40、15c.h reg517.h reg517a.h reg51f.h reg51g.hreg51gb.h reg52.h reg552.h reg592.h reg781.h5.7 模块化程序设计模块化程序设计 Project的组成的组成:C51文件扩展名如下:文件扩展名如下:.ASM或或.A51 汇编语言源文件汇编语言源文件.C或或.C51 C51语言源文件语言源文件.H 编译时源文件中的头文件编译时源文件中的头文件.LST 汇编汇编/编译的程序和错误列表文件编译的程序和错误列表文件.ERR 错误报告文件错误报告文件.OBJ 可重定位的目标模块文件可重定位的目标模块文件.LIB 库文件库文件.LNK 连接连接/定位器使用的文件定位器使用的文件.MAP或或.MAP 连接连接/定位后产生的映像文件定位后产生的映像文件.HEX 连接连接/定位后产生的目标文件定位后产生的目标文件 C51程序的设计与开发C51源程序C51编译器浮动目标码模块链接器系统库用户库绝对定位目标码文件映像文件EEPROM编程硬件仿真器列表文件C51程序开发过程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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