ImageVerifierCode 换一换
格式:DOCX , 页数:88 ,大小:59.72KB ,
资源ID:10592927      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10592927.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机的C语言轻松入门.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机的C语言轻松入门.docx

1、单片机的C语言轻松入门 第1 章 C 语言概述及其开发环境的建立 Keil 软件是目前最流行开发80C51 系列单片机的软件,Keil 提供了包括C 编译器、宏汇编、连接器、库 管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境 (Vision)将这些部份组合在一起。 在学会使用汇编语言后,学习C 语言编程是一件比较容易的事,我们将通过一系列的 实例介绍C 语言编程的方法。图1-1 所示电路图使用89S52 单片机作为主芯片,这种单片 机性属于80C51 系列,其内部有8K 的FLASH ROM,可以反复擦写,并有ISP 功能,支 持在线下载,非常适于做实验。89S52

2、的P1 引脚上接8 个发光二极管,P3.2P3.4 引脚上接 4 个按钮开关,我们的任务是让接在P1 引脚上的发光二极管按要求发光。 11 简单的C 程序介绍 例1-1: 让接在P1.0 引脚上的LED 发光。 图1-1 接有LED 的单片机基本电路 P1.0 EA/VPP VCC XTAL2 XTAL1 GND RST +5V +5V + R1 E1 10K 10U 27P CY 27P PZ1 1K D8 D1 89 #include “reg51.h” sbit P1_0=P10; void main() P1_1=0; 这个程序的作用是让接在P1.0 引脚上的LED 点亮。下面来分析一

3、下这个C 语言程序包 含了哪些信息。 1)“文件包含”处理。 程序的第一行是一个“文件包含”处理。 所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序 虽然只有4 行,但C 编译器在处理的时候却要处理几十或几百行。这里程序中包含REG51.h 文件的目的是为了要使用P1 这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单 片机的P1 端口而不是其它变量。这是如何做到的呢? 打开reg51.h 可以看到这样的一些内容: /*- REG51.H Header file for generic 80C51 and 80C31 microcontroller.

4、Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. -*/ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88;

5、 sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* BIT Register */ /* PSW */ sbit CY = 0xD7; sbit AC = 0xD6; sbit F0 = 0xD5; sbit RS1 = 0xD4; sbit RS0 = 0xD3; sbit OV = 0xD2; sbit P = 0xD0; /* TCON */ s

6、bit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88; /* IE */ sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8; /* IP */ sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xB

7、A; sbit PT0 = 0xB9; sbit PX0 = 0xB8; /* P3 */ sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0; /* SCON */ sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI

8、 = 0x99; sbit RI = 0x98; 熟悉80C51 内部结构的读者不难看出,这里都是一些符号的定义,即规定符号名与地 址的对应关系。注意其中有 sfr P1 = 0x90; 这样的一行(上文中用黑体表示),即定义P1 与地址0x90 对应,P1 口的地址就是0x90 (0x90 是C 语言中十六进制数的写法,相当于汇编语言中写90H)。 从这里还可以看到一个频繁出现的词:sfr sfr 并标准C 语言的关键字,而是Keil 为能直接访问80C51 中的SFR 而提供了一个新 的关键词,其用法是: sfrt 变量名=地址值。 2)符号P1_0 来表示P1.0 引脚。 在C 语言里,

9、如果直接写P1.0,C 编译器并不能识别,而且P1.0 也不是一个合法的C 语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0 是不是就是P1.0 呢?你这么认为,C 编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C 的关键字sbit 来定义,sbit 的用法有三种: 第一种方法:sbit 位变量名地址值 第二种方法:sbit 位变量名SFR 名称变量位地址值 第三种方法:sbit 位变量名SFR 地址值变量位地址值 如定义PSW 中的OV 可以用以下三种方法: sbit OV=0xd2 (1)说明:0xd2 是OV 的位地址值 sbit OV=PSW2

10、(2)说明:其中PSW 必须先用sfr 定义好 sbit OV=0xD02 (3)说明:0xD0 就是PSW 的地址值 因此这里用sfr P1_0=P10;就是定义用符号P1_0 来表示P1.0 引脚,如果你愿意也可以 起P10 一类的名字,只要下面程序中也随之更改就行了。 3)main 称为“主函数”。 每一个C 语言程序有且只有一个主函数,函数后面一定有一对大括号“”,在大括号 里面书写其它程序。 从上面的分析我们了解了部分C 语言的特性,下面再看一个稍复杂一点的例子。 例1-2 让接在P1.0 引脚上的LED 闪烁发光 /* 平凡单片机工作室 Copyright 2003 pingfan

11、s mcustudio All rights Reserved 作者:周坚 ddss.c 单灯闪烁程序 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit P10=P10; /*延时程序 由Delay 参数确定延迟时间 */ void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-) for(i=0;iNew Project”菜单,出现对话框,要求给将要建立的工程起一个名字, 这里起名为exam2,不需要输入扩展名

12、。点击“保存”按钮,出现第二个对话框,如图1-2 所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil 支持的CPU 很多,这 里选择Atmel 公司的89S52 芯片。点击ATMEL 前面的“+”号,展开该层,点击其中的89S52, 然后再点击“确定”按钮,回到主窗口,此时,在工程窗口的文件页中,出现了“Target 1”, 前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”,这时的工程还是 一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图

13、1-3 所示,选中其 中的“Add file to Group”Source Group1”,出现一个对话框,要求寻找源文件。 双击exam2.c 文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失, 等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出 现如图1-4 所示的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对 话框,然后点击“Close”即可返回主接口,返回后,点击“Source Group 1”前的加号,exam3.c 文件已在其中。双击文件名,即打开该源程序。 13 工程的详细设置 工程建立好以后,还要对工程进行进一步的

14、设置,以满足要求。 首先点击左边Project 窗口的Target 1,然后使用菜单“Project-Option for target target1”即出现对工程设置的对话框,这个对话框共有8 个页面,大部份设置项取默认值就行了。 Target 页 图1-2 选择单片机型号 图1-3 加入文件 如图1-5 所示,Xtal 后面的数值是晶振频率值,默认值是所选目标CPU 的最高可用频 率值,该值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设 置该数值可使显示时间与实际所用时间一致,一般将其设置成与你的硬件所用晶振频率相 同,如果没必要了解程序执行的时间,也可以不设。

15、Memory Model 用于设置RAM 使用情况,有三个选择项: Small: 所有变量都在单片机的内部RAM 中; Compact:可以使用一页(256 字节)外部扩展RAM; Larget: 可以使用全部外部的扩展RAM。 Code Model 用于设置ROM 空间的使用,同样也有三个选择项: Small:只用低于2K 的程序空间; Compact:单个函数的代码量不能超过2K,整个程序可以使用64K 程序空间; Larget:可用全部64K 空间; 这些选择项必须根据所用硬件来决定,由于本例是单片应用,所以均不重新选择,按默 认值设置。 Operating:选择是否使用操作系统,可以选

16、择Keil 提供了两种操作系统:Rtx tiny 和 Rtx full,也可以不用操作系统(None),这里使用默认项None,即不用操作系统。 图1-5 设置目标 图1-4 重复加入源程序得到的提示 OutPut 页 如图1-6 所示,这里面也有多个选择项,其中Creat Hex file 用于生成可执行代码文件, 该文件可以用编程器写入单片机芯片,其格式为intelHEX 格式,文件的扩展名为.HEX,默 认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项。 工程设置对话框中的其它各页面与C51 编译选项、A51 的汇编选项、BL51 连接器的连 接选项等用法有关,这里均取默认值,

17、不作任何修改。以下仅对一些有关页面中常用的选项 作一个简单介绍。 Listing 页 该页用于调整生成的列表文件选项。在汇编或编译完成后将产生(*.lst)的列表文件, 在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致 的调节,其中比较常用的选项是“C Compile Listing”下的“Assamble Code”项,选中该项 可以在列表文件中生成C 语言源程序所对应的汇编代码,建议会使用汇编语言的C 初学者 选中该项,在编译完成后多观察相应的List 文件,查看C 源代码与对应汇编代码,对于提 高C 语言编程能力大有好处。 C51 页 该页用于对Kei

18、l 的C51 编译器的编译过程进行控制,其中比较常用的是“Code Optimization”组,如图1.7 所示,该组中Level 是优化等级,C51 在对源程序进行编译时, 可以对代码多至9 级优化,默认使用第8 级,一般不必修改,如果在编译中出现一些问题, 可以降低优化级别试一试。Emphasis 是选择编译优先方式,第一项是代码量优化(最终生 成的代码量小);第二项是速度优先(最终生成的代码速度快);第三项是缺省。默认采用速 度优先,可根据需要更改。 图1-6 设置输出文件 Debug 页 该页用于设置调试器,Keil 提供了仿真器和一些硬件调试方法,如果没有相应的硬件调 试器,应选择

19、Use Simulator,其余设置一般不必更改,有关该页的详细情况将在程序调试部 分再详细介绍。 至此,设置完成,下面介绍如何编译、连接程序以获得目标代码,以及如何进行程序的 调试工作。 14 编译、连接 下面我们通过一个例子来介绍C 程序编译、连接的过程。这个例子使P1 口所接LED 以流水灯状态显示。 将下面的源程序输入,命名为exam3.c,并建立名为exam3 的工程文件,将exam3.c 文 件加入该工程中,设置工程,在Target 页将Xtal 后的值由24.0 改为12.0,以便后面调试时 观察延时时间是否正确,本项目中还要用到我们所提供的实验仿真板,为此需在Debug 页 对

20、Dialog DLL 对话框作一个设置,在进行项目设置时点击Debug,打开Debug 页,可以看 到Dialog DLL 对话框后的Parmeter:输入框中已有默认值-pAT52,在其后键入空格后再输入 -dledkey,如图1-8 所示。 例1-3 使P1 口所接LED 以流水灯状态显示 /* ; 平凡单片机工作室 ; ; Copyright 2003 pingfans McuStudio ; All rights Reserved 图1-7 C51 编译器选项 ;作者:周坚 ;lsd.c ;流水灯程序 */ #include reg51.h #include intrins.h #de

21、fine uchar unsigned char #define uint unsigned int /*延时程序 由Delay 参数确定延迟时间 */ void mDelay(unsigned int Delay) unsigned int i; for(;Delay0;Delay-) for(i=0;iBuild target,对当前工程进行 连接,如果当前文件已修改,将先对该文件进行编译,然后再连接以产生目标代码;如果选 择Rebuild All target files 将会对当前工程中的所有文件重新进行编译然后再连接,确保最终 生产的目标代码是最新的,而Translate .项则仅对

22、当前文件进行编译,不进行连接。以上 操作也可以通过工具栏按钮直接进行。图1-9 是有关编译、设置的工具栏按钮,从左到右分 别是:编译、编译连接、全部重建、停止编译和对工程进行设置。 编译过程中的信息将出现在输出窗口中的Build 页中,如果源程序中有语法错误,会有 错误报告出现,双击该行,可以定位到出错的位置,对源程序修改之后再次编译,最终要得 到如图1-10 所示的结果,提示获得了名为exam3.hex 的文件,该文件即可被编程器读入并 写到芯片中,同时还可看到,该程序的代码量(code=63),内部RAM 的使用量(data=9), 外部RAM 的使用量(xdata=0)等一些信息。除此之

23、外,编译、连接还产生了一些其它相关 的文件,可被用于Keil 的仿真与调试,到了这一步后即进行调试。 15 程序的调试 在对工程成功地进行汇编、连接以后,按Ctrl+F5 或者使用菜单Debug-Start/Stop Debug Session 即可进入调试状态,Keil 内建了一个仿真CPU 用来模拟执行程序,该仿真CPU 功 能强大,可以在没有硬件和仿真机的情况下进行程序的调试。 进入调试状态后,Debug 菜单项中原来不能用的命令现在已可以使用了,多出一个用于 运行和调试的工具条,如图1-11 所示,Debug 菜单上的大部份命令可以在此找到对应的快 捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到 当前

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1