已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程,第4章单片机的c51语言,51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。,第4章单片机的c51语言,c51是为51系列单片机设计的一种c语言,其特点:,c51语言已成为51系列单片机程序开发的主流软件方法。,结构化语言,代码紧凑效率可与汇编语言媲美接近真实语言,程序可读性强易于调试、维护库函数丰富,编程工作量小产品开发周期短机器级控制能力,功能很强适合于嵌入式系统开发与汇编指令无关,易于掌握在单片机基础上上手快,第4章单片机的c51语言,c51与标准c语言对比相同之处:语法规则、程序结构、编程方法差异之处:数据结构(数据类型、存储模式)、中断处理(第5章)、端口扩展(第8章)本章教学思路:在标准c的基础上学习数据结构(数据类型、存储模式)掌握c51软件开发方法(keilvision3软件)在c51的基础上学习单片机i/o口应用(入门与进阶),第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程,程序由函数组成(一个主函数,或一个主函数和若干自定义函数);利用预处理命令对变量或函数进行集中定义或说明;函数和变量都需遵循先定义后使用的基本原则;主函数中的所有语句执行完毕,则程序结束。,第4章单片机的c51语言,c51与标准c程序结构完全相同,第4章单片机的c51语言,举例:led闪烁控制功能,loop:clrp1.0acalldel50setbp1.0sjmploopdel50:movr7,#200del1:movr6,#125del2:djnzr6,del2djnzr7,del1retend,第4章单片机的c51语言,预处理命令-,函数说明-,全局变量定义-,主函数-,自定义函数-,局部变量定义-,程序体,程序体-,第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程,第4章单片机的c51语言,1.c51的变量,在程序执行过程中,数值可以发生改变的量称为变量。,变量名与存储单元地址相对应,变量值与存储单元的内容相对应。,例如,在哈佛结构的存储空间中如何建立变量概念?,第4章单片机的c51语言,【存储种类】数据类型【存储类型】变量名,(标准c),(标准c),*括号项可以缺省(但需有缺省值),c51变量定义的四要素:,(c51特有),(标准c+c51),第4章单片机的c51语言,【存储种类】数据类型【存储类型】变量名,共有4个说明符:1、auto(自动型)变量的作用范围在定义它的函数体或语句块内。执行结束后,变量所占内存即被释放。2、extern(外部型)在一个源文件中被定义为外部型的变量,在其它源文件中需要通过extern说明方可使用。3、static(静态型)利用static可使变量定义所在的函数或语句块执行结束后,其分配的内存单元继续保留。4、register(寄存器型)将变量对应的储存单元指定为通用寄存器,以提高程序运行速度。,缺省存储种类为auto(自动)型变量,第4章单片机的c51语言,数据的不同格式叫做数据类型,*有符号数类型可以忽略signed标识符,标准c语言的数据类型,【存储种类】数据类型【存储类型】变量名,第4章单片机的c51语言,c51扩充数据类型:bit、sfr或sfr16、sbit,bit型,关键词bit用于定义一个位变量,语法规则:,bitbit_name=0或1;,例如:bitdoor=0;/定义一个叫door的位变量且初值为0,与标准c的变量定义相似:inta=5;/定义一个初值为5的整形变量a/语法规则:intint_name=常数;,第4章单片机的c51语言,sfr或sfr16型,关键词sfr或sfr16用于定义sfr字节地址变量,语法规则:sfr或sfr16sfr_name=字节地址常数;,51mcu中有21个sfr,如何定义与这些单元相关的变量?,第4章单片机的c51语言,例如,sfrp0=0 x80;/定义p0口地址80hsfrpcon=0 x87;/定义pcon地址87hsfr16dptr=0 x82;/定义dptr的低端地址82h,注意:c语言中十六进制整数是数值前加0 x或0x前缀,第4章单片机的c51语言,sbit型,部分sfr具有位地址,如何定义与这些位地址相关的变量?,绝对位地址,相对位地址,字节地址,两种位地址表达形式:相对位地址、绝对位地址,第4章单片机的c51语言,1)将sfr的绝对位地址定义为位变量名sbitbit_name=位地址常数;例如,sbitcy=0 xd7;,3)将sfr的相对位位置定义位变量名sbitbit_name=sfr_name位位置;例如,sbitcy=psw7;,2)将sfr的相对位地址定义为位变量名sbitbit_name=sfr字节地址位位置;例如,sbitcy=0 xd07;,关键词sbit用于定义sfr位地址变量,三种定义形式:,c51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit变量。,第4章单片机的c51语言,用一条预处理命令#include把这个头文件包含到c51程序中,无需重新定义即可直接使用它们的名称。,第4章单片机的c51语言,应用举例:,第4章单片机的c51语言,【存储种类】数据类型【存储类型】变量名,51单片机的3个逻辑存储空间:,片内数据存储器,片外数据存储器和程序存储器。,建立c51存储类型与存储空间的对应关系,第4章单片机的c51语言,c51的存储类型与存储空间对应关系表,编译模式,【存储种类】数据类型【存储类型】变量名,3种编译模式分别对应于3种缺省存储类型:,第4章单片机的c51语言,【存储种类】数据类型【存储类型】变量名,c51编译器可根据当前采取的编译模式自动认定默认的存储类型约定:若无特殊声明,一般均为“small编译模式”,变量名可以由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。,变量名具有字母大小写的敏感性,如sum和sum代表不同的变量。强调:头文件中定义的变量都是大写的,若程序采取小写变量则需要重新定义。,第4章单片机的c51语言,【存储种类】数据类型【存储类型】变量名,第4章单片机的c51语言,c51扩展的若干关键字一览表,变量名不得使用标准c语言和c51语言的关键字。,unsignedchardatasystem_status=0;,第4章单片机的c51语言,/定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。,数据结构定义举例,变量名为system_status,位与片内ram区,无符号字符型,自动型,初值为零,第4章单片机的c51语言,unsignedcharbdatastatus_byte;,unsignedintcodeunit_id2=0 x1234,0 x89ab;,staticcharm,n;,/定义status_byte为无符号字符型自动变量,该变量位于bdata区,/定义unit_id2为无符号整型自动变量,该变量位于code区中,是长度为2的数组,且初值为0 x1234和0 x89ab。,/定义m和n为2个位于data区中的有符号字符型静态变量。,2.c51的指针,第4章单片机的c51语言,标准c语言指针的一般定义形式为:数据类型*指针变量名=这表示p1是一个指向int型变量的指针变量,此时p1的值为int型变量a的地址,而a和p1两个变量都位于c编译器默认的内存区域中。,第4章单片机的c51语言,对于c51来讲,指针定义应包括以下信息:1)指针变量的存储类型(自身位于哪个存储区中)?2)被指向变量的数据类型和存储类型?,c51指针的一般定义形式:数据类型存储类型1*存储类型2变量名=char*ptr=,解:ptr是一个指向char型变量的指针,它本身位于small编译模式默认的data存储区里,此时它指向位于xdata存储区里的char型变量a的地址。,第4章单片机的c51语言,例2试解释下述定义的含义charxdataa=a;char*ptr=,解:以char*ptr形式定义的指针变量,既可指向位于xdata存储区的char型变量a的地址,也可指向位于idata存储区的char型变量b的地址(由赋值操作关系决定)。,前两句与例1相同charxdataa=a;char*ptr=,第4章单片机的c51语言,例3:试解释以下指针定义的含义charxdataa=a;charxdata*ptr=【解】ptr是位于data存储区且固定指向xdata存储区的char型变量的指针变量,此时ptr的值为变量a的地址(不能像例2那样再将idata存储区的char型变量b的地址赋予ptr)。,第4章单片机的c51语言,例4:试解释以下指针定义的含义charxdataa=a;charxdata*idataptr=【解】ptr是固定指向xdata存储区的char型变量的指针变量,它自身存放在idata存储区中,此时ptr指向位于xdata存储区中的char型变量a的地址。,第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程,第4章单片机的c51语言,c51语言编程可胜任单片机的基本测量与控制任务。对于某些特殊的i/o接口处理、中断处理、强调程序执行速度等场合,仍希望采用汇编程序。c51编译器提供了与汇编语言程序的接口规则,可方便地实现c51与汇0编语言程序的相互调用。本节仅讨论在c51中调用汇编函数和在c51中嵌入汇编代码两种方法。,概要,第4章单片机的c51语言,1.在c51中调用汇编程序,1)程序的寻址,main.c中调用的max函数,如何与汇编文件中的相应代码对应起来;,2)参数传递,main.c中传递给max()函数的参数a和b,存放在何处可使汇编程序能够获取到它们的值;,3)返回值传递,汇编语言计算得到的结果,存放在何处可使c语言程序能够获取到。,c51程序中调用汇编语言,需要解决三个问题:,第4章单片机的c51语言,举例:在两个数据中选出较大的数据,并赋值给变量c。其中,要求选数任务采用汇编子程序完成。,1)程序的寻址问题,第4章单片机的c51语言,通过在汇编文件中定义同名的“函数”来实现。,第4章单片机的c51语言,2)参数传递问题,第4章单片机的c51语言,3)返回值传递问题,2.c51中嵌入汇编代码,在c51函数内嵌入汇编代码,可以有三种不同方法。,方法一直接在函数体内的每个汇编语句前加“asm”预编译指令,例如:,第4章单片机的c51语言,第4章单片机的c51语言,方法二把asm作为关键字,后续汇编用大括号括起来即可,例如:,第4章单片机的c51语言,方法三在c模块内通过语句“#pragma”嵌入汇编代码,例如:,第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程,第4章单片机的c51语言,1.keil的编译环境vision3,keil是德国keilsoftware公司的51单片机开发软件包,包括c编译器、汇编编译器、连接器、库管理及仿真调试器,通过一个windows下的集成开发环境(uvisoin3)组合起来。,第4章单片机的c51语言,vision3的软件界面包括4大组成部分,即菜单工具栏,工程管理窗口,文件窗口和输出窗口。,第4章单片机的c51语言,vision3中共有11个下拉菜单。工具栏的位置和数量可以通过设置选定和移动。,第4章单片机的c51语言,工程管理窗口用于管理工程文件目录,它由5个子窗口组成:文件窗口,寄存器窗口,帮助窗口,函数窗口,模版窗口。,工程管理窗口:,第4章单片机的c51语言,输出窗口:输出窗口用于编译过程中的信息交互作用,由3个子窗口组成:编译窗口,命令窗口,搜寻窗口。,第4章单片机的c51语言,信息窗口:观察窗口(watch按压按键后为低电平。,实例1独立按键识别,【要求】采用独立按键方式实现下述功能:开机时led全熄,然后根据按键动作使相应灯亮,并将亮灯状态保持到按压其它键时为止。,第4章单片机的c51语言,独立按键每个按键都彼此独立地各占有一位i/o口线。特点是电路简单,但占用i/o口线较多。,第4章单片机的c51语言,按键的闭合电平为0,但led的驱动电平为1,故不能直接将p0口的状态送到p1口,而应使其先取反再送出;,为使按键抬起后led能保持先前的点亮状态,需要在按键未压下期间禁止向p2输出p0状态值。,【分析】,参考程序如下:,第4章单片机的c51语言,“取反”操作的优先级高于“与”操作,voidmain()charkey=0;/定义按键变量p2=0;/初始状态为灯全灭while(1)key=p0/有按键动作时,p0状态值送p2,第4章单片机的c51语言,编程界面和运行界面分别如下图,第4章单片机的c51语言,实例1运行效果,实例2键控流水灯,第4章单片机的c51语言,【要求】k1为“启动键”,首次按压k1可产生“自下向上”的流水灯运动;k2为“停止键”,按压k2可终止流水灯的运动;k3和k4为“方向键”,分别产生“自上向下”和“自下向上”运动。,k1k2k3k4,第4章单片机的c51语言,思路分析:根据键值修改标志位,根据标志位控制灯状态,总体关系流程图,第4章单片机的c51语言,键值:按压k1xxxx1110b按压k2xxxx1101b按压k3xxxx1011b按压k4xxxx0111b无按键xxxx1111b,按键动作判断(p0,for(i=0;i=0;i-)p2=ledi;/移动,第4章单片机的c51语言,第4章单片机的c51语言,实例2原理图与程序界面图,程序运行效果,视频,第4章单片机的c51语言,实例3混合编程,将实例2中c51的delay函数改用汇编语言实现,并完成系统的混合编程。,程序说明,分别编写汇编语言(delay.asm)与c51语言(实例3.c)两个程序文件,并将其添加到keil的同一项目中。,第4章单片机的c51语言,c51部分与实例2基本相同,delay函数声明,第4章单片机的c51语言,delay.asm,与实例3.c文件中函数delay同名的子程序,汇编子程序的头部格式,;延时处理函数(汇编语言)public_delaydesegmentcodersegde_delay:movr0,#225del2:djnzr0,del2djnzr7,_delayretend,第4章单片机的c51语言,4.5.1.2led数码管原理与编程,led显示元件人机交互输出设备,其作用是指示中间运行结果与运行状态。,第4章单片机的c51语言,com为公共端,共阳极led,共阴极led,引脚配置,七段式led显示器,(7-segmentdisplay),不同显示字符采需用不同led组合关系实现(显示码,字模),第4章单片机的c51语言,以共阴极为例,部分字符的显示码(字模)为:,七段led数码管的标准显示字符为09,af,显示字符,显示码(共阴),其它字符:,00111000b=0 x38,“l”字符的显示码,“h”字符的显示码,01110110b=0 x76,第4章单片机的c51语言,实例4led数码管显示,在p0口连接一个共阴极数码管,使之循环显示09数字。,分析:将显示码循环输出到p0口即可实现循环显示。但由于数字09的显示段码没有规律可循,需要采取查表方式进行操作:,第4章单片机的c51语言,将显示码按序存放在一个数组中,顺序号与代表的显示字符相对应。(如,charled_mod=x1,x2,.,xn)通过循环变量指定待送出的数组元素,第4章单片机的c51语言,参考程序,第4章单片机的c51语言,视频,第4章单片机的c51语言,实例5计数显示器,统计按键次数并以十进制形式显示,按键次数大于99后重新由0开始计数。,个位led接p2口,十位led接p0口(共阴型),按钮接p3.7口线,按压时为0电平,第4章单片机的c51语言,编程分析:,问题:按键压下时可能被连续计数,第4章单片机的c51语言,如何避免连续计数?,第4章单片机的c51语言,初始化:p2=p0=table0;,解决办法:取模运算(%10)个位整除10运算(/10)十位,p2=tablecount%10;,p0=tablecount/10;,显示输出:如何将计数值拆成两个独立的数?,第4章单片机的c51语言,参考程序,程序运行效果,第4章单片机的c51语言,第4章单片机的c51语言,4.1c51的程序结构4.2c51的数据结构4.3c51与汇编语言的混合编程4.4c51仿真开发环境4.5c51初步应用编程4.5.1i/o端口的简单应用4.5.2i/o端口的进阶实践,第4章单片机的c51语言,4.5.2.1数码管动态显示原理与编程,两种显示接口:静态显示接口和动态显示接口,静态显示接口:一个数码管的引脚独立占据一根i/o口线。优点:被显示数据只要送入并行口后就不再需要cpu干预,因而显示效果稳定。缺点:占用资源较多,第4章单片机的c51语言,动态显示接口:所有数码管的段码线对应并联接在一个并行口上,而每位数码管的公共端分别由一位i/o线控制;由并口输出的显示码可被所有数码管收到,但只有满足导通条件的数码管可以被驱动。,第4章单片机的c51语言,工作原理:采用快速切换方式(如10ms),每一时刻只有一只数码管导通工作。利用视力暂留特性,可获得连续显示效果。优点:占用资源较少缺点:占用机时较多(需要cpu随时刷新显示值),第4章单片机的c51语言,实例6数码管动态显示,采用共阴极动态led显示原理,实现如下功能:sw1向下拨时显示字符“l2”,向上拨时显示字符“h3”。,第4章单片机的c51语言,分析:proteus中的双联led数码管相当于两个并联的数码管。,7seg-mpx2-cc-blue,blue,2digit,7-segmentcathodedisplay,第4章单片机的c51语言,a-g“0 x38”,1#“0”,2#“1”,a-g“0 x5b”,1#“1”,2#“0”,p2led_mode0,p3xxxxxx10b=2p2led_mode1,p3xxxxxx01b=1,led_mode=0 x38,0 x5b,第4章单片机的c51语言,如果不考虑开关switch,动态显示“l2”的程序可以如下:,;,/led“指针”,/显示字模,第4章单片机的c51语言,a-g“0 x76”,1#“0”,2#“1”,a-g“0 x4f”,1#“1”,2#“0”,字符数组led_mode=0 x38,0 x5b,0 x76,0 x4f,开关状态变量switch_sta,复合指针变量led_point+switch_sta,完整的主函数,第4章单片机的c51语言,#includecharled_mod=0 x38,0 x5b,0 x76,0 x4f;voiddelay(unsignedinttime);sbitp17=p17;voidmain()charled_point=0,switch_sta=0;while(1)if(p17=1)switch_sta=2;elseswitch_sta=0;p3=2-led_point;p2=led_modswitch_sta+led_point;led_point=1-led_point;delay(30);,编程界面,第4章单片机的c51语言,第4章单片机的c51语言,运行效果图,第4章单片机的c51语言,4.5.2.2行列式键盘原理与编程,独立式键盘的电路简单,易于编程,但占用的i/o口线较多,当需要较多按键时可能产生i/o资源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 废胶再生工岗前竞争分析考核试卷含答案
- 平板显示膜涂布工操作技能知识考核试卷含答案
- 旅游鞋制作工变革管理知识考核试卷含答案
- 工业CT扫描内部结构成像标准
- 铸铁机工岗位设备技术规程
- 有机介质电容器纸、膜切割工班组评比知识考核试卷含答案
- 金属玩具制作工岗前客户服务考核试卷含答案
- 轧管工安全意识强化能力考核试卷含答案
- 电动轮自卸车电气装配工风险识别模拟考核试卷含答案
- 气站事故应急处理预案(3篇)
- GA 139-2009灭火器箱
- 火力发电工程建设标准强制性条文执行表格锅炉分册
- 中国地质大学武汉软件工程专业学位研究生实践手册
- 《投资银行》或《资本运营》风险投资业务课件
- DBJ50T-163-2021 既有公共建筑绿色改造技术标准 清晰正式版
- 低阶煤、褐煤干法制备气化用高浓度水煤浆技术
- GB∕T 37458-2019 城郊干道交通安全评价指南
- 盘锦浩业芳烃抽提装置操作规程
- DB33_T 2301-2020番茄水肥一体化技术规程(高清正版)
- 路面病害处理专项施工组织方案
- 农药基础知识培训
评论
0/150
提交评论