《单片机编程实例led等课件》由会员分享,可在线阅读,更多相关《单片机编程实例led等课件(136页珍藏版)》请在金锄头文库上搜索。
1、2、硬件设计(单片机+外围器件),外围器件:,一个发光二极管、三个电阻、三个电容,一个按钮开关,3、 搭建硬件平台,在面包板上插入器件,用导线完成电气连接。,4、 软件设计 ORG 00H ; 设置起始地址 START: MOV R0, #5 ; 循环闪烁5次,R0为计数器 LOOP: MOV P1,#00H ; P1口输出全0,点亮二极管 CALL DELAY ; 调用延时子程序 MOV P1,#0FFH ; P1口输出全1,熄灭二极管 CALL DELAY ; 调用延时子程序 DJNZ R0, LOOP ; R0减1,若不为0转LOOP处,JB P2.0, $ ; 测P2.0为高电平(无按
2、键)则执行本行 JMP START ; 否则,有键按下,跳到START处重新开 始执行,DELAY: ; 延时子程序(500ms) RET ; 返回主程序 END ; 汇编程序结束,5 、下载程序到单片机并调试,(1) 在Vision中把目标程序编辑好, (2)编译、连接无错后生成单片机可执行的代码文件, (3) 用下载线下载到单片机系统板中, (4)运行程序,(5)根据运行结果检查功能实现情况,若未达系统要求,则在Vision中修改程序,然后重复步骤 (2)(5),直至达到系统要求.,在程序反复检查无逻辑错误时,应检查硬件电路是否有问题.,3.2 Vision Vision软件的使用 1、新
3、建一个工程(项目),并为该项目选定合适的CPU然后保存该工程。,具体步骤: 选Project New Project保存工程,在弹出窗口中选所需CPU(如选ATMEL),双击该.CPU.,选AT89S51, 并确定。,2、设置工程,使编译、连接后能生成可执行代码文件,右击,Options for Target 1,选择Create HEX,在弹出的窗口选,3、新建源文件,选FileNew输入源程序保存,(汇编程序:文件名.asm; C程序:文件名.c,(存在工程文件夹),4、为工程中添加源程序文件,在右边Project窗口单击 Source Group 1,在下拉菜单中选 Add Files
4、to GroupSource Group 1选项,,在弹出的框中选择你的源文件和文件类型,然后点击ADD,再点击close。,5、编译工程中的源程序,生成 .HEX(可执行)文件,在Project窗口中选 Target 1Build Target F7, (点击 )对源程序编译连接。(或点击 RBuild Target ),程序有语法错误时,会在输出窗口(Output Windows)中显示错误信息和警告信息,修改编译成功后生成 HEX文件,生成.HEX文件后,可利用专门的下载程序,将此可执行程序下载到单片机内的ROM中运行,3、在窗口中点击 , 打开你系统的.hex文件,3.3 STC-IS
5、P V3.91 软件的使用 1、双击 , 打开在线烧录程序,2、在窗口的“MCU TYPE ”下拉菜单中选择(STC89C51RC),4、在COM栏选下载端口(一般是COM1) 5、关电路板上的电源 6、点击Download,打开电路板上的电源,烧录程序,若烧录出现问 题,点击stop。,注意: 5、6 两步骤的顺序不能颠倒!即在点击Download之前要先关掉板上的电源。,7、打开电路板上的电源 ,程序即开始运行。,3.4 单片机应用系统C语言程序设计,单片机应用系统的程序设计有两种方法:一种是基于汇编语言的,另一种是基于C语言的。,汇编语言程序的机器代码生成效率高,但可读性较差,而C语言程
6、序的可读性和可移植性远超过汇编语言。,C51是一种专门为51单片机设计的高级语言C编译器,支持符合ANSI标准的C语言,同时针对51单片机的特点做了一些特殊扩展。,C语言的主要特点:, 语言简洁,使用方便灵活。它是程序设计语言中规模最小的语言之一。,ANSI标准C语言只有32个关键字,9种流程控制语句。,程序可移植性好。,所设计的程序不依赖机器硬件。,表达方式灵活。,利用 C语言的多种运算符可组成各种表达式,还可采用多种方法来获得表达式的值,使程序设计具有更大的灵活性。,表达能力强。,具有丰富的数据结构类型和多种运算符。用户可灵活采用多种数据类型和使用各种运算符,实现复杂运算。,可直接操作计算
7、机硬件。,C语言具有直接访问机器物理地址的能力,C51的编译器都可直接对单片机内部的SFR和I/O端口进行操作,可以直接访问片内、片外存储器,还可以进行各种为操作。,生成的目标代码质量较高。,可进行结构化程序设计。,C语言以函数作为程序设计的基本单位,非常适合结构化程序设计。,用C51语言编写单片机应用程序,不用具体组织、分配存储器资源和处理端口数据,但对数据类型与变量的定义,必须要与单片机的存储结构相关联,否则编译器不能正确地映射定位。,与标准C语言相比,C51包含的数据类型、变量存储模式、输入输出处理、函数等方面有一定差异,需根据单片机存储结构及内部资源来定义相应的数据类型和变量,而其它语
8、法规则、程序结构及设计方法等与标准C语言相同。,3.4.1 C51的程序结构,一、 C51语言概述,C语言程序由若干函数组成,其中有且仅有一个主函数,每个函数都是完成某个特殊任务的子程序段。,组成程序的若干函数可保存在一个源程序文件中,也可保存在几个源程序文件中,最后将它们连接在一起。,函数之间可以互相调用,但主函数只能调用其它函数而不能被其它函数调用。,主函数是程序的入口,主函数中的所有语句执行完毕,则程序结束。,二. 、C51语言程序结构,可实现一个LED闪烁控制功能的C51源程序,C51语言程序的基本结构:,式中: func1()funcN()代表用户定义的函数, 程序体指C51提供的任
9、何库函数调用语句、控制流程语句或其它函数调用语句。,3.4.2 C51的数据结构,1. C51的变量,变量的基本属性是变量名和变量值。在程序中定义了变量,C51编译器就会给这个变量分配相应的存储单元。此后变量名就与存储单元地址相对应,变量值就与存储单元的内容相对应。,定义一个变量的格式如下: 存储种类数据类型存储类型变量名,C51的变量概念示意图,图中引用变量a实现了对分配内存20H单元的数据操作,(1)存储种类,存储种类是指变量在程序执行过程中的作用范围。,变量的存储种类有四种: 自动(auto) 用存储种类说明符auto定义的变量 外部(extern) 用外部种类存储符extern定义的变
10、量 静态(static) 用存储种类说明符static定义的变量 寄存器(register)用存储种类说明符register定义的 变量,自动变量:,自动变量作用范围在定义它的函数体或复合语句内部,在定义它的函数体或复合语句被执行时,C51才为该变量分配内存空间,当函数调用结束或复合语句执行结束时,自动变量占用的内存空间被释放。,定义变量时若省略存储种类,则变量默认为自动变量。通常将函数体内和复合语句中使用频繁的变量放在片内RAM中,且定义为自动变量,可有效利用片内RAM资源。,外部变量:,在一个函数内,要使用已在本函数外或别的程序模块文件中定义过的外部变量时,在本函数体内要用extern说明
11、该变量。,通常将多个函数或模块共享的变量定义为外部变量。,外部变量是全局变量,在程序执行期间一直占有固定的内存空间。当片内RAM资源紧张时,不建议将外部变量放在片内RAM。,外部变量被定义后,即分配了固定的内存空间,在程序的整个执行时间内都是有效的。,静态变量:,静态变量又分为内部静态变量和外部静态变量。,在函数体内定义的静态变量为内部静态变量,它在该函数体内有效,但在该函数体外不可见,这使变量在定义它的函数体外被保护,实现了离开函数时值不会被改变。,寄存器变量:,通常将使用频率最高的那些变量定义为寄存器变量,但目前已不推荐使用这种方式。,外部静态变量是在函数外部定义的静态变量。它在程序中一直
12、可见,但在定义的范围之外是不可见的。,在多文件或多模块处理中,外部静态变量只在定义其的文件内部或模块内部有效。,(2)数据类型,数据的不同格式叫做数据类型,有符号数据类型可以忽略signed标识符,如int 等价于signed int , char 等价于signed char等。,为了更有效地利用51单片机的内部结构, C51还增加了一些特殊的数据类型,它们分别对应于bit、sfr、sfr16和sbit四个关键字。,bit 位型,利用bit 位型,可定义一个位变量或位函数,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0 就是1。,C51增加的特殊数据类型,sfr特殊功能寄存
13、器型,51系列单片机内的21个特殊功能寄存器(SFR),分散在片内RAM区的高128字节,地址为80HFFH。为了能直接访问这些SFR,需要通过关键字“sfr”对其进行定义,语法如下: sfr sfr_name = 地址常数;,sfr_name是一个特殊功能寄存器名,“=”后面必须是常数,其数值范围必须在特殊功能寄存器地址范围内,即位于0 x80-0 xFF之间。 例如, sfr P1 = 0 x90; /定义P1口地址90H sfr PSW = 0 xD0; /定义PSW地址D0H,对于16位SFR,要使用关键字“sfr16”,定义的地址必须是16位SFR的低端地址。 sfr16 DPTR
14、= 0 x82;/定义DPTR,其DPL = 82H DPH=83H,注意:不能用sfr16定义定时器/计数器0和1。,sbit可寻址位,在单片机应用中,经常要访问特殊功能寄存器中的某些位,用关键字sbit定义可位寻址的特殊功能寄存器的位寻址对象。定义方法有如下三种:,sbit 位变量名 = 位地址 将位的绝对地址赋给位变量名,位地址必须位于0 x80H0 xFF之间。 例:sbit CY=0 xD7; /将位的绝对地址赋给变量,sbit 位变量名 = SFR名称 位位置 当可寻址位位于特殊功能寄存器中时,可采用这种方法。其中SFR名称必须是已定义的SFR的名字,位位置是一个07之间的常数。
15、例: sfr PSW = 0 xD0; sbit CY=PSW7; /定义CY位为PSW.7,位地址为 0 xD7,sbit 位变量名 = 字节地址 位位置 这种方法是以一个字节地址作为基地址,该地址必须在0 x80H0 xFF之间。 例如,sbit CY = 0 xD07; /将位的相对地址赋给变量,注:C51编译器把51单片机常用特殊功能寄存器和特殊位进行了统一定义,并存放在 “reg51.h”或“reg52.h” 头文件中,只须在使用前用预处理命令#include 把这头文件包含到程序中,就可使用殊功能寄存器名和特殊位名称。,(3)存储类型,51系列单片机有三个逻辑存储空间:片内低128
16、B RAM,片外64KB RAM和片内外统一编址的64KB ROM。,51系列单片机逻辑存储空间示意图,C51的存储类型与存储空间对应关系表,注:一个变量除了与存储单元相对应外,还与它所在的存储空间有关,即还需要指出其存储类型。,如果在定义变量时省略了存储类型标识符,C51编译器会根据当前编译模式自动认定默认的存储类型。编译模式共分为:小编译模式(SMALL)、紧凑编译模式(COMPACT)和大编译模式(LARGE)三种模式,编译模式与存储类型,(4)变量名,C51对变量名的规定与标准C类似,由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,变量名长度无统一规定,随编译系统而定。,注意:大写和小写字母是两个不同的标识符,习惯上变量用小写表示。变量名除了不可使用标准C语言的32个关键字外,还要不可使用C51扩展的新关键字。,C51扩展的21个关键字一览表,C51扩展的21个关键