《(15.9)--第4章1 C语言单片机原理与应用.ppt》由会员分享,可在线阅读,更多相关《(15.9)--第4章1 C语言单片机原理与应用.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、返回目录*1单片机原理与接口技术单片机原理与接口技术第第4章章 MCS-51C程序设计程序设计 返回目录本章教学要求(1)熟悉熟悉C51语法基础和程序结构。语法基础和程序结构。(2)掌握掌握C51结构化程序设计。结构化程序设计。(3)掌握掌握C51对单片机硬件的访问方法。对单片机硬件的访问方法。(4)掌握掌握C51函数定义与调用。函数定义与调用。(5)了解汇编语言和了解汇编语言和C51的混合编程。的混合编程。*2返回目录4.1 C51概述概述4.2 C51语法基础语法基础4.2.1 标识符和关键字标识符和关键字4.2.2 数据类型数据类型4.2.3 运算符和表达式运算符和表达式4.2.4 程序
2、结构程序结构*3本本 章章 目目 录录4 4.3 C51.3 C51对对对对MCS-51MCS-51单片机的访问单片机的访问单片机的访问单片机的访问4 4.3.1 .3.1 存储类型存储类型存储类型存储类型4 4.3.2 .3.2 存储模式存储模式存储模式存储模式4 4.3.3 .3.3 对特殊功能寄存器的访问对特殊功能寄存器的访问对特殊功能寄存器的访问对特殊功能寄存器的访问4 4.3.4 .3.4 对存储器和并行口的访问对存储器和并行口的访问对存储器和并行口的访问对存储器和并行口的访问4 4.3.5.3.5 位地址访问位地址访问位地址访问位地址访问4.3.6 4.3.6 中断函数中断函数中断
3、函数中断函数 返回目录*44 4.4 C51.4 C51结构化程序设计结构化程序设计结构化程序设计结构化程序设计4 4.4.1 .4.1 顺序结构程序顺序结构程序顺序结构程序顺序结构程序4 4.4.2 .4.2 选择结构程序选择结构程序选择结构程序选择结构程序4 4.4.4.3 .3 循环结构程序循环结构程序循环结构程序循环结构程序4 4.5 C51.5 C51程序设计实例程序设计实例程序设计实例程序设计实例4 4.5.1 .5.1 查表程序查表程序查表程序查表程序4 4.5.5.2 .2 单片机内单片机内单片机内单片机内/外部资源应用外部资源应用外部资源应用外部资源应用程序设计程序设计程序设
4、计程序设计4 4.5.5.3 C51.3 C51语言和语言和语言和语言和MCS-51MCS-51汇编汇编汇编汇编语言混合编程语言混合编程语言混合编程语言混合编程4 4.5.5.4 .4 编程优化的概念编程优化的概念编程优化的概念编程优化的概念习题与思考题习题与思考题习题与思考题习题与思考题本本 章章 目目 录录返回目录4.3 C51对MCS-51单片机的访问MCS-51单片机的存储器分为单片机的存储器分为片内数据存储器、特殊功能寄片内数据存储器、特殊功能寄存器、片外数据存储器、片内程序存储器和片外程序存储器存器、片外数据存储器、片内程序存储器和片外程序存储器。在在C51中访问这些存储器时,是通
5、过定义不同存储类型的中访问这些存储器时,是通过定义不同存储类型的变量,以说明该变量所访问的存储器位置。变量,以说明该变量所访问的存储器位置。*54.3.1 4.3.1 存储类型存储类型存储类型存储类型-C51访问存储器访问存储器返回目录4.3.1 存储类型1data存储类型存储类型data存存储储类类型型变变量量可可直直接接寻寻址址片片内内数数据据存存储储区区RAM(128字节),访问速度快。字节),访问速度快。2bdata存储类型存储类型bdata存存储储类类型型变变量量可可位位寻寻址址片片内内数数据据存存储储区区RAM(16个字节),允许位与字节混合访问。个字节),允许位与字节混合访问。3
6、idata存储类型存储类型idata存存储储类类型型变变量量可可间间接接寻寻址址内内部部数数据据存存储储区区,可访问全部内部地址空间(可访问全部内部地址空间(00FFH,256字节)。字节)。*6-定义存储类型定义存储类型返回目录4.3.1 存储类型4pdata存储类型存储类型pdata存储类型变量可以存储类型变量可以分页(分页(256 B)寻址)寻址由由指令指令MOVX Ri访问的片外访问的片外RAM空间空间。5xdata存储类型存储类型xdata存储类型变量可以寻址由指令存储类型变量可以寻址由指令MOVX DPTR访问的访问的64 KB片外片外RAM空间空间。6code存储类型存储类型co
7、de存储类型变量可以寻址由指令存储类型变量可以寻址由指令MOVC A+DPTR访问的访问的64 KB片内外片内外ROM空间空间。*7-定义存储类型定义存储类型返回目录4.3.2 存储模式存存储储模模式式决决定定了了变变量量的的默默认认存存储储类类型型和和参参数数传传递递区,变量定义不明确存储类型时使用默认值。区,变量定义不明确存储类型时使用默认值。C51有三种存储模式:有三种存储模式:SMALL、LARGE 和和 COMPACT。8*-变量的存储类型变量的存储类型返回目录*94.3.2 存储模式存储模式存存存存 储储储储 模模模模 式式式式说说说说 明明明明小编译模式小编译模式小编译模式小编译
8、模式SMALLSMALL参参参参数数数数及及及及局局局局部部部部变变变变量量量量放放放放入入入入可可可可直直直直接接接接寻寻寻寻址址址址的的的的片片片片内内内内数数数数据据据据存存存存储储储储区区区区(最最最最大大大大128 128 B B,默默默默认认认认存存存存储储储储类类类类型型型型是是是是datadata),因因因因此此此此访访访访问问问问十十十十分分分分方方方方便便便便。另另另另外外外外所所所所有有有有对对对对象象象象,包包包包括括括括栈栈栈栈,都都都都必必必必须须须须嵌嵌嵌嵌入入入入片片片片内内内内RAMRAM。栈栈栈栈长长长长很很很很关关关关键键键键,因因因因为为为为实实实实际际
9、际际栈栈栈栈长长长长依依依依赖赖赖赖于于于于不不不不同同同同函函函函数数数数的的的的嵌嵌嵌嵌套套套套层数。层数。层数。层数。紧凑编译模式紧凑编译模式紧凑编译模式紧凑编译模式COMPACTCOMPACT参参参参数数数数及及及及局局局局部部部部变变变变量量量量放放放放入入入入分分分分页页页页片片片片外外外外数数数数据据据据存存存存储储储储区区区区(最最最最大大大大256 256 B B,默默默默认认认认的的的的存存存存储储储储类类类类型型型型是是是是pdatapdata),通通通通过过过过寄寄寄寄存存存存器器器器R0R0和和和和R1R1间间间间接寻址,栈空间位于内部数据存储区中。接寻址,栈空间位于
10、内部数据存储区中。接寻址,栈空间位于内部数据存储区中。接寻址,栈空间位于内部数据存储区中。大编译模式大编译模式大编译模式大编译模式LARGELARGE参参参参数数数数及及及及局局局局部部部部变变变变量量量量直直直直接接接接放放放放入入入入片片片片外外外外数数数数据据据据存存存存储储储储区区区区(最最最最大大大大64 64 KBKB,默默默默认认认认存存存存储储储储类类类类型型型型为为为为xdataxdata),使使使使用用用用数数数数据据据据指指指指针针针针DPTRDPTR来来来来进进进进行行行行寻寻寻寻址址址址。用用用用此此此此数数数数据据据据指指指指针针针针访访访访问问问问的的的的效效效效
11、率率率率较较较较低低低低,尤尤尤尤其其其其是是是是对对对对两两两两个个个个或或或或多多多多个个个个字字字字节节节节的的的的变变变变量量量量,这这这这种种种种数数数数据据据据存存存存储储储储类类类类型型型型的的的的访访访访问问问问机机机机制制制制直直直直接接接接影影影影响响响响代代代代码码码码的的的的长长长长度度度度,不不不不方方方方便便便便之之之之处处处处在在在在于于于于这这这这种种种种数数数数据据据据指指指指针不能对称操作。针不能对称操作。针不能对称操作。针不能对称操作。-变量的存储类型变量的存储类型返回目录4.3.2 存储模式 数据存储模式的设定有两种方式:数据存储模式的设定有两种方式:(
12、1)使用预处理命令设定数据存储模式)使用预处理命令设定数据存储模式需在程序的第一句加预处理命令。如:需在程序的第一句加预处理命令。如:#pragma small/*设定数据存储模式为小编译模式设定数据存储模式为小编译模式*/#pragma compact /*设定数据存储模式为紧凑编译模式设定数据存储模式为紧凑编译模式*/#pragma large/*设定数据存储模式为大编译模式设定数据存储模式为大编译模式*/(2)使用编译控制命令设定数据存储模式)使用编译控制命令设定数据存储模式用用C51编编译译程程序序对对C51源源程程序序进进行行编编译译时时,使使用用编编译译控控制制命命令,格式如下:令
13、,格式如下:C51 源程序名源程序名 SMALL C51 源程序名源程序名 COMPACT C51 源程序名源程序名 LARGE*10-存储模式的设定存储模式的设定返回目录*11例例例例如如如如:C51C51源源源源程程程程序序序序为为为为file1.Cfile1.C,若若若若使使使使程程程程序序序序中中中中的的的的变变变变量量量量存存存存储储储储类类类类型型型型和和和和参参参参数数数数传传传传递递递递区区区区限限限限定定定定在在在在外外外外部部部部数数数数据据据据存存存存储储储储区区区区,即即即即设设设设定定定定数数数数据存储模式为据存储模式为据存储模式为据存储模式为COMPACTCOMPA
14、CT(紧凑编译模式)。(紧凑编译模式)。(紧凑编译模式)。(紧凑编译模式)。方法方法方法方法1 1:在程序的第一句加预处理命令:在程序的第一句加预处理命令:在程序的第一句加预处理命令:在程序的第一句加预处理命令:#pragma compact#pragma compact。方方方方法法法法2 2:用用用用C51C51对对对对file1.Cfile1.C进进进进行行行行编编编编译译译译时时时时,使使使使用用用用编编编编译译译译控控控控制制制制命命命命令:令:令:令:C51 file1.C COMPACTC51 file1.C COMPACT。4.3.2 存储模式存储模式-存储模式的设定存储模式的
15、设定返回目录4.3.2 存储模式*12【例例4-1】变量和函数的存储模式设置变量和函数的存储模式设置#pragma small#pragma small/*/*默认存储类型为默认存储类型为默认存储类型为默认存储类型为MCS-51MCS-51直接寻址片直接寻址片直接寻址片直接寻址片内内内内RAM*/RAM*/char char datadata i,j,k;i,j,k;/*/*在在在在MCS-51MCS-51片内直接寻址片内直接寻址片内直接寻址片内直接寻址RAMRAM中定义中定义中定义中定义了了了了3 3个变量个变量个变量个变量,默认为自动变量默认为自动变量默认为自动变量默认为自动变量*/cha
16、r i,j,k;char i,j,k;/*/*未指明存储类型未指明存储类型未指明存储类型未指明存储类型,由由由由#pragma small#pragma small决决决决定定定定,与前一句完全等价与前一句完全等价与前一句完全等价与前一句完全等价*/int int xdataxdata m,n;m,n;/*/*在在在在MCS-51MCS-51片外片外片外片外RAMRAM中定义了两个自中定义了两个自中定义了两个自中定义了两个自动变量动变量动变量动变量*/static static char char m,n;m,n;/*/*在在在在MCS-51MCS-51片内直接寻址片内直接寻址片内直接寻址片内
17、直接寻址RAMRAM中定义中定义中定义中定义了两个静态变量了两个静态变量了两个静态变量了两个静态变量*/-存储模式举例存储模式举例返回目录4.3.2 存储模式*13unsigned char unsigned char xdataxdata ram10;ram10;/*/*在在在在MCS-51MCS-51片外片外片外片外RAMRAM中定中定中定中定义了大小为义了大小为义了大小为义了大小为10 B10 B的数组变量的数组变量的数组变量的数组变量*/int func1(int i,int j)largeint func1(int i,int j)large/*/*指定函数中变量是指定函数中变量是指
18、定函数中变量是指定函数中变量是LARGELARGE模式模式模式模式*/return(i+j);return(i+j);intint func2(int i,int j)func2(int i,int j)/*/*未指明存储模式未指明存储模式未指明存储模式未指明存储模式,按默认的按默认的按默认的按默认的SMALLSMALL模式模式模式模式*/return(i-j);return(i-j);-存储模式举例存储模式举例返回目录4.3.3 特殊功能寄存器的访问MCS-51系系列列单单片片机机片片内内有有21个个特特殊殊功功能能寄寄存存器器(SFR),分分散散在在片片内内RAM区区的的0 x800 xF
19、F地地址址范围内。对范围内。对SFR的操作只能用直接寻址方式。的操作只能用直接寻址方式。为为了了能能直直接接访访问问这这些些特特殊殊功功能能寄寄存存器器,C51提提供供了了定定义义SFR的的方方法法。这这与与ANSI C不不兼兼容容,只只适适用于用于MCS-51系列单片机系列单片机。*14-定义定义SFR的方法的方法返回目录-sfr数据类型用用sfr定义特殊功能寄存器名的语法如下:定义特殊功能寄存器名的语法如下:Sfr 特殊功能寄存器名特殊功能寄存器名=整型常量整型常量;例如:例如:sfr PSW=0 xD0;/*定义程序状态字定义程序状态字PSW,因因MCS-51单片机的单片机的PSW 地址
20、为地址为D0H*/sfr TMOD=0 x89;/*定义定时定义定时/计数器方式控制寄存计数器方式控制寄存 器器TMOD,因因MCS-51单片机的单片机的TMOD地址为地址为89H*/sfr P1=0 x90;/*定义定义P1口口,因因MCS-51单片机的单片机的P1口地址为口地址为 90H*/sfr SCON=0 x98;/*定义串口控制寄存器定义串口控制寄存器SCON,因因 MCS-51单片机的单片机的SCON地址为地址为8H*/*154.3.3 特殊功能寄存器的访问特殊功能寄存器的访问1用用sfr数据类型访问特殊功能寄存器数据类型访问特殊功能寄存器返回目录2用用sbit数据类型访问可位寻
21、址的特殊数据类型访问可位寻址的特殊功能寄存器中的位功能寄存器中的位MCS-51系系列列单单片片机机片片内内21个个特特殊殊功功能能寄寄存存器器(SFR)中中有有11个个特特殊殊功功能能寄寄存存器器是是可可位位寻寻址址的的。访访问问这这些些可可位位寻寻址址的的特特殊殊功功能能寄寄存存器器中中的的位位的的方方法法可可由由关关键键字字sbit定定义义特特殊殊功功能能寄寄存存器器位位寻寻址址数数据据类类型型来来实实现现。定义特殊功能寄存器位名的语法有下列三种:定义特殊功能寄存器位名的语法有下列三种:*164.3.3 特殊功能寄存器的访问特殊功能寄存器的访问-sbit数据类型数据类型返回目录sbit 特
22、殊功能寄存器位名特殊功能寄存器位名=特殊功能寄存器名特殊功能寄存器名整型常量整型常量其其中中,特特殊殊功功能能寄寄存存器器名名是是已已由由sfr定定义义了了的的特特殊殊功功能能寄寄存存器器名名,整整型型常常量量是是位位可可寻寻址址特特殊殊功功能能寄寄存存器器中中的的位位(是是一一个个07之间的常数)。之间的常数)。sbit 特殊功能寄存器位名特殊功能寄存器位名=整型常量整型常量1整型常量整型常量2其中,整型常量其中,整型常量1是指可位寻址特殊功能寄存器的字节地是指可位寻址特殊功能寄存器的字节地址(在址(在80HFFH之间),整型常量之间),整型常量2是指该寄存器中的位是指该寄存器中的位(是一个
23、(是一个07之间的常数)。之间的常数)。sbit 特殊功能寄存器位名特殊功能寄存器位名=整型常量整型常量其中,整型常量是可位寻址特殊功能寄存器的绝对位地其中,整型常量是可位寻址特殊功能寄存器的绝对位地址(位于址(位于80HFFH之间)。之间)。*174.3.3 特殊功能寄存器的访问特殊功能寄存器的访问-定义方法定义方法返回目录*184.3.3 特殊功能寄存器的访问特殊功能寄存器的访问sfr PSW=0 xD0;/*首先定义程序状态字首先定义程序状态字PSW,因因MCS-51单片机的单片机的PSW地址为地址为D0H*/sbit OV=PSW2;/*在前面定义了在前面定义了PSW后后,OV位于位于
24、PSW的的 第第2位位*/sbit AC=0 xD06;/*D0H是程序状态字是程序状态字PSW的字节地址的字节地址,辅助进位标志位辅助进位标志位AC位于位于PSW的第的第6位位*/sbit RS0=0 xD03;/*工作寄存器组控制位工作寄存器组控制位RS0位于位于PSW的的 第第3位位*/sbit CY=0 xD7;/*进位标志位进位标志位Cy的绝对位地址为的绝对位地址为D7H*/标准标准SFR在在reg51.h、reg52.h等头文件中已经被定义,只要等头文件中已经被定义,只要用文件包含做出申明即可使用。用文件包含做出申明即可使用。-实例实例返回目录例例4-2 特殊功能寄存器的访问。特殊
25、功能寄存器的访问。#include”reg51.h”sbit P10=P10;/*定义定义P10为为P1口第口第0位,即位,即P1.0口口*/sbit P12=P12;/*定义定义P12为为P1口第口第2位,即位,即P1.2口口*/void main()P10=1;/*置位置位P1.0口口*/P12=0;/*复位复位P1.2口口*/PSW=0 x08;/*程序状态字置程序状态字置0 x08*/*194.3.3 特殊功能寄存器的访问特殊功能寄存器的访问-应用实例应用实例返回目录4.3.4 存储器和并行口的访问MCS-51单单 片片 机机 片片 内内 有有 128个个 字字 节节 的的 RAM区区
26、(00H7FH),可可扩扩展展片片外外64KB的的ROM和和RAM,有有P0、P1、P2、P3四四个个8位位双双向向并并行行I/O口口,每每个个端端口口可可以以按按字字节节输输入入或或输输出出,也也可可以以按按位位进进行行输输入入或或输输出出,四四个个口口共共32根口线。根口线。使使用用C51编编程程时时,片片内内/外外存存储储器器、片片内内I/O口口与与片片外外扩扩展展I/O口口可可以以统统一一在在头头文文件件中中定定义义,也也可可以以在在程程序序中中进进行行定定义义(一一般般在在程程序序开开始始的的位位置置)。C51定定义义存存储储器器、并行口方法如下。并行口方法如下。*20-在头文件中定
27、义在头文件中定义返回目录1对存储器使用绝对地址访问C51编译器提供了一组宏定义用来对编译器提供了一组宏定义用来对MCS-51系列单片机的系列单片机的CODE、DATA、PDATA和和XDATA空间进行绝对地址访问。空间进行绝对地址访问。函数原型如下:函数原型如下:#define CBYTE(unsigned char volatile*)0 x50000L)#define DBYTE(unsigned char volatile*)0 x40000L)#define PBYTE(unsigned char volatile*)0 x30000L)#define XBYTE(unsigned c
28、har volatile*)0 x20000L)#define CWORD(unsigned int volatile*)0 x50000L)#define DWORD(unsigned int volatile*)0 x40000L)#define PWORD(unsigned int volatile*)0 x30000L)#define XWORD(unsigned int volatile*)0 x20000L)这些函数原型放在这些函数原型放在absacc.h文件中文件中*214.3.4 存储器和并行口的访问存储器和并行口的访问-绝对地址访问绝对地址访问返回目录4.3.4 存储器和并行
29、口的访问CBYTE以以字字节节形形式式对对CODE区区寻寻址址,DBYTE以以字字节节形形式式对对DATA区区寻寻址址,PBYTE以以字字节节形形式式对对PDATA区区寻寻址址,XBYTE以以字字节节形形式式对对XDATA区区寻寻址址,CWORD以以字字形形式式对对CODE区区寻寻址址,DWORD以以字字形形式式对对DATA区区寻寻址址,PWORD以以字字形形 式式 对对 PDATA区区 寻寻 址址,XWORD以以 字字 形形 式式 对对XDATA区寻址。区寻址。*22-绝对地址访问绝对地址访问返回目录例4-3 使用绝对地址访问存储器#include#include#define uint u
30、nsigned int#define uchar unsigned charvoid main(void)uint ui_var1;uchar uc_var1;ui_var1=XWORD 0 x0000;/*访问外部访问外部RAM的的0000H0001H地址的内容地址的内容*/uc_var1=XBYTE 0 x0002;/*访问外部访问外部RAM的的0002H地址的内容地址的内容*/XWORD 0 x0000=0 xAABB;/*将将0 xAABB送入外部送入外部RAM的的 0000H0001H地址中地址中*/XBYTE 0 x0002=0 xAA;/*将将0 xAA送入外部送入外部RAM的的
31、0002H地址中地址中*/for(;);*234.3.4 存储器和并行口的访问存储器和并行口的访问-绝对地址访问绝对地址访问返回目录2对存储器使用指针访问 采用指针的方法,可实现在采用指针的方法,可实现在C51程序中对任意指定的存储器程序中对任意指定的存储器地址进行操作。地址进行操作。例例4-4 使用指针访问存储器。使用指针访问存储器。#define uchar unsigned char#define uint unsigned intvoid test_memory(void)uchar idata ivar1;/*定义一个指向定义一个指向idata存储空间的变量存储空间的变量*/ucha
32、r xdata*xdp;/*定义一个指向定义一个指向XDATA存储器空间的指针存储器空间的指针*/char data*dp;/*定义一个指向定义一个指向DATA存储器空间的指针存储器空间的指针*/*244.3.4 存储器和并行口的访问存储器和并行口的访问-指针访问指针访问返回目录4.3.4 存储器和并行口的访问uchar idata*idp;/*定义一个指向定义一个指向IDATA存储器空间的指针存储器空间的指针*/xdp=0 x1000;/*XDATA指针赋值,指向指针赋值,指向XDATA存储器地存储器地 址址1000H处处*/*xdp=0 x5A;/*将数据将数据5AH送到送到XDATA区的
33、区的1000H单元单元*/dp=0 x61;/*DATA指针赋值,指向指针赋值,指向DATA存储器地址存储器地址 61H处处*/*dp=0 x23;/*将数据将数据23H送到送到DATA区的区的61H单元单元*/idp=&ivar1;/*idp指向指向IDATA区的变量区的变量ivar1*/*idp=0 x16;/*数据数据16H送到送到IDATA区的变量区的变量ivar1所在的所在的 地址单元中,地址单元中,等价于等价于ivar1=0 x16*/*25-指针访问指针访问返回目录3C51定义片内I/O口单片机内部并行口可用关键字单片机内部并行口可用关键字sfr定义,定义,I/O口定义口定义格式
34、举例:格式举例:sfr P0=0 x80;/*定义定义P0口,地址口,地址80H*/sfr P1=0 x90;/*定义定义P1口,地址口,地址90H*/*264.3.4 存储器和并行口的访问存储器和并行口的访问-sfr定义片内定义片内I/O返回目录操作片内I/O口例例4-5 操作片内操作片内I/O口口sfr P1=0 x90;/*定义定义P1口,地址口,地址90H*/sfr P3=0 xB0;/*定义定义P3口,地址口,地址B0H*/sbit DIPswitch=P14;/*P1口第口第4位(位(P1.4口)为口)为DIP开关的输入开关的输入*/sbit LEDgreen=P35;/*P3口第
35、口第5位(位(P3.5口)为口)为LED的输出的输出*/void main()unsigned char inval=0;for(;)if(DIPswitch=1)/*检查检查P1.4口输入是否为高口输入是否为高*/inval=P1&0 x0F;/*读读P1口口03位位*/LEDgreen=0;/*置置P1.5口输出为低口输出为低*/ElseLEDgreen=1;/*置置P1.5口输出为高口输出为高*/P3=(P3&0 x0F)|inval;/*P1口口03位输出与位输出与P3口的口的03位相或输出位相或输出*/*274.3.4 存储器和并行口的访问存储器和并行口的访问返回目录4C51定义外部
36、并行口对对片片外外扩扩展展的的I/O口口,则则根根据据其其硬硬件件译译码码地地址址,将将其其看看作作片片外外数数据据存存储储器器的的一一个个单单元元,使使用用#define语语句句进进行行定定义义。用用指指针针定定义义,指指针针的的定定义义在在absacc.h头文件中。头文件中。*284.3.4 存储器和并行口的访问存储器和并行口的访问-#define语句定义片外语句定义片外I/O返回目录操作片外I/O口例例4-6 操作片外操作片外I/O口口#include “absacc.h”#define PA XBYTE0 xffec/*将将PA定定义义为为外外部部I/O口口,地址地址为为0 xffec
37、*/void main()PA=0 x5A;/*将数据将数据5AH写入地址为写入地址为0 xffec的存储单元或的存储单元或I/O端口端口*/在在头头文文件件或或程程序序中中对对片片内内/外外I/O口口进进行行定定义义以以后后,在在程程序序中中就就可可以以使使用用这这些些口口了了。定定义义口口地地址址的的目目的的是是为为了了便便于于C51编编译译器器按按MCS-51单单片片机机系系统统的的实实际际硬硬件件结结构构建建立立I/O口口变变量量名名与与其其实实际际地地址址的的联联系,以便程序员能用软件模拟系,以便程序员能用软件模拟MCS-51单片机系统的硬件操作。单片机系统的硬件操作。*294.3.
38、4 存储器和并行口的访问存储器和并行口的访问返回目录4.3.5 位地址访问C51编译器支持编译器支持bit数据类型,在数据类型,在C51程序中可以程序中可以使用使用bit数据类型对位地址进行操作。数据类型对位地址进行操作。C51对位变量的定义有对位变量的定义有3种方法:种方法:1用用bit关键字定义关键字定义C51位变量位变量2通过指定函数中参数为通过指定函数中参数为bit类变量类变量3定义位寻址存储区的位变量定义位寻址存储区的位变量*30-位变量定义位变量定义返回目录4.3.5 位地址访问1用用bit关键字定义关键字定义C51位变量位变量例如:例如:bit lock;/*将将lock定义为位
39、变量定义为位变量*/bit dirention;/*将将direction定义为位变量定义为位变量*/bit display;/*将将display定义为位变量定义为位变量*/注意:不能定义位变量指针;注意:不能定义位变量指针;也不能定义位变量数组。也不能定义位变量数组。*31-用用用用bitbit定义定义定义定义位变量位变量返回目录4.3.5 位地址访问例如:例如:bit fun(bit a1,bit a2)return(a1);*322 2通过指定函数中参数为通过指定函数中参数为通过指定函数中参数为通过指定函数中参数为bitbit类变量类变量类变量类变量-函数参数为位变量函数参数为位变量返
40、回目录-位寻址存储区的位变量定义 3定义位寻址存储区的位变量定义位寻址存储区的位变量C51编编译译器器允允许许数数据据类类型型为为bdata的的变变量量放放入入片片内内RAM可可位位寻寻址区中。址区中。例例如如:先先定定义义变变量量的的数数据据类类型型和和存存储储类类型型,然然后后使使用用sbit定定义义位变量。位变量。bdata int ibdata;/*ibdata定义为定义为bdata整型变量整型变量*/bdata char carry5;/*carry定义为定义为bdata字符数组字符数组*/sbit mybit0=ibdata0;/*mybit0定义为定义为ibdata的第的第0位位
41、*/sbit mybit15=ibdata15;/*mybit15定义为定义为ibdata的第的第15位位*/*334.3.5 位地址访问位地址访问返回目录*34-位寻址存储区的位变量定义位寻址存储区的位变量定义sbit arrybit07=carry07;/*arrybit07定义为定义为carry0的第的第7位位*/sbit arrybit37=carry37;/*arrybit37定义为定义为carry3的第的第7位位*/arrybit37=0;/*carry3的第的第7位赋值为位赋值为0(位寻址)(位寻址)*/carry0=A;/*carry0赋值为赋值为A(字节寻址)(字节寻址)*/
42、位位置置(操操作作符符)后后的的最最大大值值取取决决于于指指定定的的基基本本数数据据类类型型。对对于于char而而言言是是07;对对于于int而而言言是是015;对对于于long而而言是言是031。4.3.5 位地址访问位地址访问返回目录4.3.6 中断函数 中断服务程序在中断服务程序在C51程序中是以中断函数的形式出现程序中是以中断函数的形式出现的,的,中断函数的格式为:中断函数的格式为:void 函数名函数名()interrupt n using m 函数体语句函数体语句 interrupt是中断函数的关键字,是中断函数的关键字,n是中断号是中断号,MCS-51的中断号与中断源的对应关系如
43、表的中断号与中断源的对应关系如表5-5所示。所示。using是指定中断函数中选用工作寄存器组的关键字,是指定中断函数中选用工作寄存器组的关键字,m是是03范围的常数,若不用该选项,编译器会自动选择默范围的常数,若不用该选项,编译器会自动选择默认工作寄存器组(认工作寄存器组(0组寄存器)。组寄存器)。*35-中断函数的格式中断函数的格式返回目录表4-6 MCS-51中断源和中断的关系中断号中断号中断号中断号中断源中断源中断源中断源入口地址入口地址入口地址入口地址0 0外中断外中断0 00003H0003H1 1定时定时/计数器计数器0 0000BH000BH2 2外中断外中断1 10013H00
44、13H3 3定时定时/计数器计数器1 1001BH001BH4 4串行口中断串行口中断0023H0023H36*void 函数名函数名()interrupt n using m4.3.6 中断函数中断函数-中断函数的中断号中断函数的中断号返回目录例:例:void T0_srv(void)interrupt 1 using 1/*定时定时/计数器计数器0中断函数中断函数*/*定时定时/计数器计数器0中断服务程序中断服务程序*/*37中断号中断号中断号中断号中断源中断源中断源中断源入口地址入口地址入口地址入口地址0 0外中断外中断0 00003H0003H1 1定时定时/计数器计数器0 0000B
45、H000BH2 2外中断外中断1 10013H0013H3 3定时定时/计数器计数器1 1001BH001BH4 4串行口中断串行口中断0023H0023H4.3.6 中断函数中断函数-中断函数举例中断函数举例返回目录void 函数名()interrupt n using m编写中断函数要点:编写中断函数要点:1)中断函数不能进行参数传递。中断函数不能进行参数传递。2)中断函数没有返回值,应定义为中断函数没有返回值,应定义为void型。型。3)禁止对中断函数的直接调用。禁止对中断函数的直接调用。4)如果中断函数调用了其他函数,被调函数与中断如果中断函数调用了其他函数,被调函数与中断函数使用相同
46、的寄存器组。函数使用相同的寄存器组。5)中断函数最好写在程序尾部。中断函数最好写在程序尾部。*384.3.6 中断函数中断函数-编写中断函数要点编写中断函数要点返回目录4.4 C51结构化程序设计 C51程程序序是是一一种种结结构构化化程程序序,由由若若干干模模块块组组成成,每每个个模模块块中中包包含含若若干干个个基基本本结结构构,而而每每个个基基本本结结构构中中可以有若干条语句。可以有若干条语句。基本结构有三种:基本结构有三种:顺序结构顺序结构选择结构选择结构循环结构循环结构*39-三种结构程序三种结构程序返回目录 顺序结构是一种最基本、最简单的程序结构。在这种结顺序结构是一种最基本、最简单
47、的程序结构。在这种结构中,语句被依次逐条地顺序执行。构中,语句被依次逐条地顺序执行。例例4-7 一乘法程序,乘积放在外部一乘法程序,乘积放在外部RAM的的0000H单元。单元。void main()unsigned long xdata*p;/*设定设定p是指向外部是指向外部RAM区的区的unsigned long指针指针*/unsigned long x=12345,y=67890,mum;mum=x*y;p=0;/*p指向外部指向外部RAM区区0000H单元单元*/*p=mum;/*乘积存入外部乘积存入外部RAM区区0000H单元单元*/*404.4.1 顺序结构程序顺序结构程序-顺序结构
48、顺序结构返回目录4.4.2 选择结构程序 用用if语语句句可可以以构构成成选选择择结结构构。它它根根据据给给定定的的条条件件进进行行判判断断,以以决决定定执执行行某某个个分分支支程程序序段段。语语言言的的if语句有三种基本形式。语句有三种基本形式。1单分支语句单分支语句if(条件表达式条件表达式)语句组语句组;*41 其语义是:如果条件表达式的其语义是:如果条件表达式的其语义是:如果条件表达式的其语义是:如果条件表达式的值为真,则执行其后的语句组,否值为真,则执行其后的语句组,否值为真,则执行其后的语句组,否值为真,则执行其后的语句组,否则不执行其后的语句组。单分支语则不执行其后的语句组。单分
49、支语则不执行其后的语句组。单分支语则不执行其后的语句组。单分支语句执行过程可表示为图句执行过程可表示为图句执行过程可表示为图句执行过程可表示为图4-14-1所示。所示。所示。所示。-单分支结构单分支结构返回目录-单分支结构举例例例4-8 寻找两个数中的大数输出寻找两个数中的大数输出void main()unsigned xdata*p;unsigned a=35,b=78,max;max=a;if(maxb)max=a;elsemax=b;p=0;/*p指向外部指向外部RAM区区0000H单元单元*/*p=max;/*最大值存入外部最大值存入外部RAM区区0000H单元单元*/*444.4.2
50、 选择结构程序选择结构程序-双分支结构举例双分支结构举例返回目录3多分支语句多分支语句 当有多个分支选择时,可采用当有多个分支选择时,可采用if-else-if语句结构,其语句结构,其一般形式为:一般形式为:if(条件表达式条件表达式1)语句组语句组1;else if(条件表达式条件表达式2)语句组语句组2;else if(条件表达式条件表达式3)语句组语句组3;else if(条件表达式条件表达式n)语句组语句组n;else语句语句m;*454.4.2 选择结构程序选择结构程序-多分支结构多分支结构其语义是:依次判断条件其语义是:依次判断条件其语义是:依次判断条件其语义是:依次判断条件表达式