第1章 单片机的C语言编程_2015_第1页
第1章 单片机的C语言编程_2015_第2页
第1章 单片机的C语言编程_2015_第3页
第1章 单片机的C语言编程_2015_第4页
第1章 单片机的C语言编程_2015_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机及接口技术单片机及接口技术DMU.DMU.1-1单片机及接口技术信息科学技术学院信息科学技术学院 颜德文颜德文办公室:信息楼办公室:信息楼B 202-1电电 话:话: 84723800 1319010792635单片机及接口技术单片机及接口技术DMU.DMU.1-2 讲授的内容及简介讲授的内容及简介单片机原理、接口及应用单片机原理、接口及应用教材结构教材结构第二部分基础篇第一部分预备篇第三部分接口篇第10章单片机的C语言编程第6章单片机总线与存储器的扩展第8章单片机外围接口技术第7章单片机系统功能扩展第9章串行接口技术第四部分应用篇单片机及接口技术单片机及接口技术DMU.DMU.1-3本

2、课程的任务 在微机原理(单片机)的基础上,讲述单片机接口的设计在微机原理(单片机)的基础上,讲述单片机接口的设计与开发技术与开发技术 本课程属专业基础课程本课程属专业基础课程 36学时学时 上课上课18学时学时 测验测验 2学时学时 实验实验16学时(学时(4个课堂实验个课堂实验8学时、学时、2个综合实验个综合实验8学时)学时) 加强实际编程和设计,着重实践能力培养。加强实际编程和设计,着重实践能力培养。 先修课程:先修课程:单片机原理、单片机原理、C C语言程序设计语言程序设计单片机及接口技术单片机及接口技术DMU.DMU.1-4 成绩考核成绩考核实验、平时实验、平时 计计40分分测验(考试

3、)测验(考试) 计计60分分 单片机及接口技术单片机及接口技术DMU.DMU.1-5 概述概述1.1 C511.1 C51程序结构程序结构1.2 C511.2 C51的数据类型的数据类型1.3 1.3 数据的存储类型和存储模式数据的存储类型和存储模式1.4 SFR 1.4 SFR 、位寻址和绝对地址访问、位寻址和绝对地址访问1.5 C511.5 C51的运算符的运算符 1.6 1.6 函数函数 1.7 C1.7 C语言编程实例语言编程实例1.8 C511.8 C51中断的设计中断的设计 1.9 1.9 小结小结单片机及接口技术单片机及接口技术DMU.DMU.1-6 采用采用C51C51编程的优

4、点编程的优点 C51- C51-针对针对5151系列单片机的系列单片机的C C语言语言单片机及接口技术单片机及接口技术DMU.DMU.1-7产生产生* *.obj .obj * *.LST .LST 文件文件产生产生* *.bin .bin 和和 * *.HEX .HEX 文件文件(OH51)(OH51) C51 C51开发过程开发过程集成开发环境集成开发环境IDEIDE(keil keil VisionVision)一键完成一键完成机器指令码、目标代码、固件机器指令码、目标代码、固件单片机及接口技术单片机及接口技术DMU.DMU.1-8 与标准与标准C C(ANSI CANSI C)相同)相

5、同 C51 C51的程序由许多个函数组成,其中必须有一个主函数的程序由许多个函数组成,其中必须有一个主函数 main()main(); 程序程序从从main()main()函数开始执行函数开始执行,调用其他函数,最后,调用其他函数,最后在主函数在主函数main()main()中结束中结束整个程序。整个程序。1.11.1 C51C51程序结构程序结构单片机及接口技术单片机及接口技术DMU.DMU.1-9funn(funn(形式参数表形式参数表) ) / /* *函数函数n n* */ /形式参数说明形式参数说明 局部变量说明局部变量说明 执行语句执行语句 全局变量说明全局变量说明 / /* *可

6、被各函数引用可被各函数引用* */ / main()main() / /* *主函数主函数* */ / 局部变量说明局部变量说明 / /* *只在本函数引用只在本函数引用* */ /执行语句执行语句( (包括函数调用语句包括函数调用语句) ) fun1 ()fun1 (); / /* *函数函数1 1* */ / funn ()funn (); / /* *函数函数n n* */ / 1.1 C51程序结构fun1(fun1(形式参数表形式参数表) ) / /* *函数函数1 1* */ / 形式参数说明形式参数说明 局部变量说明局部变量说明 执行语句执行语句 单片机及接口技术单片机及接口技术

7、DMU.DMU.1-101 1、每个变量必须、每个变量必须先说明后引用先说明后引用,变量名,变量名英文大小写英文大小写是有差别的。是有差别的。 2 2、 C C语言程序一行可以书写多条语句,但每个语句语言程序一行可以书写多条语句,但每个语句必须以必须以“ “ ;”结尾结尾写。写。 3 3、C C语言的语言的注释用注释用/ /* * */ /表示。表示。 4 4、“”“”花括号必须成对,位置随意,花括号必须成对,位置随意,可在紧挨函数名后,也可在紧挨函数名后,也可另起一行,多个花括号可以同行书写,也可逐行书写;可另起一行,多个花括号可以同行书写,也可逐行书写; 为层次分明,增加可读性为层次分明,

8、增加可读性 同一层的同一层的“”花括号对齐花括号对齐,采用,采用逐层缩进逐层缩进方式书写。方式书写。C C语言的语句规则语言的语句规则单片机及接口技术单片机及接口技术DMU.DMU.1-11 C51 C51的数据的数据-常量和变量常量和变量 常量常量: : 其值不变的量,可以为字符,十进制数或十六进制数其值不变的量,可以为字符,十进制数或十六进制数( (用用0 x0 x表示表示) )。变量变量在程序运行中,其值可以改变的量。在程序运行中,其值可以改变的量。 一个变量由一个变量由变量名和变量值变量名和变量值构成,构成, 变量名变量名是存储是存储单元地址单元地址的符号表示,的符号表示, 变量的值变

9、量的值-是该单元存放的是该单元存放的内容内容。 定义一个变量,编译系统就会自动为它安排一个存定义一个变量,编译系统就会自动为它安排一个存储储单元。单元。 1.2 C511.2 C51的数据类型的数据类型单片机及接口技术单片机及接口技术DMU.DMU.1-12 定义数据类型的意义定义数据类型的意义数据都是存放在存数据都是存放在存储储单元中的,都要单元中的,都要占用占用1 1个或几个存储单个或几个存储单元元( (即数据的长度即数据的长度) ); 数据类型数据类型决定了决定了存存储储单元大小;单元大小; 数据的表示范围。数据的表示范围。1.2 C511.2 C51的数据类型的数据类型单片机及接口技术

10、单片机及接口技术DMU.DMU.1-13数据类型说明数据类型说明1. 1. 字符型字符型( (charchar) ) 整型整型( (intint) ) 长整型长整型( (longlong) ) 2. 2. 当运算符两边为不同类型的数据时当运算符两边为不同类型的数据时,编译器自动将右边的,编译器自动将右边的数据类型转换为左边的数据类型。数据类型转换为左边的数据类型。例:例: unsigned char x=0 x1234; unsigned char x=0 x1234; 结果结果 x=0 x34x=0 x34 如果不是必须,如果不是必须,尽可能选择尽可能选择unsignedunsigned型型

11、,减少符号位的检测,减少符号位的检测,生成的程序代码比生成的程序代码比signedsigned类型短得多,代码执行速度快。类型短得多,代码执行速度快。有符号型有符号型( (signedsigned) ) 无符号无符号 型型( (unsignedunsigned) )单片机及接口技术单片机及接口技术DMU.DMU.1-14数据类型说明数据类型说明3 3、5151单片机单片机内部数据存内部数据存储储器器的可的可寻址位寻址位(20H(20H2FH)2FH)定义为定义为bitbit型,型, 特殊功能寄存器特殊功能寄存器的的可寻址位可寻址位( (即地址为即地址为0X80H0X80H0XF7H0XF7H的

12、的SFRSFR的各位的各位) )只能定义为只能定义为sbitsbit类型。类型。单片机及接口技术单片机及接口技术DMU.DMU.1-15C51C51的数据类型的数据类型单片机及接口技术单片机及接口技术DMU.DMU.1-16一、数据的存储类型一、数据的存储类型1.3 1.3 数据的存储类型和存储模式数据的存储类型和存储模式C51C51定义变量格式:定义变量格式: 存储种类存储种类 数据类型数据类型 存储类型存储类型 变量名;变量名;存储种类:存储种类:可选项,可选项,autoauto、externextern、staticstatic和和register 4register 4种,默认为种,默

13、认为autoauto。存储类型存储类型:把变量:把变量定位定位在在8X518X51的某一的某一存存储储区区中。中。 5151存储器逻辑地址空间存储器逻辑地址空间 片内片内数据存储器数据存储器、片外、片外数据存储器数据存储器、程序、程序存储器存储器 单片机及接口技术单片机及接口技术DMU.DMU.1-171.3 1.3 数据的存储类型和存储模式数据的存储类型和存储模式 片内数据存储器片内数据存储器 低低128字节字节RAM,高端,高端RAM、SFR可字节寻址或位寻址。可字节寻址或位寻址。 低低RAM:寄存器区、位寻址区、字节寻址寄存器区、位寻址区、字节寻址8XX528XX52增强型增强型80H高

14、端 RAMFFH80HSFRFFH地址重合地址重合00H 低端 RAM7FH18H10H08H20H30H3区区2区区1区区0区区寄寄存存器器区区位寻址区位寻址区字节寻址字节寻址字节寻址字节寻址单片机及接口技术单片机及接口技术DMU.DMU.1-181.3 1.3 数据的存储类型和存储模式数据的存储类型和存储模式存存储储类型:五种类型:五种data bdata idatadata bdata idata内部内部RAMRAMcodecode程序区程序区pdata xdatapdata xdata外部外部RAMRAM存储器类型存储器类型描述描述datadata直接寻址的内部数据存储区,访问速度最快

15、(直接寻址的内部数据存储区,访问速度最快(128B128B)bdatabdata可位寻址的内部数据存储区,允许位于字节混合访问可位寻址的内部数据存储区,允许位于字节混合访问(16B(16B)idataidata间接寻址的内部数据存储区,全部内部数据间接寻址的内部数据存储区,全部内部数据RAMRAM(256B256B)pdatapdata分页(分页(256B256B)外部数据存储区,访问操作码)外部数据存储区,访问操作码MOVX RiMOVX Rixdataxdata外部数据存储区(外部数据存储区(64K64K) ,访问操作码,访问操作码MOVX DPTRMOVX DPTRcodecode程序代

16、码存储区(程序代码存储区(64K64K) ,访问操作码,访问操作码MOVC A+DPTRMOVC A+DPTR单片机及接口技术单片机及接口技术DMU.DMU.1-19C51C51变量的存储类型:变量的存储类型:如果用户如果用户不定义变量不定义变量的存的存储储类型,则编译器承认类型,则编译器承认默认存储类型;默认存储类型;默认的存储类型由默认的存储类型由编译控制命令的存储模式编译控制命令的存储模式或或自行分配决定自行分配决定。例如:例如:定义变量定义变量x x语句:语句:char data x;char data x;定义一个定义一个有符号有符号的的字符型字符型变量,存储在变量,存储在128B1

17、28B的的内部数据区内部数据区data char data char x;x;例如:例如:unsigned char xdata y50;unsigned char xdata y50;定义一个定义一个无符号无符号的的字符型字符型变量,存储在变量,存储在外部数据区外部数据区单片机及接口技术单片机及接口技术DMU.DMU.1-20二、存储器模式二、存储器模式C51C51的存储器模式有的存储器模式有SMALLSMALL、 COMPACTCOMPACT 和和 LARGELARGE 。 决定了变量的决定了变量的默认存储器类型默认存储器类型、参数传递区和无明确存储区、参数传递区和无明确存储区类型的说明。

18、类型的说明。存储模式存储模式参数和局部变量存储区域参数和局部变量存储区域SmallSmall可直接寻址的内部存储区(可直接寻址的内部存储区(128B128B,默认存储类,默认存储类型型DATADATA)CompactCompact 分页外部存储区(分页外部存储区(256B256B,默认存储类型,默认存储类型PATAPATA)LargeLarge外部数据存储区(外部数据存储区(64K64K,默认存储类型,默认存储类型XATAXATA)单片机及接口技术单片机及接口技术DMU.DMU.1-21三、三、变量说明举例变量说明举例unsigned long unsigned long xdata xdat

19、a arrayarray100100; / /* *无符号长型数组定位在无符号长型数组定位在片外片外RAMRAM区,每元素占区,每元素占4bytes4bytes* */ / char char code code MSGMSG=PARAMETER:=PARAMETER:;/ /* *字符数组字符数组MSG MSG 定位在定位在程序存储区程序存储区* */ /data data char varchar var;/ /* *字符变量字符变量varvar定位在定位在片内数据存储区片内数据存储区* */ /单片机及接口技术单片机及接口技术DMU.DMU.1-221.3 1.3 数据的存储类型和存储模

20、式数据的存储类型和存储模式char varchar var;char MSGchar MSG=PARAMETER:=PARAMETER:;unsigned long arrayunsigned long array100100;float x,y,zfloat x,y,z;unsigned char vectorunsigned char vector10104 44 4;如果在变量说明时略去存储器类型标志符,如果在变量说明时略去存储器类型标志符,编译器会自动选择编译器会自动选择默认的存储器类型。默认的存储器类型。单片机及接口技术单片机及接口技术DMU.DMU.1-23四、指针型数据1 1、指

21、针型变量、指针型变量 unsigned char unsigned char * *pointpoint; ; &-&-取地址运算符,取地址运算符,* *-取内容运算。取内容运算。例如例如: : 给变量给变量outputoutput赋值赋值20H20H直接赋值直接赋值: output=0 x20output=0 x20;间接赋值间接赋值:pointpoint= =& &output;output; * *point=point=0 x20;0 x20;将将40H40H单元内容送给单元内容送给50H50H单元。单元。MOV 50HMOV 50H,40H40HMOV

22、 R0MOV R0,#40H#40HMOV AMOV A,R0R0MOV 50H,AMOV 50H,A指针指针单片机及接口技术单片机及接口技术DMU.DMU.1-24四、指针型数据unsigned char xdata unsigned char xdata * *p;p;unsigned char iunsigned char i,x10;x10;p=p=(unsigned char xdata (unsigned char xdata * *) )0 x4000;0 x4000;for(i=0;i10;i+)for(i=0;i10;i+) xi= xi=* *p;p; p+; p+; 例例

23、: : 将将4000H4000H为首地址的为首地址的1010个字节的值赋给数组个字节的值赋给数组x10 x10。单片机及接口技术单片机及接口技术DMU.DMU.1-25 2 2、指针型变量举例说明、指针型变量举例说明 long xdata long xdata * *pxpx; int int * *pnpn; / /* *定义一个类型为定义一个类型为intint型指针型指针* */ / char xdata char xdata * *pdpd; / /* *指针指针pdpd指向字符型指向字符型xdataxdata区区* */ / /* *指针指针pxpx指向指向longlong型型xdat

24、axdata区区( (每个数据占四个单元每个数据占四个单元) ) * */ /通用型指针通用型指针自阅自阅单片机及接口技术单片机及接口技术DMU.DMU.1-261.4 SFR 1.4 SFR 、位寻址和绝对地址访问、位寻址和绝对地址访问1 1、特殊功能寄存器、特殊功能寄存器SFRSFR的定义的定义C51C51提供了一种自主形式的定义方式,使用特定关键字提供了一种自主形式的定义方式,使用特定关键字sfr sfr 如:如: sfr SCON=0 x98sfr SCON=0 x98; / /* *串行通信控制寄存器地址串行通信控制寄存器地址98H98H* */ / sfr TMOD=0 x89 s

25、fr TMOD=0 x89; / /* *定时器模式控制寄存器地址定时器模式控制寄存器地址89H89H* */ / sfr ACC=0 xe0 sfr ACC=0 xe0; / /* *A A累加器地址累加器地址E0HE0H* */ / sfr P1=0 x90sfr P1=0 x90; / /* *P1P1端口地址端口地址90H90H* */ / 定义了以后,程序中就可以直接引用寄存器名。定义了以后,程序中就可以直接引用寄存器名。例:例: TMOD=0 x01; /T0TMOD=0 x01; /T0,方式,方式1 1 定时定时单片机及接口技术单片机及接口技术DMU.DMU.1-271.4 S

26、FR 1.4 SFR 、位寻址和绝对地址访问、位寻址和绝对地址访问 只要用包含语句只要用包含语句#include #include ,就可以,就可以直接引用直接引用特殊特殊功能寄存器名,或直接引用位名称;功能寄存器名,或直接引用位名称; C51 C51建立了一个建立了一个头文件头文件r re eg5g51 1.h.h ( (增强型为增强型为reg52.h)reg52.h), 文件中对所有的特殊功能寄存器进行了文件中对所有的特殊功能寄存器进行了sfrsfr定义;定义;要注意要注意:在引用时特殊功能寄存器或者位名称必须:在引用时特殊功能寄存器或者位名称必须大写大写。例:例:#include reg

27、51.h)#include reg51.h) Main() Main() P1=0 x40;P1=0 x40; IT0=1;IT0=1; 单片机及接口技术单片机及接口技术DMU.DMU.1-282 2、对位变量的定义、对位变量的定义(2 2)采用字节寻址)采用字节寻址变量的位变量的位的方法的方法-特定位的定义特定位的定义 如如 bdata int ibasebdata int ibase; / /* *ibaseibase定义为整型变量定义为整型变量* */ / sbitsbit mybit0= mybit0=ibase0ibase0; / /* *mybitmybit定义为定义为ibasei

28、base的的D0D0位位* */ / C51C51对位变量的定义分对位变量的定义分 三类三类 :(1 1)定义位类型定义位类型变量变量 用用bitbit类型定义符类型定义符 - -普通位定义普通位定义 如如 bit mnbit mn; mnmn为位变量,其值只能是为位变量,其值只能是00或或11,其位地址,其位地址C51C51安排安排在可位寻址区的在可位寻址区的bdatabdata区。区。 这里的这里的 是是位运算符,相当于汇编中的位运算符,相当于汇编中的; 其后的数的取值依赖于该位所在的字节寻址变量的定义类型,其后的数的取值依赖于该位所在的字节寻址变量的定义类型, 如如 定义为定义为char

29、char最大值只能为最大值只能为7 7。 单片机及接口技术单片机及接口技术DMU.DMU.1-29情况情况1 1:使使reg51.hreg51.h定义过,定义过,直接引用位名称直接引用位名称。 2 2、对位变量的定义、对位变量的定义情况情况2 2:无位名的可寻址位,:无位名的可寻址位,用用sbitsbit定义符定义符。 (3 3)特殊功能寄存器中)特殊功能寄存器中 位的定义位的定义-用用sbitsbit定义符定义符方法方法1 1:用用寄存器名寄存器名 位位定义定义 例如:例如: #include #include sbit P1_1= sbit P1_1=P11P11; / /* *P1_1P

30、1_1为为P1P1口的第口的第1 1位位* */ / sbit A7= sbit A7=ACC7ACC7; / /* *定义定义A7A7为累加器为累加器A A的第的第7 7位位* */ /例如:例如: #include #include RS1=1 RS1=1; RS0=0RS0=0; 单片机及接口技术单片机及接口技术DMU.DMU.1-30方法方法2 2: 用用字节地址位字节地址位表示表示 例如:例如: sbit CY=0 xD02sbit CY=0 xD02; 2 2、对位变量的定义、对位变量的定义等效等效 #include #include sbit CY=PSW2 sbit CY=PS

31、W2; / /* * PSW PSW地址为地址为D0H D0H * */ / 单片机及接口技术单片机及接口技术DMU.DMU.1-31三、对存储器和外接三、对存储器和外接I/OI/O口的绝对地址访问口的绝对地址访问 (1 1)对存储器的绝对地址访问)对存储器的绝对地址访问 绝对地址访问的头文件绝对地址访问的头文件absacc.habsacc.h,对不同的存储区进行访问。对不同的存储区进行访问。该头文件该头文件absacc.habsacc.h的函数有:的函数有: CBYTECBYTE ( (访问访问codecode区字符型区字符型) ) DBYTE DBYTE ( (访问访问datadata区字

32、符型区字符型) ) PBYTE PBYTE ( (访问访问pdatapdata或或I/OI/O区字符型区字符型) ) XBYTE XBYTE ( (访问访问xdataxdata或或I/OI/O区字符型区字符型) ) 还有还有CWORDCWORD、DWORDDWORD、PWORDPWORD和和XWORDXWORD四个函数,它四个函数,它们的访问区域同上,只是们的访问区域同上,只是访问的类型为访问的类型为intint 型。型。字符型字符型字型字型空指针空指针单片机及接口技术单片机及接口技术DMU.DMU.1-32三、对存储器和外接三、对存储器和外接I/OI/O口的绝对地址访问口的绝对地址访问 例:

33、例: #include #include #define#define comcom XBYTE0 x07ffXBYTE0 x07ff 那么后面程序那么后面程序comcom变量变量出现的地方,就是对地址为出现的地方,就是对地址为07ffH07ffH的的外部外部RAMRAM或或I/OI/O口进行访问。口进行访问。使用中要注意使用中要注意:程序一定要包含程序一定要包含absacc.habsacc.h; XBYTE XBYTE 、XWORD XWORD 必须必须大写大写。 例:例: #include#include XWORD0 x4000=0 x9988XWORD0 x4000=0 x9988;即

34、将即将9988H9988H送入外部送入外部RAMRAM的的4000H4000H和和4001H4001H单元。单元。 comcom =0 x56; /(0 x07ff)=0 x56; /(0 x07ff) 0 x560 x56或或 XBYTE0 x07ff =XBYTE0 x07ff = 0 x560 x56单片机及接口技术单片机及接口技术DMU.DMU.1-33(2 2)对外部)对外部I/OI/O口的访问口的访问由于单片机的由于单片机的I/OI/O口和外部口和外部RAMRAM统一编址统一编址,因此对,因此对I/OI/O口地址口地址的的字节访问字节访问可用可用XBYTEXBYTE (MOVX D

35、PTR ) (MOVX DPTR ) 或或PBYTEPBYTE (MOVX Ri) (MOVX Ri)进行。进行。#include #include -常用常用#define AD_PORT XBYTE0 xefff#define AD_PORT XBYTE0 xefff AD_PORT=0 x10; AD_PORT=0 x10; -XBYTEXBYTE0 xefff0 xefff=0 x10=0 x10;-很少用很少用指针、绝对地址访问的使用场合?指针、绝对地址访问的使用场合?例例: : 将将10H10H输出到端口地址为输出到端口地址为EFFFHEFFFH的的A/DA/D芯片。芯片。单片机及

36、接口技术单片机及接口技术DMU.DMU.1-34 1.51.5 C51C51的运算符的运算符 3. C513. C51的关系运算符有六种:的关系运算符有六种:( (小于小于) ); ( (大于大于) ); = = ( (小于等于小于等于) ); = = ( (大于等于大于等于); ); =( (相等相等) );!= != ( (不相等不相等) )优先级:优先级:前四个高前四个高,后二个,后二个“=”=”和和“!=”!=”级别低级别低。 1 1赋值运算符:赋值运算符: 将将“”的右边的值赋值给左边的变量。的右边的值赋值给左边的变量。 如:如:x=6;x=6;2. C512. C51的算术运算符的

37、算术运算符: :( (加或正号加或正号) );( (减或负号减或负号) );* * ( (乘号乘号) ); / / ( (除号除号) ); % ( (求余求余) )优先级为:优先级为:先乘除,后加减;先乘除,后加减; 先括号内,再括号外。先括号内,再括号外。单片机及接口技术单片机及接口技术DMU.DMU.1-35&( (逻辑与逻辑与) ); |( (逻辑或逻辑或) ); ! !( (逻辑非逻辑非); ); 逻辑表达式和关系表达式的值相同:逻辑表达式和关系表达式的值相同: 0-0-假,假,1-1-真真。1.5 C511.5 C51的运算符的运算符例例1 1 a=0 xf0 a=0 xf0

38、; 执行执行a=a=a;a;例例2 2 a=0 x20 a=0 x20;执行;执行a=a2;a=a2; 以上几种运算的以上几种运算的优先级优先级:4 4C51C51的逻辑运算符的逻辑运算符 有三种有三种:!(非)关系运算&和|=(赋值运算)算术运算5 5C51C51的按位操作的运算符的按位操作的运算符 有六种有六种&( (按位与按位与) ); ( (按位或按位或) ); ( (按位异或按位异或) ); ( (位取反位取反) ); ( (位右移位右移 ) ) ( (注:补零移位注:补零移位) )a=0 x0Fa=0 x0Fa=0 x80a=0 x80,移位补,移位补0 0单片机及

39、接口技术单片机及接口技术DMU.DMU.1-361.5 C511.5 C51的运算符的运算符6. 6. 自增、自减运算符自增、自减运算符: :+i+i,-i-i ( (在使用在使用i i之之前前,先使,先使i i值加值加1,1,减减1)1)i+i+,i-i- ( (在使用在使用i i之之后后,再使,再使i i值加值加1.,1.,减减1)1)单片机及接口技术单片机及接口技术DMU.DMU.1-371.5 C511.5 C51的运算符的运算符例例 a=&ba=&b; 取取b b变量的地址送变量变量的地址送变量a a c= c=* *a a; 将以将以a a为地址的单元的内容送为地址

40、的单元的内容送c c 7.7.对指针操作的运算符对指针操作的运算符: :&取地址运算取地址运算 * *间址运算符间址运算符(a a) c c单片机及接口技术单片机及接口技术DMU.DMU.1-38 1.6 1.6 函数函数 1 1、函数的分类、函数的分类从用户使用角度划分,函数分为从用户使用角度划分,函数分为库函数库函数和和用户自定义函数用户自定义函数。 库函数库函数是编译系统提供的一系列标准函数是编译系统提供的一系列标准函数( (见本书附录二见本书附录二) ),用,用户只需调用,而无需自己去编写这些复杂的函数;户只需调用,而无需自己去编写这些复杂的函数; 如如 头头文件文件reg51

41、.hreg51.h、absacc.habsacc.h、stdio.hstdio.h、math.hmath.h等文件中等文件中包括一系列函数;包括一系列函数; 使用其中的函数,必须先使用使用其中的函数,必须先使用#include#include包含语句包含语句,然后才能,然后才能调用。调用。 标准(标准(ANSIANSI)C C中的中的scanfscanf和和printfprintf等变为对等变为对串行口串行口操作。操作。单片机及接口技术单片机及接口技术DMU.DMU.1-39 1.6 1.6 函数函数 如果如果被调函数被调函数出现在出现在主调用函数主调用函数之后之后, 那么,在调用函数前那么,

42、在调用函数前 应对应对被调函数作以说明被调函数作以说明, 形式为:形式为: 返回值类型返回值类型 被调函数名被调函数名(形参);(形参); 用户自定义函数用户自定义函数是用户根据任务编写的函数是用户根据任务编写的函数2 2、函数的调用说明、函数的调用说明单片机及接口技术单片机及接口技术DMU.DMU.1-40 1.7 C1.7 C语言编程实例语言编程实例1 1、顺序程序的设计、顺序程序的设计例例1 1 编程实现两个无符号的整数相乘,编程实现两个无符号的整数相乘,乘积存放在外部数乘积存放在外部数据存储器据存储器4000H4000H开始的单元。开始的单元。分析:分析:两个两个无符号的整数相乘无符号

43、的整数相乘,其积为,其积为4 4个字节,采用个字节,采用unsigned longunsigned long类型,类型,单片机及接口技术单片机及接口技术DMU.DMU.1-41 1.7 C1.7 C语言编程实例语言编程实例main() main() unsigned int aunsigned int a,b;b; unsigned long c; unsigned long c; unsigned long xdata unsigned long xdata * *p; p; p=0 x4000; p=0 x4000; c=a c=a* *b; b; * *p=c; p=c; 程序如下:程序

44、如下:/ /* *设地址指向设地址指向4000H4000H单元单元* */ / / /* *积存入外部积存入外部RAM 4000H RAM 4000H 单元单元* */ / / /* *指针指针p p指向类型为指向类型为unsigned longunsigned long的外部的外部RAMRAM区区* */ / /* * 被乘数和被乘数和乘数乘数 * */ / /* *积积unsigned longunsigned long类型类型 * */ / 如何验证程序的正确性?如何验证程序的正确性? 提醒:变量最好不要用提醒:变量最好不要用a a、b b、c c 单片机及接口技术单片机及接口技术DMU

45、.DMU.1-42 main()main() char char data data y y,* *p p ; char char codecode tab tab6 6= =0,1,4,90,1,4,9,16,2516,25; ; p=0 x20; p=0 x20; y=taby=tab* *p p; ; /x=/x=* *p; y=tabx;p; y=tabx; p+; p+; / / 指向指向21H21H * *p=y;p=y; / / 存入存入21H21H单元单元 例例2 2 片内片内RAM 20HRAM 20H单元存放着一个单元存放着一个0 05 5的数,用的数,用查表法查表法,求出

46、该数的平方值放入内部求出该数的平方值放入内部RAM 21HRAM 21H单元。单元。入口入口出口出口单片机及接口技术单片机及接口技术DMU.DMU.1-432 2、循环程序的设计、循环程序的设计 (2 2)dodo语句;语句;while(while(表达式表达式) ) 表达式为真执行循环体表达式为真执行循环体“语句语句”,直至表达式为假,直至表达式为假,退出循环执行下一个语句。退出循环执行下一个语句。 C C语言的循环语句有语言的循环语句有以下几种形式以下几种形式(1 1)while(while(表达式表达式) )语句;语句; 其中表达式为其中表达式为循环条件循环条件,语句为,语句为循环体循环

47、体; 当表达式值为当表达式值为真真 ( (非非0)0),重复执行,重复执行“语句语句”循环体循环体。先判断,后执行循环体先判断,后执行循环体先执行循环体,后判断先执行循环体,后判断单片机及接口技术单片机及接口技术DMU.DMU.1-44例:例: while( (P1&0 x01)=0 )while( (P1&0 x01)=0 )P0=0;P0=0; P0=0 xff;P0=0 xff; 如果如果P1.0=0P1.0=0, P0P0口输出口输出0 0, 直到直到P1.0P1.0变为变为1 1,P0P0口输出口输出FFH FFH ;2 2、循环程序的设计、循环程序的设计此语句用于对

48、此语句用于对P1.0P1.0进行检测。进行检测。 sbit P10=P10;sbit P10=P10;while( !P10 )while( !P10 ) P0=0; / P0=0; /* * (P10=0) (P10=0) * */ /P0=0 xff;P0=0 xff;单片机及接口技术单片机及接口技术DMU.DMU.1-452 2、循环程序的设计、循环程序的设计 (3 3)for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3 3;) )语句;语句; 其中语句为循环体。其中语句为循环体。 执行过程是:执行表达式执行过程是:执行表达式1 1后进入循环体,如表达式后进入循环

49、体,如表达式2 2为假,为假,按表达式按表达式3 3修改变量,再执行循环体,直到表达式修改变量,再执行循环体,直到表达式2 2为真。为真。 单片机及接口技术单片机及接口技术DMU.DMU.1-463 3、分支程序的设计、分支程序的设计 (2 2)if(if(表达式表达式) )语句语句1 1;elseelse语句语句2 2; 表达式表达式为真为真执行语句执行语句1 1,否则否则执行语句执行语句2 2;C C语言的分支选择语句有以下几种形式:语言的分支选择语句有以下几种形式: (1 1) if( if(表达式表达式) )语句;语句; 表达式表达式为真为真执行语句,执行语句,否则否则执行下一条语句。

50、执行下一条语句。 当花括号中的语句不只一条,花括号不能省。当花括号中的语句不只一条,花括号不能省。 if if语句可以嵌套。语句可以嵌套。单片机及接口技术单片机及接口技术DMU.DMU.1-473 3、分支程序的设计、分支程序的设计 (3 3)switch(switch(表达式表达式) ) case case 常量表达式常量表达式1 1: :语句语句1 1;breakbreak; case case 常量表达式常量表达式2 2: :语句语句2 2;breakbreak; case case 常量表达式常量表达式n n: :语句语句n n;breakbreak; default:default:

51、语句语句n+1;n+1; 单片机及接口技术单片机及接口技术DMU.DMU.1-481.8 C511.8 C51中断的设计中断的设计 必选项必选项 interrupt ninterrupt n表示将函数声明为中断服务函数,表示将函数声明为中断服务函数, n n为中断源编号为中断源编号,可以是,可以是0 03131间的整数间的整数 ,n n通常取以下值:通常取以下值:C51C51能编写高效的能编写高效的中断服务程序中断服务程序,编译器在规定的中断源的,编译器在规定的中断源的矢矢量地址中放入无条件转移指令量地址中放入无条件转移指令,使,使CPUCPU响应中断后自动地从矢响应中断后自动地从矢量地址跳转

52、到中断服务程序的实际地址,而量地址跳转到中断服务程序的实际地址,而无需用户去安排无需用户去安排。中断服务程序定义如下中断服务程序定义如下: : 返回值返回值 函数名函数名( (参数参数) interrupt n) interrupt nusing musing m3 3 定时器定时器/ /计数器计数器1 1溢出中断溢出中断4 4 串行口发送与接收中断串行口发送与接收中断5 5 定时器定时器/ /计数器计数器2 2中断中断 0 0 外部中断外部中断0 0;1 1 定时器定时器/ /计数器计数器0 0溢出中断溢出中断2 2 外部中断外部中断1 1;单片机及接口技术单片机及接口技术DMU.DMU.1

53、-491.8 C511.8 C51中断的设计中断的设计 using m using m 定义函数使用的工作寄存器组,定义函数使用的工作寄存器组,mm的取值为的取值为0 03 3,可缺省。可缺省。 它对目标代码的影响是:它对目标代码的影响是: 函数函数入口处入口处将当前寄存器组保存,使用将当前寄存器组保存,使用 mm组寄存器组;组寄存器组; 函数函数退出时退出时,恢复寄存器组。,恢复寄存器组。 选不同的工作寄存器组,实现寄存器组的现场保护。选不同的工作寄存器组,实现寄存器组的现场保护。单片机及接口技术单片机及接口技术DMU.DMU.1-50 中断服务函数中断服务函数不允许用于外部函数不允许用于外

54、部函数(用户程序调用)(用户程序调用)1.8 C511.8 C51中断的设计中断的设计它对目标代码影响如下:它对目标代码影响如下: 当调用中断函数时,当调用中断函数时,SFRSFR中的中的ACCACC、B B、DPHDPH、DPLDPL和和PSWPSW当当需要时自动入栈需要时自动入栈。 如果不使用寄存器组切换,中断函数所需的如果不使用寄存器组切换,中断函数所需的所有工作寄存器所有工作寄存器都入栈都入栈。 函数退出前,函数退出前,所有工作寄存器都出栈所有工作寄存器都出栈。 函数由函数由RETIRETI指令终止。指令终止。单片机及接口技术单片机及接口技术DMU.DMU.1-51例例1 1 要求每中

55、断一次,发光二极管显示开关状态要求每中断一次,发光二极管显示开关状态int0()int0() interrupt interrupt 0 0 / /* *INT0INT0中断函数中断函数* */ / P1=P1|0 x0f; /P1=P1|0 x0f; /* *输入端先置输入端先置1 1, P1=0 x0f;P1=0 x0f;* */ / P1=P14; / P1=P14; /* * 读入开关状态,左移四位,并反映在发光二极管上读入开关状态,左移四位,并反映在发光二极管上* */ / C51C51外部中断的设计外部中断的设计-实例实例1 1#include #include main()mai

56、n() EX0=1; / EX0=1; /* *允许允许INT0INT0中断中断* */ / IT0=1; / IT0=1; /* *下降沿产生中断下降沿产生中断* */ / EA=1; /EA=1; /* *开中断总开关开中断总开关* */ / while(1) ; / while(1) ; /* *等待中断等待中断* */ / 单片机及接口技术单片机及接口技术DMU.DMU.1-52#include #include char code tab16=0 x3f,0 x06,0 x5b,0 x4fchar code tab16=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0

57、x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; 0 x7c,0 x39,0 x5e,0 x79,0 x71; /0-F/0-F字形码字形码unsigned char count;unsigned char count;P1.189C51P1.0P1.2P1.4P1.3P1.5P1.6&1K X 2INT1驱动器+5VagEAmain()main() EX1=1; EX1=1; IT1=1; IT1=1; EA=1; EA=

58、1; count=0; count=0; while(1) while(1) ; C51C51外部中断的设计外部中断的设计-实例实例2 2例例2 2 记录并显示中断次数,大于记录并显示中断次数,大于1515,回零。,回零。int1()int1() interrupt 2 interrupt 2 count+count+; if( count15) count=0; if( count15) count=0; P1=tabcount; P1=tabcount; 单片机及接口技术单片机及接口技术DMU.DMU.1-53定时定时/ /计数器的计数器的C C语言编程语言编程例例 在在P1.7P1.7端

59、接一个发光二极管端接一个发光二极管LEDLED,要求利用定时控制使,要求利用定时控制使LEDLED亮一秒灭一秒周而复始,设亮一秒灭一秒周而复始,设fosc=6MHzfosc=6MHz。计数值计数值=100=10010103 3 s /2 s /2 s=50000s=50000, 即初值为即初值为 65536-50000 65536-50000 = - 50000 = - 5000089C5189C51P1.7P1.7+5V+5VLEDLED分析分析 T0T0定时定时100ms100ms,用一个用一个计时变量计时变量计计1010次,即为次,即为1 1秒。秒。 TH0 TH0=-50000/256

60、=-50000/256;TL0=-5000%256TL0=-5000%256;单片机及接口技术单片机及接口技术DMU.DMU.1-54#include #include reg51.hreg51.hsbit P17=P17sbit P17=P17;unsigned char time_base; unsigned char time_base; timer0() interrupt 1 /timer0() interrupt 1 /* * T0 T0中断服务程序中断服务程序 * */ / TH0=-50000/256 TH0=-50000/256; / / (65536-5000065536-50000)/256/256 TL0=-50000%256TL0=-50000%256; /

温馨提示

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

评论

0/150

提交评论