单片机的C51语言.ppt

上传人:夺命阿水 文档编号:246791 上传时间:2023-03-22 格式:PPT 页数:109 大小:5.40MB
返回 下载 相关 举报
单片机的C51语言.ppt_第1页
第1页 / 共109页
单片机的C51语言.ppt_第2页
第2页 / 共109页
单片机的C51语言.ppt_第3页
第3页 / 共109页
单片机的C51语言.ppt_第4页
第4页 / 共109页
单片机的C51语言.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《单片机的C51语言.ppt》由会员分享,可在线阅读,更多相关《单片机的C51语言.ppt(109页珍藏版)》请在课桌文档上搜索。

1、单片机的C51语言,1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 4 C51初步应用编程,51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。,C51是为51系列单片机设计的一种C语言,其特点:,C51语言已成为51系列单片机程序开发的主流软件方法。,结构化语言,代码紧凑效率可与汇编语言媲美接近真实语言,程序可读性强易于调试、维护库函数丰富,编程工作量小产品开发周期短机器级控制能力,功能很强适合于嵌入式系统开发与汇编指令无关,易于掌握在单片机基础上上手快,C51与标准C语言对比相同之处:语法规则、程序结构、编程方法差异之处:数据类型

2、、存储模式、中断处理教学安排:介绍C51语言的数据结构及C51编程手段;介绍单片机I/O口的初步应用及C51编程方法。,1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 4 C51初步应用编程,C51单片机软件系统结构,Project(可包含若干程序文件),Keil C51(Vionsion3),Main(函数),File_1(*.c),Func_k(函数),.,File_n(*.*),Func_1(函数),Func_n(函数),.,用户编程,编译系统,程序由函数组成(一个主函数,或一个主函数和若干自定义函数);利用预处理命令对变量或函数进行集中定义或说明;函数和变量都需遵循

3、先定义后使用的基本原则;主函数中的所有语句执行完毕,则程序结束。,C51与标准C程序结构完全相同,举例:LED闪烁控制功能,预处理命令-,函数说明-,全局变量定义-,主函数-,调用函数-,局部变量定义-,程序体,程序体-,1 C51的程序结构 2 C51的数据结构 1.C51的变量 2.C51的指针3 C51仿真开发环境 4 C51初步应用编程,在程序执行过程中,数值可以发生改变的量称为变量。,变量名与存储单元地址相对应,变量值与存储单元的内容相对应。,例如,在哈佛结构的存储空间中如何建立变量概念?,【存储种类】数据类型【存储类型】变量名,*方括号项可以缺省,C51变量定义的四个要素:,自动变

4、量(auto)在函数内部定义的变量,退出函数后,分配给该变量的存储单元即自行消失(局部变量)。,【存储种类】数据类型【存储类型】变量名,外部变量(extern)在函数外部定义的变量,可始终保持变量的数值(全局变量)。【强调】一个外部变量只能被定义一次,在定义文件之外的地方使用时需用extern进行声明。,静态变量(static)静态局部变量/静态全局变量 寄存器变量(register)以寄存器为存储空间的变量,*若省略存储种类选项,则变量默认为自动变量,数据的不同格式叫做数据类型,*有符号数类型可以忽略signed标识符,标准C语言的数据类型,【存储种类】数据类型【存储类型】变量名,C51扩充

5、数据类型:bit、sfr或sfr16、sbit,bit 型,用bit 定义一个位变量,语法规则如下:,bit bit_name=常数01;,例如:bit door=0;/定义一个叫door的变量且初值为0,与标准C的变量定义及初始化用法是一致的,例如:int a=5;unsigned char sum=0 x10;,Sfr或sfr16型,sfr定义特殊功能寄存器SFR,语法规则如下:sfr 或 sfr16 sfr_name=字节地址常数;,例如,sfr P0=0 x80;/定义P0口地址80Hsfr PCON=0 x87;/定义PCON地址87H sfr16 DPTR=0 x82;/定义DPT

6、R的低端地址82H,sbit型,将SFR范围内的位地址(0 x800 xFF)定义为位变量,1)sbit bit_name=位地址常数;将位于SFR字节地址内的绝对位地址定义为位变量名。例如,sbit CY=0 xD7;,2)sbit bit_name=sfr_name 位位置;将已有定义的SFR的07位定义为位变量名。例如:sfr PSW=0 xD0;sbit CY=PSW7;,3)sbit bit_name=sfr字节地址 位位置;将SFR字节地址的相对位地址定义为位变量名。例如:sbit CY=0 xD07;,C51编译器在头文件“reg51.h”中定义了全部sfr/sfr16和sbit

7、变量。,用一条预处理命令#include 把这个头文件包含到C51程序中,无需重定义即可直接使用它们的名称。,应用举例:,51系列单片机有三个逻辑存储空间:,【存储种类】数据类型【存储类型】变量名,片内数据存储器,片外数据存储器和程序存储器。,建立C51存储类型与存储空间的对应关系,data区,xdata区,code区,bdata区,C51的存储类型与存储空间对应关系表,C51编译器指定了三种默认存储类型:,【存储种类】数据类型【存储类型】变量名,C51编译器的三种编译模式:小编译模式(SMALL)、紧凑编译模式(COMPACT)和大编译模式(LARGE),变量名可以由字母、数字和下划线三种字

8、符组成,且第一个字符必须为字母或下划线,变量名长度随编译系统而定。,变量名具有字母大小写的敏感性,如SUM和sum代表不同的变量。强调:头文件中定义的变量都是大写的,【存储种类】数据类型【存储类型】变量名,C51扩展的若干关键字一览表,变量名不得使用标准C语言和C51语言的关键字。,unsigned char data system_status=0;,/定义system_status为无符号字符型自动变量,该变量位于data区中且初值为0。,数据结构定义举例,变量名为system_status,位与片内RAM区,无符号字符型,自动型,初值为零,unsigned char bdata stat

9、us_byte;,unsigned int code unit_id2=0 x1234,0 x89ab;,static char m,n;,/定义status_byte为无符号字符型自动变量,该变量位于bdata区,/定义unit_id2为无符号整型自动变量,该变量位于code区中,是长度为2的数组,且初值为0 x1234和0 x89ab。,/定义m和n为2个位于data区中的有符号字符型静态变量。,1 C51的程序结构 2 C51的数据结构 1.C51的变量 2.C51的指针3 C51与汇编语言的混合编程 4 C51仿真开发环境 5 C51初步应用编程,C51的指针与标准C的指针几乎是一样的

10、,都可以简单理解为“存储地址的变量”,例如:,2.C51的指针,int*b=,int a;/定义一个整型变量a,/定义一个整型指针变量b,其初值为a的地址,在C51里定义指针,还需要额外指明两个问题:1)指针变量自身位于哪个存储区域;2)该指针的值代表的是哪个存储区域里的地址。,以SMALL编译模式(默认data区存储类型)为例:,例1 char xdata a=A;/定义xdata区里的变量a,初值A char*ptr=,解:ptr是一个char型的指针变量,它本身位于data存储区,它的初值是位于xdata区里变量a的地址。,【存储种类】数据类型【存储类型】变量名,解:unsigned c

11、har idata a=A;,例2 若ptr是一个unsigned char型指针变量,它本身位于idata存储区,它的初值是位于idata存储区里的unsigned char型自动变量a(初值为A)的地址。试据此完成相关变量的定义和初始化。,unsigned char*idata ptr=,C51提供两种指针:通用指针和具体指针通用指针 占用3字节 而对于data idata pdata 数据类型,实际只需要2字节。通用指针代码比具体指针代码的执行速度要慢。具体指针 使用者规定指针指向存储区段的指针:Char data*str;指针指向data区中的char型数据 1字节 int xdata

12、*prt;指针指向xdata区中的int型数据 2字节 使用具体指针可节省存储空间,代码执行速度快。,1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 1、Keil的编译环境 Vision3 2、Vision3的基本使用方法4 C51初步应用编程,Keil是德国Keil Software公司的51单片机开发软件包,包括C编译器、宏汇编、连接器、库管理及仿真调试器,通过一个集成开发环境(uVisoin3)组合起来。,Vision3的软件界面包括四大组成部分,即菜单工具栏,项目管理窗口,文件窗口和输出窗口。,Vision3中共有11个下拉菜单。工具栏的位置和数量可以通过设置选定和

13、移动。,项目管理窗口用于管理项目文件目录,它由五个子窗口组成,可以通过子窗口下方的标签进行切换,它们分别是:文件窗口,寄存器窗口,帮助窗口,函数窗口,模版窗口。,项目管理窗口:,输出窗口:输出窗口用于编译过程中的信息交互作用,由三个子窗口组成,可以通过子窗口下方的标签进行切换,它们分别是:编译窗口,命令窗口,搜寻窗口。,信息窗口:观察窗口(Watch&Call Statck Windows)输出窗口(Output Windows)存储器窗口(Memory Window)反汇编窗口(Dissambly Window)串行窗口(Serial Window),1 C51的程序结构 2 C51的数据结

14、构 3 C51仿真开发环境 1、Keil的编译环境 Vision3 2、Vision3的基本使用方法4 C51初步应用编程,输入源程序建立工程对工程进行详细设置 将源程序变为目标代码运行调试。,使用方法,(1)源文件的建立点击新建文件按钮打开一个新的文本编缉窗口,输入程序源代码,以*.c保存该文件。,(2)建立工程文件,点击“Project-New Project”菜单,在编缉框中输入一个名字(设为exam1),无需扩展名。,选择目标CPU(Intel系列的80C51BH),添加源程序(右击“Source Group1”点击“Add file to Group”Source Group1”添加

15、生成的.c文件),(3)工程设置,右击Project 窗口的Target 1选择“Project-Option for target target1”工程设置对话框,设置对话框中的OutPut 页面(勾选“Creat Hex file”),(4)编译、连接产生目标代码(hex文件),点击F7或工具按钮启动编译、连接功能。,完成后将在命令窗口中显示编译结果,若有语法错误,双击出错提示可指出错误所在行号,(5)一般调试过程,启动调试过程Ctrl+F5、Debug-Start/Stop Debug Session 开始调试详见下页 结束调试、Debug-Stop Running,调试工具栏,复位,运

16、行到光标行,执行完当前子程序,过程单步,单步,暂停,运行,调试菜单栏,快捷键,指向下条运行行,基本调试手段:1、运行到光标行从当前行运行到光标所在行(Ctrl+F10)2、严格单步运行遇到函数时亦单步进行(F11)3、跨函数单步运行遇到函数时将其视作一行语句(F10)4、断点运行 全速运行到断点行停止(双击设置/解除断点)5、监视输出端口打开IO窗口(Peripherals-I/O-Ports)6、监视运行变量打开Watch#1窗口(点击),将调试通过的*.hex文件加载到*.DSN文件中后即可运行,Keil与Proteus的联合仿真运行(需要关联设置),1 C51的程序结构 2 C51的数据

17、结构 3 C51仿真开发环境 4 C51初步应用编程 1 IO端口的简单应用 1.1 基本输入输出单元与编程 1.2 LED数码管原理与编程 2 IO端口的进阶实践,基本输入输出单元与编程,输出单元:发光二极管(LED)作为输出显示设备具有电路简单、功耗低、寿命长、响应速度快等特点。,低电平驱动,限流电阻R=1001k,高电平驱动,灌电流,拉电流,输入单元:按键或开关是最基本的输入设备。,【强调】P0口为漏极开路结构需要外接上拉电阻 P0 P3为准双向IO口读引脚前需先写1,实例1 独立按键识别,【要求】开机时LED全熄,然后根据按键动作使相应灯亮,并将亮灯保持到下次按键动作时为止。,独立按键

18、每个按键都彼此独立,且各占有一根I/O口线。,按键的闭合电平为0,但LED的驱动电平为1,故不能直接将P0口的状态送到P1口,而应使其先取反再送出;,为使按键抬起后LED能保持先前的点亮状态,需要在按键都未压下期间禁止向P1送出P0状态值。,【分析】,为避免P0口未使用端口产生的不利影响,应对其高4位清零。,参考程序如下,“取反”操作的优先级高于“与”操作,编程界面和运行界面分别如下图,实例2 键控流水灯,【要求】K1为“开始键”,可使K3和K4有效,初值为“自下向上”运动;K2 为“停止键”,可使K3和K4失效,并使全灯关闭;K3和K4为“方向键”,分别对应“自上向下”和“自下向上”运动。,

19、分析整体关系,分析局部关系(获取按键状态),分析局部关系(修改状态标志),对应功能:启停=1,启停=0,方向=1,方向=0,switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,1#4#的键值:0 x0e,0 x0d,0 x0b,0 x07,分析局部关系(LED循环控制),建立LED显示码数组=01,02,04,08,循环4次?,N,结束,延时,Y,LED环节,自右向左循环输出状态码,循环4次?,N,结束,延时,Y,LED环节,自左向右循环输出状态码,参考程序如下,if(P0,Keil项目和程序界面如

20、下图所示,.1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 4 C51初步应用编程 1 IO端口的简单应用 1.1 基本输入输出单元与编程 1.2 LED数码管原理与编程 2 IO端口的进阶实践,LED显示元件人机交互输出设备,其作用是指示中间运行结果与运行状态。,com为公共端,共阳极LED,共阴极LED,引脚配置,七段式LED显示器,(7-Segment Display),LED的亮暗组合(显示码)能形成不同的显示字符,以共阴极为例,部分字符的显示码(字模)为:,七段LED数码管的标准显示字符为0-9,A-F,实例3 LED数码管显示,在P0口连接一个共阴极数码管,使之

21、循环显示0-9数字。,分析:将显示码循环输出到P0口即可实现循环显示。但由于数字09的显示段码没有规律可循,需要采取查表方式进行操作:,将显示码按序存放在一个数组中,顺序号与代表的显示字符相对应。(如,char led_mod=x1,x2,.,xn)通过循环变量指定待送出的数组元素,参考程序,实例4 计数显示器,对按键动作进行计数和显示,达到99后重新由1开始计数。,个位LED接P2口;十位LED接P0口(上拉电阻),分析:,读P3.7口,进行加1计数和超界处理;拆分计数器数值个位、十位;查找/输出显示码到P0和P2口。,计数值拆分:取模运算(%)个位整除10运算(/)十位,查找/输出显示码:

22、按拆分值输出相应数组元素,参考程序,(接前页),程序运行效果,1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 4 C51初步应用编程 1 IO端口的简单应用 2 IO端口的进阶实践 2.1 数码管动态显示原理与编程 2.2 行列式键盘原理与编程,静态显示接口和动态显示接口,静态显示接口:一个并行口接一个数码管。优点:被显示数据只要送入并行口后就不再需要CPU干预,因而显示效果稳定。缺点:占用资源较多,动态显示接口:将所有数码管的段码线对应并联起来接在一个8位并行口上,而每位数码管的公共端分别由一位I/O线控制。,工作原理:轮流显示,即每一时刻只有一只显示器工作。当时间间隔很

23、小(如10ms)时,人眼的暂留特性无闪烁的连续显示。优点:占用资源较少缺点:占用机时较多(需要CPU随时刷新显示值),实例5 数码管动态显示,采用共阴极动态LED显示原理,实现如下功能:SW1向下拨时显示字符“L2”,向上拨时显示字符“H3”。,分析:Proteus中的双联LED数码管相当于两个并联的数码管。,如果不考虑switch,动态显示“L2”的程序可以如下:,完整的源程序,需要数码管指针led_point和开关状态标志switch_sta的配合才能实现两个显示值的切换功能。,运行效果图,1 C51的程序结构 2 C51的数据结构 3 C51仿真开发环境 4 C51初步应用编程 1 IO

24、端口的简单应用 2 IO端口的进阶实践 2.1 数码管动态显示原理与编程 2.2 行列式键盘原理与编程,独立式键盘的电路简单,易于编程,但占用的IO口线较多,当需要较多按键时可能产生IO资源紧张问题。,独立式键盘,独立式键盘与行列式键盘,行列式键盘将IO口分为行线和列线,按键跨接在行线和列线上,列线通过上拉电阻接正电源。,行列式键盘,特点:占用IO口线较少,但软件将较为复杂。,键值(按键闭合时的数值),键模(按键代表的数值),判断哪一行有键压下写端口(0 xf0):行线电平=0;列线电平=1。读端口进行判断:若P3=0 xf0没有按键压下;若P30 xf0某行有键压下K1,键盘扫描原理(以P3

25、口为例):,判断哪一列有键压下写端口(0 x0f):行线电平=1;列线电平=0。读端口进行判断:若P3=0 x0f没有按键压下;若P3 0 x0f某列有键压下K2,将K1与K2相“与”并存于K2(形成键值)闭合键所在行、列的状态均为1,其余皆为0。,整个键盘的键值:0 x11、0 x21、0 x41、0 x810 x12、0 x22、0 x42、0 x820 x14、0 x24、0 x44、0 x840 x18、0 x28、0 x48、0 x88,第一行的键值:00010001、00100001、01000001、10000001,利用查表比对法求出闭合按键的键模。,将各键的键值依次存放在一个

26、数组中,其顺序号就是键模。,利用循环变量i控制比对过程,两者相等时的i就是闭合键的键模。,按键在闭合和断开瞬间会因弹簧开关的变形产生电压波动,软件消抖做法:延时10ms后再次扫描按键状态;若仍为“闭合”真有键压下;若为“非闭合”误动作。,按键抖动波形,键盘消抖原理:,此法也可用于按键释放处理。,行列式键盘扫描流程,实例6 行列式键盘,按下任意按键后,LED显示器上显示该键的键模(0F)。,分析:需要考虑以下三个关键环节:获得按键的键值 检测流程图获得闭合按键的键模 查表比对获得闭合按键的字模 查表思路,参考程序,/关闭LED数码管,程序运行效果,本章小结,C51的数据类型与变量的定义,都必须考虑单片机的存储结构。在Keil下进行C51开发的基本步骤是:建立项目输入源程序设置编译参数编译连接下载调试。单片机IO口基本编程应用包括按键(或开关)状态检测、发光二极管输出控制、数码管动态显示以及行列式键盘扫描编程等内容。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号