好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机的c51语言基础.pptx

121页
  • 卖家[上传人]:wt****50
  • 文档编号:49481847
  • 上传时间:2018-07-28
  • 文档格式:PPTX
  • 文档大小:10.35MB
  • / 121 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 单片机的C51语言基础 n C51的程序结构 n C51的数据结构 n C51与汇编语言的混合编程 n C51初步应用编程 51汇编语言能直接操作单片机的系统硬件,指令执行速度快但其程序可读性差,且编写、移植困难 C51是为51系列单片机设计的一种C语言,其优点:C51语言已成为51系列单片机程序开发的主流软件方法Ø不要求对单片机的指令系统十分熟悉 Ø易于表达,使用方便 ØC51语言程序容易移植 Ø具有丰富的库函数 Ø源代码可读性较强,容易理解和编程 相同之处: 语法规则、程序结构、编程方法 不同之处:C51与标准C语言对比•C51的程序结构 •C51的数据结构 •C51与汇编语言的混合编程 •C51仿真开发环境 •C51初步应用编程 ① 程序由函数组成(一个主函数,或一个主函数和若干自定义函数); ② 利用预处理命令对变量或函数进行集中定义或说明; ③ 函数和变量都需遵循先定义后使用的基本原则; ④ 主函数中的所有语句执行完毕,则程序结束 C51与标准C程序结构完全相同举例:LED闪烁控制功能预处理命令--------- 函数说明------------ 全局变量定义------主函数------------调用函数------------ 局部变量定义---------程序体程序体------•C51的程序结构 •C51的数据结构 •C51与汇编语言的混合编程 •C51仿真开发环境 •C51初步应用编程 1. C51的变量 在程序执行过程中,数值可以发生改变的量称为变量。

      变量名与存储单元地址相对应,变量值 与存储单元的内容相对应例如在哈佛结构的存储空间中如何建立变量概念? 【存储种类】 数据类型 【存储类型】 变量名(标准C)(标准C)* 括号项——可以缺省(但需有缺省值)C51变量定义的四要素:(C51特有)(标准C+C51)【存储种类】 数据类型 【存储类型】 变量名共有四个说明符: 1、auto(自动型)——变量的作用范围在定义它的函数体或 语句块内执行结束后,变量所占内存即被释放 2、extern(外部型) ——在一个源文件中被定义为外部型的 变量,在其它源文件中需要通过extern说明方可使用 3、static(静态型) ——利用static可使变量定义所在的函数 或语句块执行结束后,其分配的内存单元继续保留 4、register(寄存器型) ——将变量对应的储存单元指定为 通用寄存器,以提高程序运行速度缺省存储种类为auto (自动)型变量数据的不同格式叫做数据类型 * 有符号数类型可以忽略signed标识符标准C语言的数据类型【存储种类】 数据类型 【存储类型】 变量名C51扩充数据类型:bit、sfr或sfr16、sbit bit 型关键词bit用于定义一个位变量,语法规则: bit bit_name [= 0或1];例如:bit door = 0 ; //定义一个叫door的位变量且初值为0标准C的变量定义举例:int a = 5 ; //定义一个初值为5的整形变量a 语法规则:int int_name [ = 常数];注意:上述变量的物理地址是由编译器分配的 sfr或sfr16型关键词sfr或sfr16用于定义SFR字节地址变量,语法规则:sfr 或 sfr16 sfr_name = 字节地址常数;51MCU中有21个SFR,如何定义与这些单元相关的变量?例如,sfr P0 = 0x80; //定义P0口地址80H sfr PCON = 0x87; //定义PCON地址87Hsfr16 DPTR=0x82; //定义DPTR的低端地址82H注意:SFR字节地址变量的物理地址是由MCU资源决定的sbit型部分SFR具有位地址,如何定义与这些位地址相关的变量?CYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PD0^7 D7HD6HD5HD4HD3HD2HD1HD0HD0HPSWD0^6 D0^5 D0^4 D0^3 D0^2 D0^1 D0^0 绝对位地址相对位地址字节地址两种位地址表达形式:绝对位地址、相对位地址1)将SFR的绝对位地址定义为位变量名sbit bit_name = 位地址常数;例如, sbit CY = 0xD7; 3)将SFR的相对位位置定义位变量名sbit bit_name = sfr_name ^ 位位置;例如, sbit CY = PSW^7; 2)将SFR的相对位地址定义为位变量名sbit bit_name = sfr字节地址 ^ 位位置; 例如, sbit CY = 0xD0^7; 关键词sbit用于定义SFR位地址变量,三种定义形式:C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。

      用一条预处理命令#include 把这个头文件包含 到C51程序中,无需重新定义即可直接使用它们的名称应用举例:【存储种类】 数据类型 【存储类型】 变量名51单片机的 三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器建立C51存储类型与存储空间的对应关系data区code区xdata区bdata区pdata 区idata区C51的存储类型与存储空间对应关系表 SMALL系统COMPACT系统LARGE系统编译模式三种编译模式分别对应于三种缺省存储类型:【存储种类】 数据类型 【存储类型】 变量名C51编译器可根据当前采取的编译模式自动认定默认的存 储类型约定:若无特殊声明,一般均为“SMALL编译模式”[例] 变量的存储模式#pragma small /*变量的存储模式为Small */char k1; /* k1存储模式Small ,存储器类型默认data*/int xdata m1; /* m1存储模式为Small ,存储器类型xdata*/#pragma compact /*变量的存储模式为Compact */char k2; /* k2存储模式Compact , k2存储器类型默认pdata*/int xdata m2; /* m2存储模式Compact ,存储器类型xdata */int func1(int x1,int y1) large /*函数Large , x1和y1存储器类型xdata */{return(x1+y1);}int func2(int x2,int y2) /*函数默认Small , x2和y2存储器类型data */{return(x2-y2);}变量名可以由字母、数字和下划线三种字符组成,且第一个 字符必须为字母或下划线,变量名长度随编译系统而定。

      变量名具有字母大小写的敏感性,如SUM和sum代表不同的 变量强调:头文件中定义的变量都是大写的,若程序采取小写变 量则需要重新定义存储种类】 数据类型 【存储类型】 变量名C51扩展的若干关键字一览表 变量名不得使用标准C语言和C51语言的关键字unsigned char data system_status = 0; //定义system_status为无符号字符型自动变量,该变量位于 data区中且初值为0 数据结构定义举例变量名为system_status 位于片内RAM区 无符号字符型 自动型初值为零unsigned char bdata status_byte; unsigned int code unit_id[2]={0x1234, 0x89ab}; static char m, n; //定义status_byte为无符号字符型自动变量,该变量位于bdata区//定义unit_id[2]为无符号整型自动变量,该变量位于code 区中,是长度为2的数组,且初值为0x1234和0x89ab//定义m和n为2个位于data区中的有符号字符型静态变量指针与地址运算符: *(指针运算符 ),uint var2;var1=XBYTE[0x0005]; /*访问片外RAM的0005字节单元*/var2=XWORD[0x0002]; /*访问片外RAM的0002字单元*/while(1);}2. 通过指针访问 [例] 通过指针实现绝对地址的访问。

      define uchar unsigned char /*定义符号uchar为数据类型符unsigned char*/#define uint unsigned int /*定义符号uint为数据类型符 unsigned int*/void func(void){uchar data var1;uchar pdata *dp1; /*定义一个指向pdata区的指针dp1*/uint xdata *dp2; /*定义一个指向xdata区的指针dp2*/uchar data *dp3; /*定义一个指向data区的指针dp3*/dp1=0x30; /*dp1指针赋值,指向pdata区的30H单元*/dp2=0x1000; /*dp2指针赋值,指向xdata区的1000H单元*/*dp1=0xff; /*将数据0xff送到片外RAM30H单元*/*dp2=0x1234; /*将数据0x1234送到片外RAM1000H单元*/dp3= /*dp3指针指向data区的var1变量*/*dp3=0x20; /*给变量var1赋值0x20*/}中断服务程序格式:void 中断函数名() interrupt n中断号 中断源0 外部中断01 定时器/计数器02 外部中断13 定时器/计数器14 串行口5 定时器/计数器2(52子系列)• C51的程序结构 • C51的数据结构 • C51与汇编语言的混合编程 • C51初步应用编程 ØC51语言编程可胜任单片机的基本测量与控制任务。

      Ø对于某些特殊的I/O 接口处理、中断处理、强调程序执行 速度等场合,仍希望采用汇编程序ØC51 编译器提供了与汇编语言程序的接口规则,可方便地 实现C51 与汇0编语言程序的相互调用Ø本节仅讨论在C51中嵌入汇编代码 概要C51中嵌入汇编代码 在C51 函数内嵌入汇编代码,可以有三种不同方法方法一 直接在函数体内的每个汇编语句前加“asm”预编译指令, 例如:方法二 把asm作为关键字,后续汇编用大括号括起来即可,例如 :方法三在C 模块内通过语句“ # pragma”嵌入汇编代码,例如:• C51的程序结构 • C51的数据结构 • C51与汇编语言的混合编程 • C51仿真开发环境 • C51初步应用编程 1. Keil的编译环境 μVision3 Keil是德国Keil Software公 司的51单片机开发软件包 ,包括C编译器、汇编编译 器、连接器、库管理及仿 真调试器,通过一个 windows下的集成开发环境 uVisoin3组合起来 μVision3的软件界面包括四大组成部分,即菜单工具栏, 工程管理窗口,文件窗口和输出窗口μVision3中共有11个下拉菜单。

      工具栏的位置和数量可 以通过设置选定和移动 工程管理窗口用于管理工 程文件目录,它由五个子 窗口组成,可以通过子窗 口下方的标签进行切换, 它们分别是:文件窗口, 寄存器窗口,帮助窗口, 函数窗口,模版窗口工程管理窗口:输出窗口:输出窗口用于编译过程中的信息交互作用,由三个子窗 口组成,可以通过子窗口下方的。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.