单片机编程实例_led等

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 138
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功