Download presentation
Presentation is loading. Please wait.
2
项目2 2个LED发光二极管控制 知识与能力目标 1 2 3 4 5 6 熟悉单片机的I/O口功能与特性。
初步学会使用C语言进行简单I/O口控制程序的分析与设计。 5 理解并掌握软件延时程序的分析与设计。 6 初步学会使用Keil与Proteus软件进行程序调试与仿真。
3
项目2 2个LED发光二极管控制 任务2.1 LED轮流闪烁控制 任务2.2 LED闪烁方式控制 1 控制要求与功能展示
1 控制要求与功能展示 2 硬件系统与控制流程分析 3 汇编语言程序分析与设计 4 C语言程序分析与设计 任务2.2 LED闪烁方式控制 1 控制要求与功能展示 2 硬件系统与控制流程分析 3 汇编语言程序分析与设计 4 C语言程序分析与设计 5 基于Proteus的调试与仿真
4
任务2.1 LED轮流闪烁控制 控制要求与功能展示 时钟电路 单片机 复位电路 LED 实物运行视频
5
任务2.1 LED轮流闪烁控制 控制要求与功能展示 2个LED闪烁电路原理图
6
2.1.2 硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配
硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配 单片机I/O接口,又称为I/O端口(简称I/O口)或称为I/O通道。51系列单片机有4个双向8位的I/O口,即P0、P1、P2和P3,共32根I/O线。每个双向I/O口都包含一个锁存器(专用寄存器P0、P1、P2和P3)、一个输出驱动器和输入缓冲器。 4个I/O口接口既可以并行输入/输出8位数据,又可按位单独输入/输出一位数据。它们既能按字节寻址又能按位寻址。
7
2.1.2 硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配
硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配 P0口:P0口为一个8位漏极开路的双向I/O口,内部不含上拉电阻。在访问外部ROM时,分时提供低8位的地址和8位的数据,作为普通的I/O输出时由于输出电路是漏极开路电路,此时需要外部接上拉电阻。 P1口:P1口为一个带内部上拉电阻的8位准双向I/O口,在单片机正常工作时,P1口为默认高电平状态。 P2口:P2口也是一个带内部上拉电阻的8位准双向I/O口,在单片机正常工作时,P2口为默认高电平状态;在访问外部ROM时,输出高8位的地址。
8
2.1.2 硬件系统与控制流程分析 表2-1 P3口的第二功能 1. 单片机I/O口功能与地址分配
硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配 P3口:P3口也是一个带内部上拉电阻的8位准双向I/O口,在单片机正常工作时,P3口为默认高电平状态;在系统中,这8个引脚又具有各自的第二功能 。 表2-1 P3口的第二功能 I/O口 第二功能 功能含义 P3.0 RXD 串行数据输入端 P3.1 TXD 串行数据输出端 P3.2 外部中断0输入端 P3.3 外部中断1输入端 P3.4 T0 定时器/计数器T0外部输入端 P3.5 T1 定时器/计数器T1外部输入端 P3.6 外部数据存储器写选通信号 P3.7 外部数据存储器读选通信号
9
硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配 (1)当P0口进行一般的I/O输出时,由于输出电路是漏极开路电路,必须外接上拉电阻才能有高电平输出。而P1~P3口作为输出口使用时,无须再外接上拉电阻。 (2)当P0~P3口作为通用I/O端口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”,然后再读入数据。
10
2.1.2 硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配
硬件系统与控制流程分析 1. 单片机I/O口功能与地址分配 (3)当需要扩展存储器时,低8位地址A7~A0和8位数据D7~D0由P0分时传送,高8位地址A15~A8由P2口传送。所以只有在没有扩展外存储器的系统中,P0口和P2口的每一位才可作为双向I/0端口使用。 (4)P3端口用作第二功能使用时,不能同时当做通用I/O端口使用。功能 。
11
2.1.2 硬件系统与控制流程分析 I/O接口的地址分配关系如下表 I/O口 字节地址 MSB 位地址(16进制) LSB P0 80H
硬件系统与控制流程分析 I/O接口的地址分配关系如下表 I/O口 字节地址 MSB 位地址(16进制) LSB P0 80H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 87 86 85 84 83 82 81 80 P1 90H P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 97 96 95 94 93 92 91 90 P2 A0H P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0 P3 B0H P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 B7 B6 B5 B4 B3 B2 B1 BO
12
硬件系统与控制流程分析 2. LED接口控制电路 图2-3 LED接口控制电路
13
硬件系统与控制流程分析 由于单片机的I/O口中P0口为漏极开路输出,内部没有上拉电阻,采用高电平点亮驱动方式时,PO口与P1~P3的电路设计有所不同,即P0口必须外接上拉电阻。 同时,在LED驱动电路中均需要串入一个限流电阻,用于保护电路的正常工作。
14
硬件系统与控制流程分析 3. 任务控制流程分析 图2-4 轮流闪烁LED控制流程
15
2.1.3 汇编语言程序分析与设计 汇编语言指令主要由标号、操作码、操作数和注释4个部分组成 。 1、汇编语言指令格式 格式如下:
汇编语言程序分析与设计 1、汇编语言指令格式 汇编语言指令主要由标号、操作码、操作数和注释4个部分组成 。 格式如下: [标号:] 操作码 [第一个操作数] [,第二个操作数] [,第三个操作数] [;注释] 示例: MAIN: MOV P0 ,#0FH ;将立即数0FH赋给P0口。
16
2.1.3 汇编语言程序分析与设计 2、指令系统符号约定 符号 符号含义 Rn n=0~7,表示当前工作寄存器区的8个工作寄存器R0~R7。
汇编语言程序分析与设计 2、指令系统符号约定 符号 符号含义 Rn n=0~7,表示当前工作寄存器区的8个工作寄存器R0~R7。 Ri i=0,1,表示当前工作寄存器区的两个工作寄存器R0、R1。 direct 表示8位内部数据存储单元的地址。当取值在00H~7FH范围时,表示内部数据RAM;当取值在80H~0FFH范围时,表示特殊功能寄存器。当表示特殊功能寄存器时也可以用寄存器名称来代替其直接地址。 #data 表示8位立即数。“#”表示后面的data为立即数。 #data16 表示16位立即数。“#”意义同上. addr11 表示11位目的地址。用于ACALL和AJMP指令中,它可以是下一条指令地址第一个字节所指出的同一个2KB程序存储空间中的任何值。 addr16 表示16位目的地址。用于LCALL和LJMP指令中,它可以是64KB程序存储空间中的任何值。
17
2.1.3 汇编语言程序分析与设计 2、指令系统符号约定 rel
汇编语言程序分析与设计 2、指令系统符号约定 rel 表示带符号的8位偏移量,用于SJMP和条件转移指令中。可代表下一条指令地址-128~+127的范围内的任何值。 bit 表示8位内部数据存储器空间或特殊功能寄存器区中可按位寻址区的8位位地址。当位地址取值为00H~7FH时,表示内部数据RAM 20H~2FH单元中每一位的位地址,当位地址取值为80H~0FFH时,表示特殊功能寄存器的位地址。 表示在位操作指令中,对该位(bit)先取反,再参与运算,但不改变位(bit)的原值。 @Ri 表示寄存器Ri(i=0或1)中存放的是操作数的地址。如果该地址是内部数据存储区中的地址,其取值范围为00H~7FH;如果该地址是外部数据存储区中的地址,其取值范围00H~0FFH。 @DPTR 表示DPTR中存放的是操作数的地址,该地址位于外部数据存储空间,取值范围在0000H~0FFFFH之间。 $ 表示本指令的起始地址。 () 表示某一寄存器、存储单元或表达式的内容。 (()) 表示某一寄存器、存储单元或表达式的内容的内容。 @ 表示其后的寄存器或表达式的值为操作数的地址.
18
2.1.3 汇编语言程序分析与设计 3、汇编程序的基本框架 LJMP MAIN ;程序跳入主程序MAIN中
汇编语言程序分析与设计 3、汇编程序的基本框架 ORG H ;程序初始化入口地址 LJMP MAIN ;程序跳入主程序MAIN中 ORG H ;外部中断0程序入口地址 LJMP INT_ ;程序跳入中断子程序INT_0中 ORG BH ;定时/计数器T0程序入口地址 LJMP T_ ;程序跳入中断子程序T_0中 ORG H ;外部中断1程序入口地址 LJMP INT_ ;程序跳入中断子程序INT_1中 ORG BH ;定时/计数器T1程序入口地址 LJMP T_ ;程序跳入中断子程序T_1中 ORG H ;串口中断程序入口地址 LJMP CK ;程序跳入中断子程序CK中 ORG H ;主程序入口地址 MAIN: …… ;主程序部分 …… ;程序语句
19
2.1.3 汇编语言程序分析与设计 3、汇编程序的基本框架 …… ;程序语句 RETI ;中断返回
汇编语言程序分析与设计 3、汇编程序的基本框架 INT_0: …… ;外部中断0子程序部分 …… ;程序语句 RETI ;中断返回 T_0: …… ;定时/计数器0子程序部分 INT_1: …… ;外部中断1子程序部分 T_1: …… ;定时/计数器1子程序部分 CK: …… ;串口中断子程序部分 DELAY: …… ;子程序部分 RET ;子程序返回 END ;程序结束
20
2.1.3 汇编语言程序分析与设计 3、汇编程序的基本框架 (1)每个程序的框架都必须要有程序的初始化地址和主程序两部分组成。
汇编语言程序分析与设计 3、汇编程序的基本框架 (1)每个程序的框架都必须要有程序的初始化地址和主程序两部分组成。 (2)在汇编程序中,数据既可以用二进制数(以“B”结尾),也可以使用十进制数(以“D”结尾或省略不写)和十六进制数(以“H”结尾),在程序中一般使用十六进制,如下所示为同一数值的三种表示方法: # B ;10的二进制表示 # ;10的十进制表示 #0AH ;10的十六进制表示 注意:以十六进制数表示时当数字开头是A~F时,要在数字 前面加上0。如下列所示: #B3H #0B3H
21
2.1.3 汇编语言程序分析与设计 使用示例 (1)数据传送指令:MOV
汇编语言程序分析与设计 4、任务相关汇编指令 (1)数据传送指令:MOV 使用格式:MOV <目的操作数>,<源操作数> 使用说明:MOV指令是把源操作数提供的数据传送给目的操作数所指定的单元,源操作数的内容不变。 使用示例 MOV A, #41H ;将立即数41H送入累加器A中 MOV A, 41H ;将41H单元中的内容送入累加器A中 MOV @R1, A ;将A中的内容送入以R1的内容为地址的单元中 MOV R1, 70H ;将70H单元中的内容送入当前寄存器R1中 MOV P0,70H ;将70H单元中的内容送入P0口
22
2.1.3 汇编语言程序分析与设计 使用示例 1FFEH AJMP 27BCH 4、任务相关汇编指令
汇编语言程序分析与设计 4、任务相关汇编指令 (2)无条件跳转指令:LJMP、AJMP、SJMP、JMP ◆ 绝对无条件转移指令:AJMP 使用格式:AJMP addr11 使用说明:绝对无条件转移指令AJMP中提供11位地址,在使用绝对转移指令时,要求转移的目标地址必须和AJMP指令的下一条指令的首字节在同一个2K字节的存储区域内,即PC+2后的值与目标地址的高5位a15~a11应该相同 . 使用示例 1FFEH AJMP 27BCH
23
2.1.3 汇编语言程序分析与设计 使用示例 LJMP MAIN ;程序跳入MAIN中 4、任务相关汇编指令
汇编语言程序分析与设计 4、任务相关汇编指令 (2)无条件跳转指令:LJMP、AJMP、SJMP、JMP ◆ 长跳转指令:LJMP 使用格式:LJMP addr16 使用说明:长跳转指令给出的16位字节地址直接送给程序计数器PC,程序可以转到程序内存0000H~0FFFFH范围内的任何一个单元。 使用示例 LJMP MAIN ;程序跳入MAIN中
24
2.1.3 汇编语言程序分析与设计 使用示例 HERE: SJMP HERE 或 SJMP $ 4、任务相关汇编指令
汇编语言程序分析与设计 4、任务相关汇编指令 (2)无条件跳转指令:LJMP、AJMP、SJMP、JMP ◆ 相对转移指令:SJMP 使用格式:SJMP rel 使用说明:相对转移指令给出的rel为转移偏移量,它是一个以补码形式表示的有符号数,指令转移目的地址为当前指令的下一条指令的地址与偏移量rel的和 。 同时在51系列指令系统中没有暂停指令,可以使用SJMP指令实现动态停机。 使用示例 HERE: SJMP HERE 或 SJMP $
25
2.1.3 汇编语言程序分析与设计 使用示例 MOV DPTR,#JAB JMP @A+DPTR ……… 4、任务相关汇编指令
汇编语言程序分析与设计 4、任务相关汇编指令 (2)无条件跳转指令:LJMP、AJMP、SJMP、JMP ◆ 间接转移指令:JMP 使用格式:JMP @A+DPTR 使用说明:间接转移指令的目标地址,是由数据指针DPTR的内容加上累加器A的内容形成的,A和DPTR的内容均为无符号数。本指令可以在程序运行过程中动态决定转移的目标地址,是一条极其有用的多分支选择转移指令,又称为散转指令。 使用示例 MOV DPTR,#JAB JMP @A+DPTR ………
26
2.1.3 汇编语言程序分析与设计 4、任务相关汇编指令 (3)减1非0条件转移指令:DJNZ
汇编语言程序分析与设计 4、任务相关汇编指令 (3)减1非0条件转移指令:DJNZ 使用格式:DJNZ <寄存器/地址> ,<相对地址> 示例: DJNZ R1 , X1 ;先对R1中的数进行减1,然后再进行判断是否等于0, ;若是,则执行下一条程序,否则,跳转到X1中执行。 延时程序可参见如下所示: MOV R0 , #0FFH ;循环次数赋值 X1: DJNZ R0 , X ;延时程序
27
2.1.3 汇编语言程序分析与设计 4、任务相关汇编指令 (4)子程序调用指令: LCALL 使用格式:LCALL addr16
汇编语言程序分析与设计 4、任务相关汇编指令 (4)子程序调用指令: LCALL 使用格式:LCALL addr16 使用说明:长调用指令 16位的目标地址,子程序可以设置在程序内存的任何一个单元,调用子程序时,只要调用子程序的地址或标号,程序就会转移到被调用的子程序中执行。 使用示例:LCALL DELAY ;调用标号为DELAY的子程序
28
2.1.3 汇编语言程序分析与设计 使用说明:子程序返回指令是当调用的子程序结束时,用于返回调用该子程序的下一条指令处执行。
汇编语言程序分析与设计 4、任务相关汇编指令 (5)绝对调用指令:ACALL 使用格式:ACALL addr11 使用说明:绝对调用指令ACALL中提供11位地址,和绝对转移指令AJMP一样,要求子程序的起始地址必须和ACALL指令的下一条指令的首字节(断点地址)在同一个2K字节存储区内。 使用示例: LOOP: ACALL 1100H (6)子程序返回:RET 使用说明:子程序返回指令是当调用的子程序结束时,用于返回调用该子程序的下一条指令处执行。
29
2.1.3 汇编语言程序分析与设计 4、任务相关汇编指令 使用说明:规定目标程序在程序存储器中所占空间的起始地址。 其格式一般如下:
汇编语言程序分析与设计 4、任务相关汇编指令 使用说明:规定目标程序在程序存储器中所占空间的起始地址。 其格式一般如下: ORG 16位地址 使用示例: ORG H ;表示以下内容从1000H开始的程序存储单元开始存放. (7)起始地址定义伪指令:ORG (8)汇编程序结束伪指令:END 使用说明:标志源程序的结束,即通知汇编程序不在继续往下汇编。在一个程序中只能有一条END指令,而且必须安排在源程序的末尾。
30
2.1.3 汇编语言程序分析与设计 5、汇编程序设计 根据图2-4所示的控制流程分析图,结合汇编语言指令编写出汇编语言控制程序。 汇编程序
汇编语言程序分析与设计 5、汇编程序设计 根据图2-4所示的控制流程分析图,结合汇编语言指令编写出汇编语言控制程序。 汇编 程序 主程序 MAIN 程序初始 部分 延时 子程序 DELAY 汇编程序
31
汇编语言程序分析与设计 6、程序的Keil调试与编译 (1)、选择调试模式
32
2.1.3 汇编语言程序分析与设计 6、程序的Keil调试与编译 (4) (2) (3) 断点的设置 编译程序 启动调试
汇编语言程序分析与设计 6、程序的Keil调试与编译 (4) 断点的设置 (2) 编译程序 (3) 启动调试 当程序编写完成后,点击按键,编译源程序,若编译成功,则在“Output windos”窗口中显示没有错误,并创建了“LED轮流闪烁控制.HEX”文件。 在uVision3中可以使用很多种不同的方法来定义断点,但最常用的有以下两个: Ⅰ、在文本编辑框中选定所在行,然后单击图标 。 Ⅱ、在文本编辑框中要设定断点的所在行标号前双击。 点击或在“Debug”下拉菜单中选择“Start/Stop Debug Session(Ctrl+F5)”命令可启动uVision3调试模式.
33
2.1.3 汇编语言程序分析与设计 CPU窗口:在“Project Windows”窗口的“Page”页中会显示CPU寄存器内存。
汇编语言程序分析与设计 6、程序的Keil调试与编译 (5)、各种数据窗口打开 CPU窗口:在“Project Windows”窗口的“Page”页中会显示CPU寄存器内存。 存储器窗口:最多可以通过4个不同的页观察4个不同的存储区,每页都能显示存储器中的内容。 I/O状态窗口:单击“I/O-Ports”选择自己想要查看的I/O状态窗口。
34
2.1.3 汇编语言程序分析与设计 (6)目标程序的执行
汇编语言程序分析与设计 6、程序的Keil调试与编译 (6)目标程序的执行 单步执行:单步执行又分为“进入子程序(Step(F11))”和“不进入子程序(Step Over (F10))”两种。 全速执行(Run(F5)):程序一条接一条快速向下执行,直到断点处或程序结束,中间过程不停止。
35
汇编语言程序分析与设计 6、程序的Keil调试与编译 黄色箭 头指向 当前执 行到的 程序行 打勾表示高电平
36
C语言程序分析与设计 1、C语言的基本结构
37
C语言程序分析与设计 1、C语言的基本结构 一个C语言源程序是由一个或若干个函数组成的,每一个函数完成相对独立的功能。在每个C程序都必须有(且仅有)一个主函数main(),其他函数可有可无。
38
2.1.4 C语言程序分析与设计 一个函数由两部分组成: 函数定义和函数体。 (1)函数定义
函数定义部分包括函数名、函数类型(表示函数返回值的类型)、函数属性、函数参数(形式参数)名、参数类型等。 (2)函数体 main()函数后面一对大括号内的部分称为函数体,函数体由定义数据类型的声明区部分和实现函数功能的程序部分组成。
39
2.1.4 C语言程序分析与设计 (3)预处理命令 例如:void delay(int x)
定义该函数名称为delay,函数类型为void,形式参数为整型变量x。{ }内是delay函数的函数体。 C语言程序当中可以含有预处理命令,例如上述框架中“#include <regx51.h>”,通常预处理命令放在源程序的最前面。
40
C语言程序分析与设计 1、如果函数的类型是int型,则可以不写int;如果函数没有返回值,应该将函数类型定义为void(空类型)。 2、由C语言编译器提供的函数一般称为标准函数,在调用标准函数前,必须在程序的开头先用预处理命令“#include”将包含该标准函数的头文件包含起来。 3、如果程序中包括很多函数,通常在主函数前面集中声明,然后再在主函数后面一一进行定义。若函数没有声明,则该函数的定义要写在调用语句的前面。
41
2.1.4 C语言程序分析与设计 2、C语言程序分析 C程序 根据图2-4所示的控制流程分析图,结合汇编语言指令编写出汇编语言控制程序。
程序初始 部分 C语言 程序 延时子函数 delay_ms( ) 主函数 main( ) C程序
42
C语言程序分析与设计 3、程序的Keil调试与编译 (1)选择调试模式
43
C语言程序分析与设计 当程序编写完成后,点击按键,编译源程序,若编译成功,则在“Output windos”窗口中显示没有错误,并创建了“LED轮流闪烁控制.HEX”文件。 点击或在“Debug”下拉菜单中选择“Start/Stop Debug Session(Ctrl+F5)”命令可启动uVision3调试模式 在uVision3中可以使用很多种不同的方法来定义断点,但最常用的有以下两个: Ⅰ、在文本编辑框中选定所在行,然后单击图标 。 Ⅱ、在文本编辑框中要设定断点的所在行标号前双击。
44
2.1.4 C语言程序分析与设计 3、程序的Keil调试与编译 (5)各种数据窗口打开
CPU窗口:在“Project Windows”窗口的“Page”页中会显示CPU寄存器内存。 存储器窗口:最多可以通过4个不同的页观察4个不同的存储区,每页都能显示存储器中的内容。 I/O状态窗口:单击“I/O-Ports”选择自己想要查看的I/O状态窗口。
45
C语言程序分析与设计 3、程序的Keil调试与编译 (6)目标程序的执行 单步执行:单步执行又分为“进入子程序(Step(F11))”和“不进入子程序(Step Over(F10))”两种。 全速执行(Run(F5)):程序一条接一条快速向下执行,直到断点处或程序结束,中间过程不停止。
46
C语言程序分析与设计 3、程序的Keil调试与编译 黄色箭 头指向 当前执 行到的 程序行 打勾表示高电平
47
2.1.5 基于Proteus的调试与仿真 1、创建Proteus仿真电路图 (1)列出元器件表;(2)绘制仿真电路图
48
2.1.5 基于Proteus的调试与仿真 修改Keil安装目录下的Tools.ini文件,在C51字段中加入TDRV11=BIN\VDM51.DLL (“PROTEUS 6 EMULATOR”)并保存。 3 2 将Keil安装目录\C51\BIN中的VDM51.dll文件复制到Proteus软件的安装目录Proteus\MODELS目录下 安装插件vdmagdi.exe(注意:应把插件安装在Keil3的安装目录下) 1
49
2.1.5 基于Proteus的调试与仿真 修改Tools.ini文件窗口
50
2.1.5 基于Proteus的调试与仿真 (4)打开“LED轮流闪烁控制.DSN”文件,在Proteus的“Debug”菜单中选中“Use Remote Debug Monitor(远程监控)”。右键选中STC89C51单片机,在弹出的对话框“Program File”项中,导入在Keil中生成的HEX文件。
51
2.1.5 基于Proteus的调试与仿真 (5)Keil打开“LED轮流闪烁控制.UV2”,打开窗口“Option for Target‘工程名’”。在Debug选项中右栏上部的下拉菜单选中Proteus VSM Simulator。点击进入Settings窗口,设置IP为 ,端口号为8000。
52
2.1.5 基于Proteus的调试与仿真 (6)在Keil中点击,使用单步执行来调试程序,同时在Proteus中查看直观的仿真结果。
点亮第一盏LED 高点平点亮 低电平熄灭
53
2.1.5 基于Proteus的调试与仿真 2、Proteus与Keil联调 点亮第二盏LED 低电平熄灭 高电平点亮
54
2.1.5 基于Proteus的调试与仿真 3、Proteus仿真运行
55
2.1.5 基于Proteus的调试与仿真 仿真运行视频
Similar presentations