书签 分享 收藏 举报 版权申诉 / 86
上传文档赚钱

类型《微控制器原理及应用技术》课件第6章.ppt

  • 上传人(卖家):momomo
  • 文档编号:8083544
  • 上传时间:2024-11-23
  • 格式:PPT
  • 页数:86
  • 大小:1.19MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《微控制器原理及应用技术》课件第6章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    微控制器原理及应用技术 控制器 原理 应用技术 课件
    资源描述:

    1、第6章 C51语言程序设计基础6.1 C51语言基础语言基础6.2 C51的函数和数组的函数和数组6.3 C51的编程规范的编程规范 6.4 C51的基本运用的基本运用教学提示:本章在汇编语言基础上讲解C51的特点,介绍了C51的数据类型、常量、常用运算符、表达式、基本语句及C51函数和数组。在此基础上,采用C51进行单片机简单功能的应用,力求尽快实现从汇编语言到C51的过渡。教学要求:在单片机上采用C语言开发已成为一种趋势。通过本章的学习,读者可了解C51与普通C语言及汇编语言的不同,并学会利用它进行单片机开发,这是进行后续章节学习重要的一步。在单片机的开发中,以前基本上是使用汇编语言,也有

    2、使用BASIC语言进行开发的。从90年代中期以后,使用C语言开发单片机已成为一种流行的趋势。它具有使用方便、编程效率高及仿真调试容易等突出特点。6.1 C51语言基础语言基础C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,能产生高效率的紧凑代码。C语言含有许多本应由汇编语言实现的机器级函数,与汇编语言相比,C语言又有如下优点:不需要了解51单片机的指令系统,仅仅要求对存储器结构有初步了解;程序有规范的结构,可分为不同的函数,使得程序结构化;语言简洁、紧凑,使用方便、灵活。运算符极其丰富;提供的库包含许多标准子程序,具有较强的数据处理能力;编程和程序调试效率高;程序易于模块化,便

    3、于移植。C51的版本很多,下面就以德国KeilSoftware公司专门为8051单片机开发的KeilC51编译器为例,对MCS51单片机如何使用C51进行编程做一个简单的介绍。6.1.1 C51程序创建过程1.C51程序的创建过程第一步:创建C51工程文件,如图6.1所示。点击projectnewproject输入工程名myproject,如图6.2所示。保存文件选择器件Atmel,如图6.3所示。AT89C51确定,如图6.4所示。图6.1 创建C51工程文件 图6.2 输入工程名 图6.3 选择器件 图6.4 点击确定 第二步:创建源(.c)文件。点击FilenewFile,如图6.5所示

    4、。点击保存输入源文件(.c)myproject.c,如图6.6所示。点击Target1SourceGroup1点击右键AddFilestoGroupSourceGroup1添加(.c),如图6.7所示。第三步:对生成文件进行设置。鼠标放于Target1右击OptionsforTargetTarget1,如图6.8所示。TargetOutputCreateHEXFileHEXFormat:确定,如图6.9所示。图6.5 创建文件 图6.6 输入源文件图6.7 添加 图6.8 OptionsforTargetTarget1图6.9 点击确定 2.C51编程时常用到的头文件absacc.h:包含允许

    5、直接访问8051不同存储区的宏定义。ctype.h:字符转换和分类程序。math.h:数学程序。stdlib.h:存储区分配程序。assert.h:文件定义assert宏,可以用来建立程序的测试条件。reg52.h:52的特殊寄存器。intrins.h:包含指示编译器产生嵌入式固有代码的程序的原型。6.1.2 存储空间定义在C51中,变量存储空间有以下两种定义方式:(1)数据类型 存储器类型 变量名(2)存储器类型 数据类型 变量名C51内部只有128B的RAM,因而必须根据需要指定各种变量的存放位置。C51定义的存储器类型与存储空间如表6.1所示。表6.1 C51定义的存储器类型与存储空间6

    6、.1.3 C51数据类型C语言数据类型包括:基本类型、构造类型、指针类型和空类型。其中,基本类型包括位(bit)、字符(char)、整型(int)、短整型(short)、长整型(long)、浮点型(float)以及双精度浮点型(double);构造类型包括数组(array)、结构体(struct)、共用体(union)和枚举类型(enum)。对于51单片机编程而言,支持的数据类型是和编译器有关的,比如在C51编译器中整型(int)和短整型(short)相同,浮点型(float)和双精度浮点型(double)相同。表6.2列出了KeilC51编译器所支持的数据类型。表6.2 C51数据类型 6.

    7、1.4 C51的常量C语言中的数据有常量与变量之分。在程序运行过程中,值不能改变的量称为常量,而变量是可以在程序运行过程中不断变化的量。C51常量有五种类型:位型常量、整型常量、浮点型常量、字符型常量和字符串型常量。(1)位型常量:位型常量是1位二进制值。(2)整型常量:可以表示为十进制,如17,0,33等。若表示为十六进制,则以0 x开头,如0 x2A,0 x5D等。长整型就在数字后面加字幕L,如:104L,034L等。表6.3 整型常量表(3)浮点型常量:浮点型常量可表示为十进制和指数形式。十进制由数字和小数点组成,如:0.8878,334.5等;指数表示形式为:数字.数字e数字,方括号“

    8、”中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如125e3,7e9,3.0e3等。在C51中浮点型常量默认为float型。对于绝对值小于1的浮点型常量,其小数点前的零可以省略。例如,0.34可以写成.34,0.021E3可以写成.021E3。(4)字符型常量:字符型常量是单引号内的字符,如a,d等,用单个字符表示,用一对单引号括起来,其中单引号只起定界作用,并不表示字符。转义字符用于标示ASCII码字符集中的格式控制字符和特定功能字符。这些字符不能打印,例如:(),(“),()等。常用的转义字符如表6.4所示。(5)字符串型常量:字符串型常量由双引号内的字符组成,如“ER

    9、ROR”,“OK”等。当双引号内没有字符时,为空字符串。在C语言中字符串常量是作为字符类型数据来处理的。在存储字符串时,系统会在字符串尾部加上转义字符0,作为该字符串的结束符。表6.4 常用的转义字符 6.1.5 C51常用的运算符运算符表示特定的算术或逻辑操作的符号。C语言中的运算符和表达式数量很多,这在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。这也是C语言的主要特点之一。C51语言有算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符、条件运算符和指针运算符7类运算符。1.算术运算符算术运算符用于各类数值运算,包括加(),减(),乘(),除()、求余或模运算(%

    10、),自增(),自减()7种(见表6.5)。用算术运算符和括号将运算对象连接起来的式子称为算术表达式。其中,运算对象包括常量、变量、函数、数组、结构等。表6.5 算术运算符表 2.逻辑运算符逻辑运算符用于逻辑运算,包括逻辑与(&)、逻辑或(|)和逻辑非(!)3种。(1)“!”运算符:进行逻辑非运算。(2)“|”运算符:进行逻辑或运算。(3)“&”运算符:进行逻辑与运算。运算符“&”和“|”符号是双目运算符,要求有两个运算对象,而“!”运算符为单目运算符,只要求有一个运算对象。“!”运算符的优先级高于算术运算符,算术运算符优先级高于关系运算符,关系运算符优先级高于逻辑运算符“&”和“|”,“&”和

    11、“|”的优先级高于赋值运算符。用逻辑运算符将关系表达式或逻辑量连接起来的式子成为逻辑表达式,逻辑表达式的结合性为自左向右,其值应是一个逻辑的真或假。逻辑表达式的值和关系表达式的值相同,以1代表真,以0代表假。3.关系运算符关系运算符用于比较运算,包括大于()、小于()、小于等于()、等于()和不等于(!)6种(见表6.6)。前四种优先级相同,后两种优先级相同,前四种的优先级高于后两种,关系运算符的优先级低于算术运算符,但高于赋值运算符。表6.6 关系运算符表 4.位运算符位运算符是用来进行二进制位运算的运算符,包括逻辑位运算符和移位运算符(见表6.7)。逻辑位运算符包括位与(&)、位或(|)、

    12、位取反()和位异或();移位运算符包括位左移()。除了位取反()是单目运算符,其它位运算符均为双目运算符。5.赋值运算符赋值运算符用于赋值运算,分为简单赋值()、复合算术赋值(,*,/,%)和复合位运算赋值(&,|,)。表6.7 位运算符表 6.条件运算符条件运算符是一个三目运算符。唯一的三目运算是条件运算,条件运算符是“?:”,条件表达式的形式为:?:其含义为:若的值为“真”,则条件表达式取的值;否则,取的值。7.指针运算符指针运算符用于取内容(*)和取地址(&)两种运算。6.1.6 C51的表达式表达式由操作数和运算符组成。C51主要有算术运算表达式、赋值表达式、逗号表达式、关系表达式和逻

    13、辑表达式5种表达式。1.算术运算表达式算术运算表达式是指由算术运算符将操作数连接起来的式子,可以使用括号。例如:(ab)*c2.赋值表达式赋值表达式是指由赋值运算符“”将一个变量和一个常量或表达式连接起来的式子。例如:a23;cab3.逗号表达式逗号表达式是指由逗号运算符“,”和括号将多个表达式连接起来的式子。一般形式为:表达式1,表达式2,表达式n。4.关系表达式关系表达式是指将两个表达式用关系运算符连接起来的式子,关系运算又称比较运算。例如:xy;x!y5.逻辑表达式逻辑表达式是指将两个表达式用逻辑运算符连接起来的式子。逻辑表达式中操作的对象可以是任意类型的数据,其值为逻辑值“真”或“假”

    14、。6.1.7 C51的基本语句C51的基本语句与C语言的基本语句相同,有以下几种:if(选择语句),while(循环语句),for(循环语句),switch/case(分支语句),dowhile(循环语句)。6.2.1 函数的定义1.函数在C51编程语言中,一般函数的定义形式如下:类型说明符 函数名(形式参数列表)语句1;语句2;6.2 C51的函数和数组的函数和数组 语句n;return语句;注:形式参数可以没有,即该函数可为无形式参数的函数。2.中断函数C51中断函数的形式:void函数名()interrupt中断号using工作组 中断服务程序内容 注意:(1)中断不能返回任何值,所以前

    15、面是void;(2)函数名可以自己起,但不要与C语言的关键字相同;(3)中断函数不带任何参数,所以函数名后面的()内是空的;(4)中断号是指单片机的几个中断源的序号。这个序号是单片机识别不同中断的唯一标志,所以一定要写正确;(5)后面的using工作组是指这个中断使用单片机内存中4个工作寄存器的哪一组,C51编译后会自动分配工作组,因此using工作组通常省略不写。6.2.2 数组的定义1.一维数组的定义一维数组的定义形式如下:数据类型 数组名整型常量表达式(1)数据类型:规定数组元素的数据类型。(2)数组名:表示数组的名称。(3)整型常量表达式:规定了数组中包含元素的个数。2.多维数组的定义

    16、多维数组的定义形式如下:数据类型 数组名整型常量表达式1整型常量表达式n学习C51编程语言,应该按照一定的规范培养良好的编程习惯,良好的编程习惯有助于编程人员理清思路,整理和理解代码,有利于代码的优化。6.3 C51的编程规范的编程规范6.3.1 注释注释是为了解释程序代码的作用,本身并不参与编译链接。在C51中,注释有两种:一种用“/”用来注释一行;另一种用“/*/”来对程序的一部分进行注释。6.3.2 命名在C51程序设计时,经常会用到自定义的一些函数或者变量,这些自定义的函数或变量应当遵循能够反映函数或变量功能的原则。通常在表示数据的变量前面加上前缀,当看到变量时能够很容易看出其数据类型

    17、。例如:变量ucdata,前缀uc表示unsignedchar。注:命名时不要和系统的标示符或关键字发生冲突。6.3.3 格式理论上,main()函数可以放在任何位置,但是为了便于程序的阅读,main()函数尽量靠前。其顺序为:头文件,自定义函数或变量的声明,main()函数,自定义函数。对于源程序文件,不同结构之间要留空行,以此来区分不同的结构,使程序看起来条理清晰。要求“”“”配对对齐。程序代码使用Table键实现缩进和对齐。例6.1 数据块传送。例:将片内40H60H单元中的内容送到以3000H为首地址的存储区。程序代码:#include#include6.4 C51的基本运用的基本运用

    18、#defineucharunsignedchar#defineuintunsignedintuchardata*data_in;uintxdata*data_out;voidmain()uchari;data_in0 x40;data_out0 x3000;for(i0;i32;i)*data_out*data_in;data_out;data_in;例6.2 排序。例:任意给几个数,运用冒泡法排序,然后将排序结果通过LED显示出来,其电路图如图6.10所示。图6.10 排序的电路图 程序代码:#include#defineucharunsignedcharuchar*Min_to_max(u

    19、chars,ucharn);/从小到大排序voiddelay(ucharx);/延时xmsvoidLED(uchars,ucharn);/LED显示ucharchange(ucharx);/将十进制数字转化的LED显示对应的数字voidmain()uchara64,1,5,2,7,8;/任意已知的6个数 uchar*p;pMin_to_max(a,6);LED(p,6);uchar*Min_to_max(uchars,ucharn)uchari,j,t;for(i0;in;i)for(j0;jsj1)tsj;sjsj1;sj1t;returns;voiddelay(ucharx)uchari0

    20、;while(x)for(i0;i125;i);voidLED(uchars,ucharn)uchari;for(i0;in;i)P2change(si);delay(250);delay(250);ucharchange(ucharx)switch(x)case0:return0 x03;break;case1:return0 xf3;break;case2:return0 x25;break;case3:return0 x0d;break;case4:return0 x99;break;case5:return0 x49;break;case6:return0 x41;break;case

    21、7:return0 x1f;break;case8:return0 x01;break;case9:return0 x19;break;例6.3 跑马灯程序。例:共8只LED灯,连成一排,要求:相隔0.5s跑马灯跑向下一个位置,依次循环,且始终保持8个LED灯中只有一个灯在跑,其电路图如图6.11所示。图6.11 跑马灯的电路图 程序代码:#include#defineucharunsignedcharvoiddelay(ucharx);/延时xmsvoidlight(void);/实现跑马灯相隔0.5s跑向下一位置voidmain()light();voidlight(void)uchari

    22、,tmp;while(1)tmp0 xfe;for(i0;i8;i)P1tmp;tmp(tmp1)|1;delay(250);delay(250);voiddelay(ucharx)uchari;while(x)for(i0;i125;i);例6.4 中断实例。例:利用T0(或T1)定时,外部中断INT0(或INT1)实现跑马灯的跑与停,其电路图如图6.12所示。图6.12 中断的电路图 程序代码:#include#defineucharunsignedchar voidinit(void);/初始化T1中断,INT1中断 uchartmp;voidmain()init();voidinit(

    23、void)tmp0 xfe;TMOD0 x10;/T1的方式1 TH10 xff;TL10 x00;ET10;EA1;TR11;IT11;/外部中断1采用边沿触发 EX11;voidt1()interrupt3 if(tmp0 xff)tmp0 xfe;P1tmp;else P1tmp;tmp(tmp1)|1;TH10 xff;TL10 x00;voidrupt()interrupt2 /通过控制T1中断的开与断来控制跑马灯的跑与停 ET1!ET1;例6.5 利用T0或T1实现周期为0.4ms,占空比为1 2的方波,如图6.13所示。程序代码:#include#defineucharunsig

    24、nedcharsbitP1_0P10;voidinit(void);voidmain()图6.13 方波 init();voidinit(void)TMOD0 x20;TL10 x38;TR11;ET11;EA1;voidtime1(void)interrupt3 P1_0!P1_0;例6.6 键盘使用实例。例:按下键盘的任意一个键,确定并显示按键位置,其电路图如图6.14所示。图6.14 键盘的电路图 程序代码:#include#defineucharunsignedcharvoiddelay(void);ucharkeyscan(void);ucharinput(void);voidmai

    25、n()while(1)P2input();voiddelay(void)inti,j;for(i0;i10;i)for(j0;j50;j);ucharkeyscan(void)ucharscancode,tmpcode;P10 xf0;if(P1&0 xf0)!0 xf0)delay();if(P1&0 xf0)!0 xf0)scancode0 xfe;while(scancode&0 x10)!0)P1scancode;if(P1&0 xf0)!0 xf0)tmpcode(P1&0 xf0)|0 x0f;return(scancode)(tmpcode);else scancode(scan

    26、code1)|0 x01;else return0;ucharinput(void)ucharkey;while(1)keykeyscan();switch(key)case0 x11:return0 x03;break;case0 x21:return0 xf3;break;case0 x41:return0 x25;break;case0 x81:return0 x0d;break;case0 x12:return0 x99;break;case0 x22:return0 x49;break;case0 x42:return0 x41;break;case0 x82:return0 x1f;break;case0 x14:return0 x01;break;case0 x24:return0 x19;break;case0 x44:return0 x11;break;case0 x84:return0 xc1;break;case0 x18:return0 x63;break;case0 x28:return0 x85;break;case0 x48:return0 x61;break;case0 x88:return0 x71;break;微控制器原理及应用

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《微控制器原理及应用技术》课件第6章.ppt
    链接地址:https://www.163wenku.com/p-8083544.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库