版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 第五章第五章 单片机单片机C51程序设计基础程序设计基础第五章第五章 单片机单片机C51程序设计基础程序设计基础0、标准C语言一、C51变量定义格式变量定义格式二、 C51 运算符、表达式及其规则三、 C51 流程控制语句四、C51构造数据类型五、函数六、 C51库函数七、C51模块化程序设计标准标准C语言语言1、C语言程序的基本结构语言程序的基本结构#include 预处理命令预处理命令char fun1( ); 函数说明函数说明float fun2( );int x; 全局变量说明全局变量说明Viod main( ) 主函数主函数 声明部分声明部分 函数体函数体 执行部分执行部分 ch
2、ar fun1( ) 功能函数功能函数1 声明部分声明部分 函数体函数体 执行部分执行部分 float fun2( ) 功能函数功能函数2 函数体函数体特点:特点:nC语言是函数式语言,函数是程序语言是函数式语言,函数是程序基本组成基本组成nC程序必须程序必须,且只有一个且只有一个mainn不论位置,程序总从主程序开始不论位置,程序总从主程序开始n所有变量必须先定义(规定数据类所有变量必须先定义(规定数据类型),再使用型),再使用n每个语句必须用分号每个语句必须用分号“;”结束结束a)使用库函数,必须使用使用库函数,必须使用“文件包含文件包含”、函数定义、函数定义函数返回值类型函数返回值类型
3、函数名(形式参数)函数名(形式参数)形式参数说明形式参数说明局部变量说明局部变量说明函数体语句函数体语句一、标准一、标准C语言语言1、keil C 和和 ANSI C 的异同的异同2、变量定义格式、变量定义格式3、单片机特有的数据类型、单片机特有的数据类型一、一、C51变量定义格式变量定义格式1、keil C 和和 ANSI C 的异同的异同 C51主要针对51系列单片机的结构进行程序设计2、变量定义格式、变量定义格式C语言语言: 存储属性 数据类型 变量名表 (普林斯顿型存储结构) C51: 存储属性 数据类型 存储类型存储类型 变量名表(哈佛型存储结构) 例: static unsigne
4、d char data x1)存储)存储属性属性指定变量存放区域的属性。(确定生命周期)指定变量存放区域的属性。(确定生命周期)l 内部变量 (auto) 堆栈中。仅在函数调用时存在,退出消失(默认值) (static) 固定地址。始终存在,函数体内可访问。 (register) 直接使用硬件寄存器,效率高l 外部变量 (global) 固定地址,始终存在,并可访问(默认值) (extern) (static) 固定地址。始终存在,若为多文件程序,仅在 所定义的模块文件可访问一、一、C51变量定义格式变量定义格式C51: 存储属性 数据类型 存储类型存储类型 变量名表2)存储类型)存储类型确定
5、变量存储区确定变量存储区l 显式声明显式声明 unsigned char data xl 默认存储类型默认存储类型一、一、C51变量定义格式变量定义格式C51: 存储属性 数据类型 存储类型存储类型 变量名表2)存储类型)存储类型确定变量存储区确定变量存储区l 显式声明:显式声明: auto unsigned char data x; unsigned char data x; unsigned char x;l 默认存储类型:由默认存储类型:由Cx51编译器存储模式决定编译器存储模式决定 SMALL模式:默认存储类型为模式:默认存储类型为 data. 快速、高效快速、高效 COMPACT模式
6、:默认存储类型为模式:默认存储类型为 pdata. 片外片外RAM256B,通过,通过R0/R1间接寻址。间接寻址。 LARGE模式:默认存储类型为模式:默认存储类型为 xdata. 空间空间64KB,通过数据指针,通过数据指针DPTR间接寻址。间接寻址。一、一、C51变量定义格式变量定义格式C51: 存储属性 数据类型 存储类型存储类型 变量名表3)数据类型)数据类型确定存储单元长度确定存储单元长度一、一、C51变量定义格式变量定义格式单片机特有的数据类型:单片机特有的数据类型:bit位变量,值为位变量,值为0或或1sbit声明可位寻址空间的一个位声明可位寻址空间的一个位sfr特殊功能寄存器
7、,特殊功能寄存器,8位位sfr16特殊功能寄存器,特殊功能寄存器,16位位C语言已有基本数据类型:语言已有基本数据类型:Char: 单字节,可以存放一个字符。单字节,可以存放一个字符。Int: 整数,对大多数单片机开发软件而言是双字节大小整数,对大多数单片机开发软件而言是双字节大小float: 单精度浮点数。单精度浮点数。double:双精度浮点数。:双精度浮点数。Signed、unsigned限定:限定:char、int类型类型Short、long限定:限定:int类型类型C51: 存储属性 数据类型 存储类型存储类型 变量名表3)数据类型)数据类型确定存储单元长度确定存储单元长度一、一、C
8、51变量定义格式变量定义格式3、单片机特殊功能寄存器的、单片机特殊功能寄存器的C51定义定义(1)sfr:声明字节寻址的特殊功能寄存器。:声明字节寻址的特殊功能寄存器。 例如:例如:sfr P0 = 0 x80;(2)sfr16:该关键字对于一些:该关键字对于一些8051派生系列单片机,派生系列单片机, 可以声明其内两个连续地址的特殊功能寄存器(可以声明其内两个连续地址的特殊功能寄存器(SFR)。)。 例如:例如: sfr16 T2 = 0 xCC;(3)sbit:声明可位寻址的特殊功能寄存器标志位。:声明可位寻址的特殊功能寄存器标志位。 “=”号后将绝对地址赋给变量名,声明形式有以下号后将绝
9、对地址赋给变量名,声明形式有以下3种:种: 用已声明的用已声明的sfr寄存器名寄存器名 指定位;指定位;例如:例如: sbit KEY_UP = P0 1;/ 指定指定P0的第的第1位连接位连接UP按键。按键。 用寄存器地址用寄存器地址 指定位;指定位; 例如:例如: sbit KEY_UP=0 x801; 直接用直接用寄存器标志位地址寄存器标志位地址 。 例如:例如: sbit KEY_UP=0 x81;一、一、C51变量定义格式变量定义格式3、单片机特殊功能寄存器的、单片机特殊功能寄存器的C51定义定义(4) 8051并行接口及位变量的并行接口及位变量的C51定义定义REG51.h和和RE
10、G52.h这两个头文件这两个头文件 sfr P0 = 0 x80;sfr P1 = 0 x90;sfr P2 = 0 xA0;sfr P3 = 0 xB0;AT89X51.H头文件头文件 sbit P0_0 = 0 x80;sbit P0_1 = 0 x81;sbit P0_2 = 0 x82;sfr SEGDATA = P0;/* 数码管数据端口数码管数据端口 */sbit SEL0 = P1 0;/* 数码管数码管0片选端口片选端口 */sbit SEL1 = P1 1;/* 数码管数码管1片选端口片选端口 */sbit KEY_SET = P1 7;/* 设置按键设置按键 */l 程序头
11、包含定义程序头包含定义SFR的头文件后,可直接使用的头文件后,可直接使用 l 为提高程序可读性,可重定义为提高程序可读性,可重定义 一、一、C51变量定义格式变量定义格式1、算术运算符:、算术运算符: * / %2、自增减运算符:、自增减运算符: + - - 例:若例:若 int x=3, y;求;求 y=x+ - 1,y=+x-1,y=x-+1后的后的(x,y) 结果:(结果:(4,2) (4,3) (2,4)3、复合赋值运算符:、复合赋值运算符: += -= *= /= %= 4、关系运算、关系运算 = = = !=5、逻辑运算符:、逻辑运算符:& , | , !6、位操作:、位操
12、作:&(与与),|(或或),(异或异或) ,(取反取反), (位右移位右移)例:例:char c=c | 0 x0f; 置位置位 c=c & 0 x0f; 清零清零 b=a2;a左移左移2位并赋值给位并赋值给b二、二、C51运算符、表达式及规则运算符、表达式及规则先计算先计算再自再自+先自先自+再计算再计算 7、条件运算符、条件运算符 ?: if 为真,则返回表达式为真,则返回表达式2的值;的值; 为假,则返回表达式为假,则返回表达式3的值的值 例:例:a=(b0) ? b : -b;if b0,then a=b ;if b=0,a=-b8、指针和地址运算符、指针和地址运算符
13、二、二、C51运算符、表达式及规则运算符、表达式及规则8、指针和地址运算符、指针和地址运算符 指针数据类型是一种存放指向另一个数据的地址的变量类型。指针数据类型是一种存放指向另一个数据的地址的变量类型。 变量变量 = * 指针变量指针变量 (将指针变量所指向的目标变量的值赋给等号左边的变量)(将指针变量所指向的目标变量的值赋给等号左边的变量)指针变量指针变量 = & 目标变量目标变量 (将目标变量的地址赋给等号左边的变量)(将目标变量的地址赋给等号左边的变量)二、二、C51运算符、表达式及规则运算符、表达式及规则unsigned char data A _at_ 0 x28; / 变量
14、变量A存放在地址存放在地址0 x28unsigned char data B _at_ 0 x29; / 变量变量B存放在地址存放在地址0 x29unsigned char data *P _at_ 0 x2A;/ 指针变量指针变量P存放在地址存放在地址0 x2A;/关键字关键字_at_ 用于指定变量存放的绝对地址用于指定变量存放的绝对地址A = 10; / 变量变量A初值为初值为10B = 20; / 变量变量B初值为初值为20P = &B;/ 指针指针P现在指向变量现在指向变量B*P = 100; / 指针指针P所指变量(变量所指变量(变量B)存放内容更改为)存放内容更改为100P
15、 = &A;/ 指针指针P现在指向变量现在指向变量AB = *P; / 变量变量B的值现在更改为的值现在更改为10二、二、C51运算符、表达式及规则运算符、表达式及规则8、指针和地址运算符、指针和地址运算符 (举例)102029hABP28h29h2ah10028 h10二、二、keil-C51语言语言9、运算符优先级和结合性、运算符优先级和结合性9、运算符优先级和结合性、运算符优先级和结合性 单目运算符高于双目运算符 算术运算符高于关系运算符 关系运算符高于逻辑运算符* 尽可能加括号明确指定操作优先级尽可能加括号明确指定操作优先级二、二、C51运算符、表达式及规则运算符、表达式及规则
16、三、三、C51流程控制语句语言流程控制语句语言一、一、C51程序的基本结构及其流程图程序的基本结构及其流程图 三种基本结构:顺序结构、选择结构和循环结构三种基本结构:顺序结构、选择结构和循环结构顺序结构顺序结构选择结构及其流程图选择结构及其流程图(1)串行多分支结构流程图)串行多分支结构流程图(2)并行多分支结构)并行多分支结构三、三、C51流程控制语句语言流程控制语句语言一、一、C51程序的基本结构及其流程图程序的基本结构及其流程图 三种基本结构:顺序结构、选择结构和循环结构三种基本结构:顺序结构、选择结构和循环结构顺序结构顺序结构选择结构及其流程图选择结构及其流程图1.循环结构及其流程图循
17、环结构及其流程图(1)while型循环结构型循环结构 (当量型)(当量型)(2)do while型循环结构型循环结构 (直到型)(直到型)二、选择语句二、选择语句 选择语句有三种:选择语句有三种:if语句、语句、switch/case语句和条件表达式语句和条件表达式lIf 语句语句 三种形式:三种形式:1、 if (表达式)表达式) 语句语句1;/if 表达式表达式true,执行,执行语句语句1 2、 if (表达式)表达式) 语句语句1; else 语句语句2; 3、 if(表达式表达式1) 语句语句1;/级联选择级联选择 else if (表达式表达式2) 语句语句2; else if (
18、表达式表达式3) 语句语句3; else 语句语句 n+1; /所有表达式均不满足时所有表达式均不满足时三、三、C51流程控制语句语言流程控制语句语言三、三、C51流程控制语句语言流程控制语句语言n#include /*abs()函数原型包含在该库中*/nint y;nint ynumber (int x)nn if(x=0) y=100;n else if (x0) y=x+2;n else y=abs(x);n return (y);n【例】例】 根据根据X值,求出值,求出Y值。值。 X+2X0 Y =100X=0 X X0二、选择语句二、选择语句 选择语句有三种:选择语句有三种:if语句
19、、语句、switch/case语句和条件表达式语句和条件表达式lSwitch/case 语句语句 switch ( x ) case c1: 语句组语句组1;break;/if x=c1,执行语句组执行语句组1后退后退出出 case c2: 语句组语句组2; break; default: 语句组语句组 n+1; break;l条件表达式条件表达式 ?:三、三、C51流程控制语句语言流程控制语句语言二、循环语句二、循环语句 循环语句有三种:循环语句有三种:for语句、语句、while语句和语句和do-while语句语句lfor 语句语句一般形式:一般形式: for (初始化;条件表达式;表达式
20、初始化;条件表达式;表达式3) 循环语句(组);循环语句(组);/循环体循环体 用于构成当型循环:先判断后执行,条件为真继续循环,假结束用于构成当型循环:先判断后执行,条件为真继续循环,假结束 for()中初始化及表达式可缺省,但两个分号()中初始化及表达式可缺省,但两个分号“;”不可缺不可缺 例:求i=1+2+3+99+100 (i=0100) main () unsignde int data i, sum=0 for (i=1; i=100; i+) sum=sum+i; /循环100次 三、三、C51流程控制语句语言流程控制语句语言二、循环语句二、循环语句 循环语句有三种:循环语句有三
21、种:for语句、语句、while语句和语句和do-while语句语句lwhile 循环语句循环语句一般形式:一般形式: while (条件表达式)条件表达式) 循环语句(组);循环语句(组);/循环体循环体 用于构成当型循环:先判断后执行,条件为真继续循环,假结束用于构成当型循环:先判断后执行,条件为真继续循环,假结束ldo-while 循环语句循环语句一般形式:一般形式: do 循环语句(组);循环语句(组);/循环体循环体 while (条件表达式);条件表达式); 用于构成直到型循环:先执行循环体,再判断条件为真继续循环,假结束用于构成直到型循环:先执行循环体,再判断条件为真继续循环,假
22、结束三、三、C51流程控制语句语言流程控制语句语言main ( ) unsignde int data i, sum; i=sum=0; while ( i+100) sum+ = i; main ( ) int a i, sum; i=1; sum=0; do sum+ = i ; while ( i+100) ; 四、四、C51构造数据类型构造数据类型1 数组数组2 指针指针3 结构体结构体4 共用体共用体5 枚举枚举1、数组、数组l一维数组和多维数组 unsignde char data a5; unsignde char data b23;l数组的初始化 segconbitcon例:在
23、例:在LED中循环显示中循环显示09。#include sfr segcon=P1; sbit bitcon = P20; void main() unsigned char code led10= 0 xc0, 0 xf9, 0 xa4, 0 xb0, 0 x99, 0 x92, 0 x82 , 0 xf8,0 x80, 0 x90; unsigned int x; /*x=09*/ while(1) for(x=0; x=9;x+) segcon=ledx; bitcon=1; /* 共阳共阳LED*/ delay(2); 四、四、C51构造数据类型构造数据类型五、函数五、函数includ
24、e / 预处理命令预处理命令longfun1( );/ 函数说明函数说明floatfun2( );int x,y;/ 全局变量说明,作用域为整个源程序全局变量说明,作用域为整个源程序float z;func1( )/ 功能函数功能函数1 局部变量说明局部变量说明; /作用域限于函数体内作用域限于函数体内 函数体函数体; Main( )/主函数主函数 局部变量局部变量说明说明; /主程序内部定义的变量也为局部变量主程序内部定义的变量也为局部变量 主函数体主函数体; func2( )/功能函数功能函数2 局部变量说明局部变量说明; 函数体函数体; 一、一、C语言程序的一般组成结构语言程序的一般组成
25、结构五、函数五、函数一、一、C语言程序的一般组成结构语言程序的一般组成结构函数定义函数定义函数返回值类型函数返回值类型 函数名(形式参数)函数名(形式参数)/形参作用域限于调用期间形参作用域限于调用期间形式参数说明形式参数说明局部变量说明局部变量说明函数体语句函数体语句五、函数五、函数二、二、C51中断服务程序中断服务程序1.中断服务函数的定义中断服务函数的定义 返回值类型标识符返回值类型标识符 函数名函数名( ) interrupt 中断号中断号 using 寄存器组号寄存器组号 函数体语句函数体语句; 中断函数不能进行参数传递;中断函数不能进行参数传递; 中断函数没有返回值;建议定义为中断
26、函数没有返回值;建议定义为void类型类型 在任何情况下都不能直接调用中断函数,否则会产生编译错误。在任何情况下都不能直接调用中断函数,否则会产生编译错误。 C51编译器对中断函数自动的现场保护和恢复。编译器对中断函数自动的现场保护和恢复。(ACC、B、DPH/L、PSW) using 修饰符,修饰符,用于指定中断函数内部使用的工作寄存器组取值为用于指定中断函数内部使用的工作寄存器组取值为03 interrupt修饰符,指明函数为中断函数。修饰符,指明函数为中断函数。MCS51对应的中断号为对应的中断号为05。 该向量包含一个到中断函数入口地址的绝对跳转。该向量包含一个到中断函数入口地址的绝对
27、跳转。void int1( ) interrupt 2 using 1 count +; / count为全局变量为全局变量例:统计外中断例:统计外中断1的中断次数的中断服务程序的中断次数的中断服务程序 五、函数五、函数三、三、局部变量和全局变量局部变量和全局变量 按作用域范围可分为两种:即局部变量和全局变量。按作用域范围可分为两种:即局部变量和全局变量。1.局部变量局部变量 局部变量也称为内部变量。作用域仅限与函数内局部变量也称为内部变量。作用域仅限与函数内 。局部变量是在函数内作定义说明的。局部变量是在函数内作定义说明的。 int f1(int a) /a为形参,为形参, 函数调用期间有效
28、函数调用期间有效 int b,c; /b,c局部变量局部变量 main() int m, n; /m,n局部变量局部变量,作用域限于,作用域限于main函数内函数内 五、函数五、函数三、三、局部变量和全局变量局部变量和全局变量 按作用域范围可分为两种:即局部变量和全局变量。按作用域范围可分为两种:即局部变量和全局变量。2.全局变量全局变量全局变量也称为外部变量,函数外部定义的变量。全局变量也称为外部变量,函数外部定义的变量。其作用域是整个源程序。其作用域是整个源程序。 并遵循先定义后使用的原则并遵循先定义后使用的原则int a, b;/ 外部变量外部变量,作用域整个程序作用域整个程序void
29、f1( )/ 函数函数f1 float x, y;/ 外部变量,作用域外部变量,作用域f2之后。若之后。若f1对对x,y说明说明,则可用则可用int f2( )/ 函数函数f2 main()/ 主函数主函数 五、函数五、函数举例:输入正方体的长宽高举例:输入正方体的长宽高l,w,h。 求体积及三个面求体积及三个面x*y,x*z,y*z的面积。的面积。 int s1, s2, s3;int vs( int a,int b,int c) int v; v = a * b * c; s1 = a * b; s2 = b * c; s3 = a * c; return v;main() int v,
30、l, w, h; printf(ninput length,width and heightn); scanf(%d%d%d,&l,&w,&h); v = vs(l, w, h);printf(nv=%d,s1=%d,s2=%d,s3=%dn,v,s1,s2,s3);六、六、C51库函数库函数 1、一般、一般I/O函数函数stdio.h 六、六、C51库函数库函数 2、字符函数库、字符函数库string.h 六、六、C51库函数库函数 3、 标准函数库标准函数库stdlib.h及其它头文件及其它头文件(1)标准函数库()标准函数库(STDLIB.H)头文件中包含类型转换
31、和)头文件中包含类型转换和 存储器分配函数的原型和定义,如下所列:存储器分配函数的原型和定义,如下所列: atof atoi atolcalloc init_ mempool mallocrand realloc strtod strtol strtoulfreerand (2)数学函数库()数学函数库(math.h)头文件中包含所有浮点运算函数)头文件中包含所有浮点运算函数 的定义和原型,其它的数学运算函数也包含在该文件中,的定义和原型,其它的数学运算函数也包含在该文件中, 所有的数学运算函数如下:所有的数学运算函数如下: absacosasinstanstan2 cabscoscoshex
32、pfabsfloorfmod fprestore fpsaavelabsloglog10 modf powsinsinhsqrttantanh六、六、C51库函数库函数 3、 标准函数库标准函数库stdlib.h及其它头文件及其它头文件(3)绝对地址访问()绝对地址访问(absacc.h)头文件中包含的宏定义允许)头文件中包含的宏定义允许 用户直接访问用户直接访问8051单片机的不同存储区,所有的宏定义单片机的不同存储区,所有的宏定义 如下:如下: CBYTE CWORD DBYTE DWORD FARRAYFCARRAY FCVAR FVAR PBYTEPWORDXBYTE XWORD(4)
33、内部函数库()内部函数库(intrins.h)包含有诸如)包含有诸如_nop_一类的单片一类的单片 机内部操作函数:机内部操作函数: _chkfloat_crol_ _cror_irol_ _iror_lrol_ _lror_nop_ _testbit_六、六、C51库函数库函数 3、 标准函数库标准函数库stdlib.h及其它头文件及其它头文件(5)访问)访问SFR和和SFR_bit地址头文件(地址头文件(reg.h) C51库提供了一些头文件库提供了一些头文件reg.h,在在8051系列单片机中,这些头文件用来定义一些指向系列单片机中,这些头文件用来定义一些指向特殊功能寄存器常量。这些文件
34、列表如下:特殊功能寄存器常量。这些文件列表如下:reg151s.h reg152.h reg320.h reg410.h reg451.hreg452.h reg509.h reg51.h reg515.h reg515a.hreg515c.h reg517.h reg517a.h reg51f.h reg51g.hreg51gb.h reg52.h reg552.h reg592.h reg781.h七、七、C51模块化程序设计模块化程序设计一、基本概念一、基本概念 程序的组成程序的组成 程序有数据说明和数据操作两部分组成。程序有数据说明和数据操作两部分组成。 从结构化角度看,程序应由模块化
35、函数组成。从结构化角度看,程序应由模块化函数组成。七、七、C51模块化程序设计模块化程序设计一、基本概念一、基本概念 2. 常用名词常用名词(1)文件)文件C51文件扩展名如下:文件扩展名如下:.ASM或或.A51 汇编语言源文件汇编语言源文件.C或或.C51 C51语言源文件语言源文件.H 编译时源文件中的头文件编译时源文件中的头文件.LST 汇编汇编/编译的程序和错误列表文件编译的程序和错误列表文件.ERR 错误报告文件错误报告文件.OBJ 可重定位的目标模块文件可重定位的目标模块文件.LIB 库文件库文件.LNK 连接连接/定位器使用的文件定位器使用的文件.MAP或或.MAP 连接连接/
36、定位后产生的映像文件定位后产生的映像文件.HEX 连接连接/定位后产生的目标文件定位后产生的目标文件七、七、C51模块化程序设计模块化程序设计一、基本概念一、基本概念 2. 常用名词常用名词(2)源程序文件)源程序文件源程序文件是由用户编制的由一个或多个函数组成的源程序文件是由用户编制的由一个或多个函数组成的完成特定功能的程序代码。完成特定功能的程序代码。 (3)目标文件)目标文件 目标文件是单片机可执行的程序文件,它包含着用户目标文件是单片机可执行的程序文件,它包含着用户开发的运行在单片机上的机器代码。开发的运行在单片机上的机器代码。(4)汇编器)汇编器/编译器编译器 汇编器是针对汇编语言程
37、序的,而编译器是针对高级语言汇编器是针对汇编语言程序的,而编译器是针对高级语言(如(如C语言)程序的。它们被用来将源程序翻译成单片机语言)程序的。它们被用来将源程序翻译成单片机可执行的目标代码,从而产生一个目标文件。可执行的目标代码,从而产生一个目标文件。 七、七、C51模块化程序设计模块化程序设计一、基本概念一、基本概念 2. 常用名词常用名词(5)段)段段与数据或者程序存储器有关,即程序段和数据段。段与数据或者程序存储器有关,即程序段和数据段。一个段有段名、类型以及属性,它们在存储器中的位置由一个段有段名、类型以及属性,它们在存储器中的位置由用户指定或者由连接器用户指定或者由连接器/定位器
38、确定。定位器确定。(6)模块)模块模块是包含一个或多个段的文件。一个模块通常为显示、模块是包含一个或多个段的文件。一个模块通常为显示、计算或与下层接口有关的函数或子程序,能够单独完成计算或与下层接口有关的函数或子程序,能够单独完成一定的功能。一定的功能。 (7)库)库库是包含一个或者多个模块的文件。库中的这些模块通常库是包含一个或者多个模块的文件。库中的这些模块通常是由编译或者汇编得到的可重定位的目标模块。是由编译或者汇编得到的可重定位的目标模块。连接器仅从库中选取与其他模块相关的模块进行连接。连接器仅从库中选取与其他模块相关的模块进行连接。 七、七、C51模块化程序设计模块化程序设计一、基本
39、概念一、基本概念 2. 常用名词常用名词(8)连接)连接/定位器定位器连接器将一个程序的多个源文件产生的各个目标文件按照连接器将一个程序的多个源文件产生的各个目标文件按照一定规则与用户自定义库文件和标准库文件连接起来。一定规则与用户自定义库文件和标准库文件连接起来。定位器将地址分配给程序中的各个段。经过连接、定位后,定位器将地址分配给程序中的各个段。经过连接、定位后,生成绝对目标文件(单片机可执行的文件)和映像文件生成绝对目标文件(单片机可执行的文件)和映像文件(提供给程序员的最终个空间映像表)。(提供给程序员的最终个空间映像表)。(9)应用程序)应用程序应用程序是整个开发过程的最终结果,并最
40、终在单片机应用程序是整个开发过程的最终结果,并最终在单片机用户系统中运行,完成设计功能。用户系统中运行,完成设计功能。 七、七、C51模块化程序设计模块化程序设计二、二、 模块化程序开发过程模块化程序开发过程项目规划项目规划汇编源文件汇编源文件汇编汇编Ax51C源文件源文件编译编译Cx51库文件库文件链接链接/定位定位目标文件目标文件固化到单片机固化到单片机/或下载或下载调试通过调试通过项目完成项目完成修改修改N七、七、C51模块化程序设计模块化程序设计二、二、 模块化程序开发过程模块化程序开发过程 每一个每一个C源文件都建立一个与之名字一样的源文件都建立一个与之名字一样的H文件文件 (头文件
41、),其中仅包括该(头文件),其中仅包括该C文件中的函数的声明。文件中的函数的声明。 建立一个所有的文件都要共同使用的头文件(文件名可取建立一个所有的文件都要共同使用的头文件(文件名可取 为为common.h),该头文件可以包含单片机管脚使用的定义,),该头文件可以包含单片机管脚使用的定义, 还有那些必需的编译器系统头文件还有那些必需的编译器系统头文件 (如(如reg52.h,absacc.h等等)。等等)。 每个每个C源文件应该包含自己的头文件以及源文件应该包含自己的头文件以及common.h, C文件内可以定义该文件内部使用的全局变量,如果在其他文件内可以定义该文件内部使用的全局变量,如果在
42、其他 文件中还要访问这个全局变量,可以在其头文件中以文件中还要访问这个全局变量,可以在其头文件中以extern 再次定义该全局变量。再次定义该全局变量。七、七、C51模块化程序设计模块化程序设计二、二、 模块化程序开发过程模块化程序开发过程 主文件主文件main.c里面包含所有里面包含所有C源文件对应的头文件和源文件对应的头文件和 common.h,main.c中的函数可以再建一个头文件中的函数可以再建一个头文件main.h声明,声明, 也可以直接放在也可以直接放在main.c文件的开头部分声明,中断服务程序文件的开头部分声明,中断服务程序 一般也放在一般也放在main.c文件中。文件中。 对
43、于那些贯穿整个工程的变量,可以先在对于那些贯穿整个工程的变量,可以先在main.c文件中定义,文件中定义, 然后在然后在common.h文件中用文件中用extern关键字再次声明一遍,哪个关键字再次声明一遍,哪个 文件要使用就只需包含文件要使用就只需包含common.h文件即可。文件即可。 建立工程的时候,只要把建立工程的时候,只要把C源文件加到工程中,把源文件加到工程中,把H文件直接文件直接 放到相应的工程目录下,不需要加到工程里面。放到相应的工程目录下,不需要加到工程里面。n例1:延时程序 void delay(unsigned int x)unsigned char j;while (x
44、-)for(j=0;j125;j+) /*fosc=12MHz,T=1us*/;八、八、keil-C51应用实例应用实例#include /*abs()函数原型包含在该库中*/int y;int ynumber (int x) if(x=0) y=100; else if (x0) y=x+2; else y=abs(x); return (y);【例例2】 根据根据X值,求出值,求出Y值。值。 X+2X0 Y =100X=0 X X0八、八、keil-C51应用实例应用实例第第10章章 Keil C51软件使用简介软件使用简介n软件开发流程软件开发流程n创建一个项目创建一个项目n从器件数据库
45、中选择目标器件,并配置工具软件的设置从器件数据库中选择目标器件,并配置工具软件的设置n用用C或汇编创建源程序或汇编创建源程序n编译程序,生成编译程序,生成HEX可执行程序可执行程序n调试程序,纠正源文件中的错误调试程序,纠正源文件中的错误n固化程序固化程序n软件设置软件设置Target对话框选项对话框选项Vision3集成开发环境集成开发环境【例3】设MCS-51单片机系统时钟频率fosc为6MHz,请编出利用定时/计数器T0在P1.0引脚上产生周期为2s,占空比为20%的方波信号的程序C程序:程序:#include #define uchar unsigned charuchar time;
46、uchar period=20;uchar high=4; sbit p1_0=P10;void timer0() interrupt 1 using 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; if (+ time=high) p1_0=0; if (time=period) time=0; p1_0=1;main() TMOD=0 x01; /*T0,方式方式1*/ TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; time=0; while(1) ; 中断
47、定时程序设计:中断定时程序设计:2S中断服务程序中断服务程序t=正脉宽正脉宽初值重载,初值重载,+t返回返回YNP1.0=0t=周期周期P1.0=1解:取定时值解:取定时值100ms 则需定时器计数次数则需定时器计数次数=100*103*6/12=50000C显示程序:显示程序:#define uchar unsigned char#define PA XBYTE 0 x0000 /定义定义A口口 #define PC XBYTE 0 x0002 /定义定义C口口 uchar data dispbuff4; /显示缓存显示缓存 uchar code ledtab10=0 x3f, 0 x06,
48、 0 x5b, 0 x4f, 0 x 66,0 x6d, 0 x7d, 0 x07H, 0 x7f, 0 x6f; /定义定义LED字形码字形码void display ( ) uchar i, x; uchar disnum=4; /显示位数显示位数 uchar bitcom=0 x10; /显示位控码显示位控码 for ( i=0; idisnum; i+) x=disbuffi; /取显示数据取显示数据 PA = ledtabx; /取字形码送取字形码送PA口口 PC = bitcom; /取位控码送取位控码送PC口口 bitcom=bitcom1; /位控码左移位控码左移1位位 del
49、ay(2); 显示程序显示程序初始化初始化结束结束取显示数据取显示数据取位控码送取位控码送B口口4位显示完位显示完YN例例4LED动态显示方式动态显示方式用用8255A8255A控制键盘及控制键盘及4 4位位LEDLED,实现动态显示,实现动态显示n5DAC的应用,C语言程序设计n 设计锯齿波发生器。幅值-5V 0,频率500Hz,fosc=12MHzn分析:1)设计单缓冲控制电路n2)利用阶梯波近似实现n3)T=1/500=0.002s=2msn设:阶梯数=256,增幅=28/256n则:阶梯步距(延时)=2ms/256= 7. 8 = 8us,故阶梯数=2000/8=250Voutt2ms
50、锯齿波发生器锯齿波发生器C程序设计程序设计#include #include #define DA0832 XBYTE0 xfffe /DAC地址地址#define uchar unsigned charvoid stair(void) uchar i; while (1) for(i=0; i=250; i+) /形成锯齿波输出值形成锯齿波输出值 DA0832=i; /D/A转换输出转换输出 _nop_; /空操作空操作 n6DAC的应用nDAC双缓冲方式应用同步波形输出同时输出X和Y波形到示波器 C程序设计:程序设计:#include #include #define INPUTR1 XBYTE0 xfffd /定义定义#define INPUTR2 XBYTE0 xfffe /端口端口#define DACR XBYTE0 xffff#define uchar unsigned ucharvoid dac2b (data1,data2)uchar data1,data2; INPUTR1=data1; /送数据到送数据到1#0832 INPUTR2=data2; /送数据到送数据到2#0832 DACR=0; /启动两路启动两路DAC转换转换
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮外送劳务合同范本
- 餐饮店老板合同协议书
- 饭店酒水供应合同范本
- 电动系统技术培训计划方案
- 签了绩效协议没签合同
- 粮储采购小麦合同范本
- 经销商饲料厂合同范本
- 绿化与污水合同协议书
- 聘用部门经理合同范本
- 能否解除贷款合同协议
- 2026湖南省气象部门招聘应届毕业生59人(第2601号)笔试考试参考试题及答案解析
- 垃圾填埋场施工流程方案
- 2025年实验室检验质控知识考试试题及答案解析
- 2025年宿州市纪委市委巡察办所属事业单位选调工作人员8人考试参考试题及答案解析
- 专业分包合同审批表
- 中国新型显示产业发展现状与趋势洞察
- 第五讲佛教在中国的传播及流变课件
- 毕业论文-基于单片机的智能防盗系统的设计与实现
- 南头竣工报告1验收报告
- 宝沃bx5说明书电子版
- GB4789.2-2022食品安全国家标准 食品微生物学检验 菌落总数测定
评论
0/150
提交评论