1.51k likes | 1.66k Views
项目二 简易小彩灯的实现. [ 项目学习目标 ]. 一、知识目标 1 .了解单片机存储器和寄存器的概念及分类,理解地址的概念及寄存器的地址分配,知道单片机的寻址方式; 2 .熟悉指令格式及相关控制指令; 3 .知道 LED 灯的硬件结构和基本电路; 4. 掌握单片机控制 LED 灯的基本方法。. 二、技能目标 1. 利用位修正指令、数据传送指令、调用和返回指令、循环转移指令、逻辑运算指令及查表指令等完成程序编写。 2. 会计算延时时间,能编写延时程序,会进行子程序的调用。
E N D
项目二 简易小彩灯的实现 [项目学习目标] • 一、知识目标 • 1.了解单片机存储器和寄存器的概念及分类,理解地址的概念及寄存器的地址分配,知道单片机的寻址方式; • 2.熟悉指令格式及相关控制指令; • 3.知道LED灯的硬件结构和基本电路; • 4. 掌握单片机控制LED灯的基本方法。
二、技能目标 • 1.利用位修正指令、数据传送指令、调用和返回指令、循环转移指令、逻辑运算指令及查表指令等完成程序编写。 • 2.会计算延时时间,能编写延时程序,会进行子程序的调用。 • 3.能建立单片机的软件环境, 会建立工程,会使用keil软件进行简单程序的编写和调试。 • 4.能正确连接实验箱、仿真器及电脑,能下载程序并观察结果。
任务一 点亮一个LED灯 活动1:了解单片机的基本概念 • 在数字电路中可用电平的高和低控制一盏灯的亮和灭。 一、数码和物理现象的关系 灭表示低电平,用“0”表示 亮表示高电平,用“1”表示
如果现在有两盏灯,规定亮为’1’,灭为’0’,那它会有几种状态呢?如果现在有两盏灯,规定亮为’1’,灭为’0’,那它会有几种状态呢? 不同的数码可以代表不同数量灯的电平高或低,控制灯的亮或灭的状态。 00,01,10,11就是我们学过的的二进制数,因此可以用二进制数中的“0”、“1”表示电路输出的高、低电平信号,从而控制灯的亮和灭。
二、位与字节的含义 • 位:在二进制系统中,位记为bit,也称为比特,每个0或1就是一个位(bit),位是数据存储的最小单位。 • 字节:8个位称为一个字节,用 byte 表示。 • 在单片机中,一盏灯有两种状态“亮”和“灭”,分别用“0”和“1”表示 ,可以用一位数码表示。8盏灯可以用8位数码即用一个字节的数码表示。 • 在单片机中,即可以对位进行操作控制一盏灯的状态,也可以对字节进行操作,同时控制8盏灯的状态。
三、半导体存储器 • 1. 半导体存储器的工作原理 • 存储器就是用来存放数据的地方。 一个字节 01010010 一个位 四个存储单元 一个存储单元 存储器的内部结构图
(1)字节和位之间的关系; • (2)1个字节和一个位哪个存储空间大? • (3)图中存放的数据是十进制数多少?十六进制数多少?
③ EPROM(紫外线擦除的可编程只读存储器):写入内容后可以用紫外线照射的方法擦除后重写。 • ④ EEPROM(电可擦写可编程只读存储器)是可用户更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。
2.半导体存储器的分类 • 半导体存储器按功能可以分为只读和随机存取存储器两大类。 • (1)只读存储器ROM(READ ONLY MEMORY) • ROM 就是单片机中用来存放程序的地方,下载到单片机中的指令就是保存在ROM中的。 • ROM可分为: • ① Flash ROM(快速存储式只读存储器):既可以电擦写,而且掉电后程序还能保存。 • ②PROM(可编程存储器):只允许数据写入一次,如果数据烧入错误只能报废。 只可以从存储器里读数据,而不能将数据写进去
随时可以改写,也可以读出里面的数据 • (2)随机存取存储器RAM(READ RANDOM MEMORY) • RAM是存放运算过程中数据的地方。
四、存储器的地址 • 无论是单片机的程序存储器还是数据存储器,都有很多的存储单元,为区别存储单元,必须使每个存储单元具有唯一的地址,地址和存储单元有一一对应的关系,这些地址一般由十六进制表示,编排为00H-7FH。 • 数据存储器和程序存储器的地址有一部分是重合的,也就是说有些地址被用了两次,为区分清楚,人们在编程时根据需要必须用不同的指令。 用MOVC指令访问ROM空间,用MOV指令访问内部RAM,用MOVX指令访问外部RAM。
五、单片机中指令的编写格式 • 1. 指令的一般格式 • 标号:操作码助记符[(目的操作数),(源操作数)];注释。 • 例:MAIN: MOV A, #70H;把数据70H(立即数)送到累加器A中 注释是对指令的解释,之前用;隔开 ,隔开 ;隔开 空格隔开 标号 操作码助记符 目的操作数 源操作数 注释 指令的符号地址,一般用英文字母、数字表示,在其它语句的操作数中就可以直接引用该标号,以便控制程序的转移或寻址。
2. 汇编 • 程序员写指令时使用汇编格式,而计算机只识别机器码格式,将汇编格式转换为机器码格式有两种方法:手工汇编和机器汇编。本书采用Keil软件作为编译软件进行机器汇编。
六、单片机的寻址方式 • 寻址方式就是单片机指令中提供的操作数的形式。也就是寻找操作数或操作数所在地址的方式。 • 一般的寻址方式主要有7种:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。本任务主要学习立即寻址和直接寻址。
1.立即寻址 • 例:MOV A, #80H ;80H——>A • 指令中直接给出操作数的寻址方式称为立即数寻址。
2.直接寻址 • 例:MOV A, 25H ;内部RAM的(25H)—>A • MOV P0, #45H ;45H—>P0 ,P0为直接寻址的SFR • MOV 30H,20H ;内部RAM的(20H)—>(30H) • 指令中直接给出操作数地址的寻址方式称为直接寻址。 • 寻址对象一般为:内部数据存储器(在指令中以直接地址表示);特殊功能寄存器SFR(在指令中用寄存器名称表示)。
活动2:任务分析 一、发光二级管 • 发光二极管,又称为LED。它是半导体二极管的一种,可以把电能转化成光能。发光二极管具有单向导电性。当给发光二极管加上正向电压后,就产生自发辐射的荧光。 • 常用的发光二极管是发红光、绿光或黄光的二极管。
二、LED的应用电路 限流作用 高电位,LED截止,不放光 开关闭合,LED发光,开关断开,LED熄灭 低电位,LED导通,放光 图2-1-5 二极管工作电路
P1.0引脚为低电平时,LED发光,高电平时,LED熄灭P1.0引脚为低电平时,LED发光,高电平时,LED熄灭 三、LED灯的控制 思考:P1.0引脚信号如何时,LED发光?
四、单片机中8个LED灯的控制电路 限流电阻 图2-1-7 八只发光二极管共阳极连接 共阳极接法下,发光二极管发光的实质是给它的阴极提供低电平。通过单片机控制P1口的数据,可实现8盏灯不同的状态要求。
活动3:学习相关控制指令 一、位清零指令 • CLR C;使Cy=0 • CLR bit;使指定的位地址等于0. • 例:CLR P1.0;使P1.0变为0. 英文状态下输入;
二、伪指令 • 1.起始伪指令ORG(Origination) • 规定它下面的程序的起始地址的指令。 • 一般格式:ORG 16位地址 • 注意 • 一个程序可以有多个ORG伪指令,但他们后面的16位地址是从小到大排列的,并且两条ORG指令之间存放的指令不能超过他们之间的地址范围。
2.结束伪指令END • 是汇编语言程序结束的标志。 • 点睛 • END必须放在程序的最后,并且在程序中只能有一个有效的END.
三、无条件转移指令 • 1.长转移指令LJMP • 一般格式:LJMP addr16 • 转移范围:64KB空间内的任意位置。 • 2.短转移指令AJMP • 一般格式:AJMP addr11 • 转移范围:2KB空间内的任意位置。 • 3.相对转移指令SJMP • 一般格式:SJMP rel ; 偏移量,范围为-128~+127 • 点睛 • 三种无条件转移指令在使用时均可表示原地踏步,即一直等待,以AJMP指令为例,实现如下:AJMP $ ,等价于H: AJMP H
活动4:任务实施 一、建立软件环境 • 1.安装Keil软件 • 2.编写和调试程序 • (1)建立新工程 • 双击Keil μVision2的图标 显示提示信息后出现主界面 单击菜单“Project(工程)” “New Project(新建工程)…” 选择保存路径及文件名 选择器件Atmel公司的AT89S51型CPU 在弹出的对话框中单击“否”完成新工程的建立。
返回 图2-1-9 Keil μVision2的主界面 标题栏 下拉菜单 快捷工具按钮 项目窗口 文件编辑窗口 文件选项卡 输出窗口
返回 图2-1-11 保存工程
返回 图2-1-12 选择器件生产厂家 选择厂家
返回 图2-1-14 提示框选择
(2)建立源文件 • 新建源文件 保存源文件 将源文件加入项目 右击Source Group1单击“Add Files to Group’Source Group1’ 弹出对话框,选择路径,双击要加入的文件 选择File New,或点击“New File”的快捷键 选择File Save,或点击“保存”快捷键,文件取名时加上扩展名.a
返回 图2-1-15 新建源文件 “新建”快捷键文件
返回 图2-1-16 文件保存 源文件名 “保存”快捷键文件
返回 图2-1-18 选择要添加的源文件
(3)编写程序 • ① 任务分析 • 单灯控制的电路原理图:
本任务要用单片机控制一只发光二极管发光,将LED与P1.0引脚相连,当P1.0引脚是高电平时LED不亮,当 P1.0引脚是低电平时LED才发光,因此需要控制P1.0引脚来控制LED的亮灭。
②编写程序 CLR P1.0;对P1.0位清零,即点亮LED0 AJMP $;程序原地踏步 END ;程序结束 源程序编写完毕,必须要用END结束程序
建立目标文件 停止建立 下载 工程设置 编译或汇编当前文件 重建全部 • (4)调试程序 单击“建立目标文件”按钮
不进入函数内部的单步执行 进入函数内部的单步执行 跳出函数 开始/停止调试 全速运行 单击“开始/停止调试”或单击“Debug”菜单下的相应选项,进入程序调试环境,单击“全速运行”按钮后,通过“Peripherals” “I/O-Ports” “Port1”选项打开P1口,可实时查看程序运行结果,单击“停止运行”退出软件仿真。
二、硬件仿真 • 1. 连接计算机、单片机仿真器与单片机实验箱 仿真器从电脑的 USB接口取电 数据线与计算机的连接 数据线与仿真器连接
仿真器的接口 仿真器接口 的方位标志 仿真器的 扩展接口 仿真器接口的方位标志
2. 实验箱电源操作 • 打开试验箱总电源和模块电源。
3. 设置工程目标 • 右击项目窗口下的Target1 点击Option for target ’target1’, Target选项卡中Xtal后晶振数据设置为12MHz Output选项卡设置Debug选项卡设置
返回 图2-1-29 Output选项卡
作业 • P73: • 1、2、3、4、5、6
任务介绍 本任务就是利用单片机控制灯的闪烁,模拟航标灯。在单片机的P1.0引脚上接一个发光二极管L0,使L0在不停地一亮一灭。
点亮灯 活动1 任务分析 CLR P1.0 SETB P1.0 AJMP $ END 熄灭灯 原地踏步 讨论下面指令是否可实现航标灯的模拟? 程序调试现象:没有灯被点亮