单片机的c51语言基础

上传人:wt****50 文档编号:49481847 上传时间:2018-07-28 格式:PPTX 页数:121 大小:10.35MB
返回 下载 相关 举报
单片机的c51语言基础_第1页
第1页 / 共121页
单片机的c51语言基础_第2页
第2页 / 共121页
单片机的c51语言基础_第3页
第3页 / 共121页
单片机的c51语言基础_第4页
第4页 / 共121页
单片机的c51语言基础_第5页
第5页 / 共121页
点击查看更多>>
资源描述

《单片机的c51语言基础》由会员分享,可在线阅读,更多相关《单片机的c51语言基础(121页珍藏版)》请在金锄头文库上搜索。

1、 单片机的C51语言基础 n C51的程序结构 n C51的数据结构 n C51与汇编语言的混合编程 n C51初步应用编程 51汇编语言能直接操作单片机的系统硬件,指令执行速度快。但其程序可读性差,且编写、移植困难。 C51是为51系列单片机设计的一种C语言,其优点:C51语言已成为51系列单片机程序开发的主流软件方法。不要求对单片机的指令系统十分熟悉 易于表达,使用方便 C51语言程序容易移植 具有丰富的库函数 源代码可读性较强,容易理解和编程 相同之处: 语法规则、程序结构、编程方法 不同之处:C51与标准C语言对比C51的程序结构 C51的数据结构 C51与汇编语言的混合编程 C51仿

2、真开发环境 C51初步应用编程 程序由函数组成(一个主函数,或一个主函数和若干自定义函数); 利用预处理命令对变量或函数进行集中定义或说明; 函数和变量都需遵循先定义后使用的基本原则; 主函数中的所有语句执行完毕,则程序结束。 C51与标准C程序结构完全相同举例:LED闪烁控制功能预处理命令- 函数说明- 全局变量定义-主函数-调用函数- 局部变量定义-程序体程序体-C51的程序结构 C51的数据结构 C51与汇编语言的混合编程 C51仿真开发环境 C51初步应用编程 1. C51的变量 在程序执行过程中,数值可以发生改变的量称为变量。 变量名与存储单元地址相对应,变量值 与存储单元的内容相对

3、应。例如在哈佛结构的存储空间中如何建立变量概念? 【存储种类】 数据类型 【存储类型】 变量名(标准C)(标准C)* 括号项可以缺省(但需有缺省值)C51变量定义的四要素:(C51特有)(标准C+C51)【存储种类】 数据类型 【存储类型】 变量名共有四个说明符: 1、auto(自动型)变量的作用范围在定义它的函数体或 语句块内。执行结束后,变量所占内存即被释放。 2、extern(外部型) 在一个源文件中被定义为外部型的 变量,在其它源文件中需要通过extern说明方可使用。 3、static(静态型) 利用static可使变量定义所在的函数 或语句块执行结束后,其分配的内存单元继续保留。

4、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_nam

5、e = 常数;注意:上述变量的物理地址是由编译器分配的 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具有位地址,如何定义与这些位地址相关的变量?CYACF0RS1RS0OVF1PCYACF

6、0RS1RS0OVF1PCYACF0RS1RS0OVF1PCYACF0RS1RS0OVF1PD07 D7HD6HD5HD4HD3HD2HD1HD0HD0HPSWD06 D05 D04 D03 D02 D01 D00 绝对位地址相对位地址字节地址两种位地址表达形式:绝对位地址、相对位地址1)将SFR的绝对位地址定义为位变量名sbit bit_name = 位地址常数;例如, sbit CY = 0xD7; 3)将SFR的相对位位置定义位变量名sbit bit_name = sfr_name 位位置;例如, sbit CY = PSW7; 2)将SFR的相对位地址定义为位变量名sbit bit_n

7、ame = sfr字节地址 位位置; 例如, sbit CY = 0xD07; 关键词sbit用于定义SFR位地址变量,三种定义形式:C51编译器在头文件“REG51.H”中定义了全部sfr/sfr16和sbit变量。用一条预处理命令#include 把这个头文件包含 到C51程序中,无需重新定义即可直接使用它们的名称。应用举例:【存储种类】 数据类型 【存储类型】 变量名51单片机的 三个逻辑存储空间:片内数据存储器,片外数据存储器和程序存储器。建立C51存储类型与存储空间的对应关系data区code区xdata区bdata区pdata 区idata区C51的存储类型与存储空间对应关系表 S

8、MALL系统COMPACT系统LARGE系统编译模式三种编译模式分别对应于三种缺省存储类型:【存储种类】 数据类型 【存储类型】 变量名C51编译器可根据当前采取的编译模式自动认定默认的存 储类型约定:若无特殊声明,一般均为“SMALL编译模式”例 变量的存储模式#pragma small /*变量的存储模式为Small */char k1; /* k1存储模式Small ,存储器类型默认data*/int xdata m1; /* m1存储模式为Small ,存储器类型xdata*/#pragma compact /*变量的存储模式为Compact */char k2; /* k2存储模式C

9、ompact , 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代表不同的 变量。

10、强调:头文件中定义的变量都是大写的,若程序采取小写变 量则需要重新定义。【存储种类】 数据类型 【存储类型】 变量名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_id2=0x1234, 0x

11、89ab; static char m, n; /定义status_byte为无符号字符型自动变量,该变量位于bdata区/定义unit_id2为无符号整型自动变量,该变量位于code 区中,是长度为2的数组,且初值为0x1234和0x89ab。/定义m和n为2个位于data区中的有符号字符型静态变量。指针与地址运算符: *(指针运算符 ),uint var2;var1=XBYTE0x0005; /*访问片外RAM的0005字节单元*/var2=XWORD0x0002; /*访问片外RAM的0002字单元*/while(1);2. 通过指针访问 例 通过指针实现绝对地址的访问。#define

12、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=0x1

13、000; /*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初步应用编

14、程 C51语言编程可胜任单片机的基本测量与控制任务。对于某些特殊的I/O 接口处理、中断处理、强调程序执行 速度等场合,仍希望采用汇编程序。C51 编译器提供了与汇编语言程序的接口规则,可方便地 实现C51 与汇0编语言程序的相互调用。本节仅讨论在C51中嵌入汇编代码。 概要C51中嵌入汇编代码 在C51 函数内嵌入汇编代码,可以有三种不同方法。方法一 直接在函数体内的每个汇编语句前加“asm”预编译指令, 例如:方法二 把asm作为关键字,后续汇编用大括号括起来即可,例如 :方法三在C 模块内通过语句“ # pragma”嵌入汇编代码,例如: C51的程序结构 C51的数据结构 C51与汇编

15、语言的混合编程 C51仿真开发环境 C51初步应用编程 1. Keil的编译环境 Vision3 Keil是德国Keil Software公 司的51单片机开发软件包 ,包括C编译器、汇编编译 器、连接器、库管理及仿 真调试器,通过一个 windows下的集成开发环境 uVisoin3组合起来。 Vision3的软件界面包括四大组成部分,即菜单工具栏, 工程管理窗口,文件窗口和输出窗口。Vision3中共有11个下拉菜单。工具栏的位置和数量可 以通过设置选定和移动。 工程管理窗口用于管理工 程文件目录,它由五个子 窗口组成,可以通过子窗 口下方的标签进行切换, 它们分别是:文件窗口, 寄存器窗口,帮助窗口, 函数窗口,模版窗口。工程管理窗口:输出窗口:输出窗口用于编译过程中的信息交互作用,由三个子窗 口组成,可以通过子窗口下方的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号