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