版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目一 发光二极管LED点亮控制 教学目的了解单片机的内部结构与主要型号;掌握单片机引脚功能;掌握单片机I/O口的基本功能;掌握用I/O口实现简单控制的方法;利用单片机的I/O口实现LED闪烁的控制。工作模块一 点亮一个发光二极管工作任务使用AT89S52单片机,P1.0引脚接发光二极管(LED)的阴极,通过C语言程序控制,从P1.0引脚输出低电平,使发光二极管点亮。 PROTEUS简介PROTEUS是英国Labcenter Electronics公司开发的多功能EDA软件。PROTEUS不仅是模拟电路、数字电路、模数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台
2、。它实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。 LED控制电路按照工作任务要求,点亮一个LED电路是由AT89S52单片机和1个LED电路构成。AT89S52单片机是美国ATMEL公司生产的低电压、高性能8位单片机,具有丰富的内部资源, 使用AT89S52单片机无须外部存储器。 用PROTEUS设计第一个LED控制电路新建设计文件保存设计文件选取元器件放置元器件 编辑元器件 放置终端 连线 属性设置 电气规则检测 工作过程P1.0引脚接发光二极管(LED)的阴极,P1.0引脚输出低电平时,发光二极管
3、点亮。 问题: 为什么P1.0引脚输出低电平,发光二极管点亮?通过程序控制,使P1.0引脚输出低电平,使发光二极管点亮。问题: 程序怎么使P1口的引脚输出低电平? 下面我们来看一下程序,就可以找到答案。LED点亮程序#include /包含AT89X52.H头文件sbit LED=P10; /定义LED是P1.0引脚对应的变量名void main (void) LED=0; / P1.0=0,LED点亮 while(1);KEIL C51(P32)Keil C51 是德国Keil软件公司开发的基于8051 内核的微控制器软件开发平台,是51系列单片机C语言软件开发系统,是目前开发8051 内核
4、单片机的主流工具。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。Vision2 集成开发环境可以完成从工程建立和管理、编译、连接、目标代码的生成、软件仿真和硬件仿真等完整的开发流程。 用KEIL C51编写第一个C语言程序 建立第一个C程序项目建立工程文件建立源文件加载源文件设置工程的配置参数进行编译和连接进入调试模式全速运行程序用PROTEUS仿真运行调试 加载“点亮一个LED.hex ”目标代码文件打开Proteus “点亮一个LED”电路。双击单片机“AT89S52”,在弹出的“编辑元件”对话框中单击“Program File”栏的打开按钮,在弹
5、出的“选择文件名”对话框找到前面编译生成的“点亮一个LED.hex ”HEX文件,单击“打开“按钮,完成“点亮一个LED.hex ”HEX文件加载。将“Clock Frequency”栏中的频率设为12MHz,单击“确定”,即可完成加载目标代码文件。 仿真运行调试 单击仿真工具栏“运行”按钮,单片机全速运行程序。 认识单片机单片机实质上是一个芯片(P7) C P U 存 储 器定 时 器 / 计 数 器 中 断 系 统P0-P3TxDRxD TINT并行I/O口串行I/O口单片机的发展 第一阶段(1974-1976年)为单片机初级阶段由于受工艺及集成度的限制,单片机采用双片形式,且功能比较简单
6、。第二阶段(1976-1978年)为低性能单片机阶段单片机采用单芯片形式,是“小而全”。第三阶段(1978-1982年)为高性能单片机阶段,也是单片机普及阶段第四阶段(1982年以后)为16位单片机阶段单片机的特点 由于单片机是在一块芯片上集成了一台微型计算机所需的CPU、存储器、输入/输出部件和时钟电路等。因此它具有体积小,使用灵活、成本低、易于产品化、抗干扰能力强,可在各种恶劣环境下可靠地工作等特点。体积小、重量轻,价格低、功能强,电源单一、功耗低,可靠性高、抗干扰能力强;使用方便灵活、通用性强;目前大多数单片机采用哈佛(Harvard)结构体系;突出控制功能的指令系统;较低的处理速度和较
7、小的存储容量。单片机的应用 单片机主要应用在以下几个方面: 家用电器智能卡智能仪器仪表网络与通信工业控制单片机的分类单片机可分为通用型单片机和专用型单片机两大类。通用型单片机是把可开发资源全部提供给使用者的微控制器。我们通常所说的单片机即指通用型单片机。专用型单片机则是为过程控制、参数检测、信号处理等方面的特殊需要而设计的单片机。按片内不同程序存储器的配置来分片内带ROM、片内带EPROM型、片内无ROM按片内不同容量的存储器配置来分51子系列型(是基本型)、52子系列型(是增强型)按芯片的半导体制造工艺上的不同来分HMOS工艺型、CHMOS工艺型(用“C”表示)按所能适应的环境温度范围,可划
8、分为三个等级:070民用级、40+85工业级、65+125军用级。MCS-51单片机MCS-51是美国Intel公司的8位高档单片机系列,也是我国目前应用最为广泛的一种单片机系列。8051/80C51是整个MCS-51系列单片机的核心。51系列单片机源于Intel公司的MCS-51系列,在Intel公司将MCS-51系列单片机实行技术开放政策之后,许多公司都以MCS-51中的基础结构8051为基核推出了许多各具特色、具有优异性能的单片机,如Philips、Atmel等。这样,把这些厂家以8051为基核推出的各种型号的兼容型单片机统称为51系列单片机。Atmel公司的AT89系列单片机AT89系
9、列单片机不但具有一般MCS-51单片机的所有特性,而且其Flash程序存储器可以用电擦除方式瞬间擦除、改写, 写入单片机内的程序还可以进行加密。 型号快闪ROM片内RAM寻址范围并行口线串行口中断源定时器AT89C514K128264K3215216AT89C528K256264K3216316AT89C20512K12824K1515216AT89C40514K12824K1515216AT89S514K128264K3215216AT89S528K256264K3216316单片机硬件结构(P10)时钟电路CPUROMRAMT0 T1中断系统串行接口并行接口P0 P1 P2 P3TXD R
10、XDINT0 INT1定时计数器中央处理器CPU:8位,运算和控制功能内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。定时/计数器:两个16位的定时/计数器,实现定时或计数功能。并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源(外中断2个,定时/计数中断2 个,串行中断1个)时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ复位电路中央处理器(CPU)中央处理器是单片机的核心,完成运算和控制功能。MCS-
11、51的CPU能处理8位二进制数或代码。内部数据存储器(内部RAM)芯片中共有256个RAM单元前128单元,作为供用户使用的寄存器和用于存放可读写的数据;后128单元被专用寄存器占用。通常所说的内部数据存储器就是指前128单元,简称内部RAM。内部程序存储器(内部ROM)芯片中共有4 KB个ROM单元。用于存放程序、原始数据或表格,因此,称之为程序存储器,简称内部ROM。定时/计数器两个16位的定时/计数器。实现定时或计数功能,并以其定时或计数结果对计算机进行控制。并行I/O口4个8位的I/O口(P0、P1、P2、P3)实现数据的并行输入/输出串行口一个全双工的串行口,以实现单片机和其它设备之
12、间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。中断控制系统5个中断源,即外中断两个,定时/计数中断两个,串行中断一个。全部中断分为高级和低级共两个优先级别。AT89S52单片机结构 一个8位CPU;一个片内振荡器及时钟电路;8K字节可重复擦写的Flash闪速存储器三级加密程序存储器;2568字节内部RAM;3个16位定时器/计数器;32条可编程的I/O线(四个8位并行I/O端口);一个可编程全双工串行口;具有8个中断源、两个优先级嵌套中断结构。 AT89S52引脚功能(P11) 电源线:VCC(+5V)、VSS(地)振荡电路:XTAL1、XTAL
13、2复位引脚:RST并行口:P0、P1、P2、P3EA:访问程序存储控制信号PSEN:外部ROM读选通信号ALE:地址锁存控制信号P3口线的第二功能AT89S52引脚功能电源引脚(2根) VCC(40脚):电源端,接+5V电源。VSS(20脚):接地端。时钟引脚(2根) XTAL1(19脚):接外部晶振和微调电容的一端。XTAL2(18脚):接外部晶振和微调电容的另一端。AT89S52引脚功能控制引脚(4根) RST/VPD(9脚):复位信号。 当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。ALE/PROG (30脚):地址锁存控制信号。 在系统扩展时,
14、ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。EA/VPP(31脚):访问程序存储控制信号。 当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。PSEN(29脚):片外ROM读选通信号端。 在读片外ROM时,PSEN有效,为低电平,以实现对片外ROM的读操作。AT89S52引脚功能P0口 (引脚32-39)普通I/O口P1口 (引脚1-8) 普通I/O口P2口 (引脚21-28)普通I/O口P3口 (引脚10-17)普通I/O口,或作为其他第二功能口P3口各引脚与第二功能表引脚
15、 第二功能 功能说明 P3.0RXD串行口输入P3.1TXD串行口输出P3.2INT0外部中断0输入P3.3INT1外部中断1输入P3.4T0定时器/计数器0计数输入P3.5T1定时器/计数器1计数输入P3.6WR片外RAM写选通信号(输出)P3.7RD片外RAM读选通信号(输出)最小单片机系统(P13)单片机5V电源,接地时钟电路(晶振)复位电路时钟电路时钟电路为单片机产生时钟脉冲序列。系统允许的晶振频率一般为6 MHz和12 MHz,电容C1和C2取30 pF左右。晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。时序的概念 单片机内的各种操作都是在一系列脉冲控制下进行的,而各脉
16、冲在时间上是有先后顺序的,这种顺序就称为时序。 单片机的时序定时单位从小到大依次为:时钟周期、状态周期、机器周期和指令周期。振荡周期是指晶体振荡器直接产生的振荡信号的周期,是振荡频率fosc的倒数,用P表示。 状态周期(或状态S)是振荡周期的两倍,它分为P1节拍和P2节拍。1个机器周期是由6个状态构成。执行一条指令所需的时间称为指令周期。各种周期的相互关系 复位电路单片机的复位引脚RST出现2个机器周期以上的高电平时,单片机就执行复位操作。 常见的复位操作有上电自动复位和按键手动复位两种方式 。上电自动复位是通过外部复位电路的电容充电来实现的。按键手动复位是通过复位端经电阻与电源VCC接通而实
17、现的,它兼备上电复位功能。复位功能复位是单片机的初始化操作。是把PC初始化为0000H,使CPU从0000H单元开始执行程序;同时还对其他一些寄存器有影响,但内部RAM的数据是不变的。 除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要按复位键重新启动。技能训练1-1 单片机最小系统只是单片机能满足工作的最低要求,它不能对外完成控制任务,实现人机对话。 单片机最小系统应用开关控制LED点亮电路设计 程序设计 工作模块2 -LED闪烁分析软件实现思路:点亮发光二极管延时(延时子程序)关闭发光二极管延时重复上述动作(循环)电路设计和前面一样C语言程序
18、#include sbit LED = P10;void Delay() unsigned char i, j; for (i=0;i255;i+) for (j=0;j255;j+);void main () while(1) LED = 0; Delay(); LED = 1; Delay(); 思考把Delay()延时函数放在后面如何处理?提示:在程序开头加入说明行(即子程序头加分号),既定义在前,使用再后。C语言程序的构成(P47) C语言的程序是由一个或多个函数构成的,最简单的程序只有一个main函数 。一个函数由两部份组成 函数的首部、即函数的第一行; 包括函数名、函数类型、函数属
19、性、函数参数(形参)名、参数类型。 函数体,即函数首部下面的大括号“”内的部份。函数体一般包括: 声明部份:定义所用到的变量,如void Delay()中的unsigned char i, j;。执行部份:由若干个语句组成。 标识符 C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。变量名、常数名、数组名、函数名、文件名与类型名等统称为标识符。标识符分为预定义标识符和用户标识符。 说明:C语言中大写字母与小写字母被认为是两个不同的字符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。 关键字 关键字则是编程语言保留的特殊标识符,它们具有固定名称和含
20、义,在程序编写中不允许标识符与关键字相同。在Keil C中的关键字除了有ANSI C标准的32个关键字外,还根据51单片机的特点扩展了相关的关键字。在Keil C的文本编辑器中编写C程序,系统把保留字以不同颜色显示,缺省颜色为天蓝色。 C语言基本语句(P52) C语言的程序是由一个或多个函数组成的,而函数又是由若干个语句组成的。语句是由一些基本字符和定义符按照C语言的语法规定组成的,每个语句以分号结束,分号是C语句的必要组成部份。C语言的语句可分为以下5种类型:表达式语句函数调用语句控制语句复合语句空语句 表达式语句表达式语句是由一个表达式加一个分号构成一个语句,其作用是计算表达式的值或改变变
21、量的值。它的一般形式是: 表达式; 即在表达式末尾加上分号,就变成了表达式语句。最典型的表达式语句是:在赋值表达式后加一个分号构成赋值语句。例如:a=3 是一个赋值表达式a=3; 是一个赋值语句函数调用语句由一个函数调用加一个分号构成函数调用语句,其作用是完成特定的功能。它的一般形式是:函数名(参数列表);例如mDelay(100); /调用延时函数,参数是100 控制语句控制语句用于完成一定的控制功能,以实现程序的各种结构方式。C语言有9种控制语句,可分为以下三类。条件判断语句:if语句、switch语句。循环语句:for语句、while语句、do-while语句。转向语句:break语句、
22、continue语句、goto语句、return语句。 复合语句复合语句是用一对大括号将若干条语句括起来的,也称为分程序,在语法上相当于一条语句。例如main() t=x; x=y; y=t; /复合语句 空语句只有一个分号的语句称为空语句。它的一般形式是: ; 空语句是什么操作也不执行,常用于作为循环语句中的循环体,表示循环体什么也不做。 注释 注释内容可以单独写在一行上,也可以写在一个语句之后;可以用/*.*/的形式为 C 程序的任何一部份作注释;Keil C也支持 C+风格的注释,就是用“/”引导的后面的语句是注释,例: P1_0=!P1_0; /取反 P1.0这种风格的注释,只对本行有
23、效,书写比较方便,所以在只需要一行注释的时候,我们往往采用这种格式。 技能拓展-音频控制应用 音频控制电路由单片机最小系统、放大滤波电路和扬声器构成。放大滤波电路由NPN三极管Q1、电阻R3、电容C4构成,Q1的基极经电阻R2接到P0.0引脚。 音频控制流程图 利用AT89S52端口输出脉冲方波,方波经放大滤波后,驱动扬声器发声,声音的频率高低由延时长短控制。 音频控制程序音频控制程序和模块二LED闪烁程序基本一样,下面写出程序不同之处。#include /包含AT89X52.H头文件sbit SPK=P00; /定义SPK是P0.0位对应的引用符号 SPK = 0; / P0.0=0,输出低
24、电平 Delay(); / 延时 SPK = 1; / P1.0=1,输出高电平 Delay(); 技能训练1-2 报警产生器P1.7引脚接一个开关;用P0.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号。要求1KHz信号响100ms,500Hz信号响200ms,交替进行;当开关合上报警信号响,当开关断开报警信号停止。 参考程序 #include #include unsigned char count; void dely500(void) /延时500us,即0.5ms unsigned char i; for(i=250;i0;i-) _nop_(); void main(v
25、oid) while(1) if(P1_7=0) for(count=200;count0;count-) /1KHz信号响100ms P1_0=P1_0; dely500(); for(count=200;count0;count-) /500Hz信号响200ms P1_0=P1_0; dely500(); dely500(); 项目二LED循环点亮教学目的掌握P0、P1、P2和P3功能及应用技能;掌握内部数据存储器的地址分配及特殊功能寄存器;掌握C语言数据类型、常量和变量;会利用单片机I/O口实现开关控制LED循环点亮和步进电机控制。 LED控制电路控制八只发光二极管按一定的规律循环点亮工
26、作过程P1口接发光二极管(LED)的阴极,P1口的管脚输出低电平时对应的发光二极管点亮。 问题: LED采用的是共阴极接法还是共阳极接法? 为什么P1口的管脚输出低电平,对应的发光二极管点亮?通过程序按一定的规律向P1口的管脚输出低电平和高电平,控制八只发光二极管循环点亮。问题: 程序怎么使P1口的管脚循环输出低电平和高电平?LED循环点亮功能实现分析 由于LED循环点亮电路的LED是采用共阳极接法,这样我们就可以通过“0”和“1”来控制LED的亮和灭。例如:在P1口输出十六进制数0 xfe(二进制11111110B),D1被点亮。LED循环点亮功能实现过程如下:8个LED全灭,控制码为0 x
27、ff;D1点亮,P1口输出0 xfe,取反为0 x01(二进制00000001B),初始控制码为0 x01;D2点亮,P1口输出0 xfd,取反为0 x02(二进制00000010B), 控制码为0 x02;D3点亮,P1口输出0 xfb,取反为0 x04(二进制00000100B), 控制码为0 x04;D8点亮,P1口输出0 x7f,取反为0 x80(二进制10000000B), 控制码为0 x80;重复第二步,这样就可以实现LED循环点亮。 LED控制程序(C语言)Void main() unsigned char i; unsigned char temp; P1 = 0 xff; /
28、十六进制全1,熄灭所有LED while(1) temp = 0 x01; /第一位为1 for (i=0;i8;i+) P1 = temp; /temp值取反送P1口 Delay(); temp = temp 1 ; /temp值左移一位 思 考如何改变循环点亮的方向?并行I/O端口电路 单片机有4组8位并行I/O端口,称为P0口、P1口、P2口和P3口;每个端口都各有8条I/O口线,每条I/O口线都能独立地用作输入或输出;P0口负载能力为8个TTL门电路,P1口、P2口和P3口负载能力为4个TTL门电路;归入特殊功能寄存器之列,具有字节寻址和位寻址功能。P0口的结构由1个数据输出锁存器(D
29、触发器)、2个三态数据输入缓冲器、1个输出控制电路和1个输出驱动电路组成。输出控制电路由1个转换开关MUX、1个与门及1个非门组成;输出驱动电路由一对场效应管(V1和V2)组成,其工作状态受输出控制端的控制。 P0口有两种功能通用I/O口地址/数据 分时复用总线 P0口作通用I/O口使用作为通用的I/O口使用时,内部的控制信号为低电平,封锁与门,将输出驱动电路的上拉场效应管(V1)截止,同时使多路转接电路MUX接通锁存器Q端的输出通路。注意 当P0口进行一般的I/O输出时,由于输出电路是漏极开路电路,因此必须外接上拉电阻才能有高电平输出;当P0口进行一般的I/O输入时,必须先向电路中的锁存器写
30、入“1”,使场效应管(V2)截止,以避免锁存器为“0”状态时对引脚读入的干扰,因为如果V2管是导通的,不论P0.X引脚上的状态如何,输入都会是低电平,将导致输入错误。 P0口作地址/数据分时复用总线使用 当输出地址或数据时,由内部发出控制信号,打开上面的与门,并使多路转接电路MUX将内部地址/数据线与驱动场效应管(V2)接通。若地址/数据线为1,则V1导通,V2截止,P0口输出为1;反之V1截止,V2导通,P0口输出为0。而当输入数据时,读引脚使三态数据输入缓冲器打开,数据信号则直接从引脚通过数据输入缓冲器进入内部总线。 P1口的结构P1口通常作为通用I/O口使用的,在电路结构上与P0口有一些
31、不同之处:首先它不再需要多路转接电路MUX;其次是电路的内部有上拉电阻,与场效应管共同组成输出驱动电路。 P1口工作过程当作为输出口时,1写入锁存器,Q(非)=0,场效应管截止,内部上拉电阻将电位拉至“1”,此时该口输出为1,当0写入锁存器,Q(非)=1, 场效应管导通,输出则为0。当作为输入口时,必须先向锁存器写1,Q(非)=0,场效应管截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平。 P2口的结构它由一个数据输出锁存器(D触发器)、两个三态数据输入缓冲器、一个转换开关MUX、一个数据输出驱动电路和控制电路组成。 P3口当作为I/O使用时,第二功能信号引线应保持高电平
32、,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。 当输出第二功能信号时,该位的锁存器应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。 【技能训练2-1】P0口外接上拉电阻 本电路设计和模块三LED循环点亮电路基本一样,差别是:使用了排阻、P0口接LED的阴极以及在P0口和LED阴极之间外接了上拉电阻 排阻 八个电阻的功能是完全一样的,加工到一个器件里面,这个器件通常称之为排阻。为了在电路板上占很小的地方,方便安装和生产,在电路设计时常常选择排阻。PR1和PR2都是排阻,阻值分别为4.7K*8和220*8。PR1排阻是上拉电阻,其功能是在这个引脚没有信号的时
33、候,起到电位上拉的作用。PR2和普通的电阻用途没有任何不同,在这里面起到限流作用,使通过LED的电流被限制在十几个毫安左右。 AT89C51 内存空间 内部程序存储器(FLASH)4K 字节 外部程序存储器(ROM )64K 字节 内部数据存储器(RAM )256 字节外部数据存储器(RAM )64K 字节低128 个字节 寄存器区(单元地址为00H1FH) 共有4组寄存器,每组8个寄存单元,各组都以R0R7作寄存单元编号。位寻址区(单元地址为20H2FH) 既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作。用户区(单元地址为30H7FH) 供用户使用的一般RAM区,没
34、有任何规定或限制,一般应用中常把堆栈开辟在此区中。高128 个字节 高128单元是供给专用寄存器使用的,也称为特殊功能寄存器,单元地址为80HFFH。特殊功能寄存器位地址空间 复位后内部各寄存器的数据值 PSW程序状态字 用于存放程序运行中的各种状态信息。CY (PSW.7) :高位进位标志位。常用“C”表示。 AC (PSW.6) :辅助进位标志位。 F0 (PSW.5 ) :用户标志位。 RS1(PSW.4) :寄存器组选择位1。 RS0(PSW.3) :寄存器组选择位0。 OV (PSW.2 ):溢出标志位。 (PSW.1) :保留位,无定义。 P (PSW.0 ) :奇偶校验位,若累加
35、器(A )中的“1”的位个数是奇数个则P1,偶数个则P0。 寄存器组的选择 ACC累加器8位寄存器,是最常用的专用寄存器,功能较多,地位重要。既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。B寄存器B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B存乘数。乘法操作后,乘积的高8位存于B中。除法运算时,B存除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。PC程序计数器作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64 KB。PC有自动加1功能
36、,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。DPTR 数据指针数据指针为16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即: DPH: DPTR高位字节 DPL DPTR低位字节SP堆栈指针堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。 问题:复位后,SP的值是多少? 为什么,堆栈通常设在用户区(30H7FH)?中断源向量地址 “头文件包含
37、”处理 所谓“头文件”是指一个文件将另外一个文件的内容全部包含进来。头文件一般在C:KELLC51INC下,INC文件夹里面有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。在单片机中用C语言编程时,往往第一行就是头文件或者其它的自定义头文件。特殊功能寄存器在AT89X52.H中定义 符号 P1_0 表示 P1.0 引脚 程序存储器 程序存储器是用于存放用户程序、数据和表格等。它是以程序计数器PC作为地址指针,MCS-51的程序计数器PC是16位的,所以MCS-51具有64KB程序存储器寻址空间。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为6
38、4kB,此时单片机的EA端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。 MCS-51ROM配置图 当EA=1时,程序从内部ROM开始执行,当PC值超过内部ROM容量时会自动转向外部ROM空间。当EA=0时,程序从外部存储器开始执行。 51子系列ROM配置图 52子系列ROM配置图 具有特殊功能的地址 启动地址单片机启动复位后,程序计数器的内容为0000H,所以系统必须从0000H单元开始执行程序。因而0000H是启动地址,也称为系统程序的
39、复位入口地址。中断服务程序入口地址 是专门用于存放中断服务程序的地址单元,中断响应后,按中断的类型,自动转到各自的入口地址去执行程序。 中断源入口地址外部中断00003H定时/计数器0000BH外部中断10013H定时/计数器1001BH串行中断0023H*定时器2溢出或T2EX(P1.1)端负跳002BH工作模块4 开关控制LED循环点亮 用P3.0作输入接开关SW,P1口作输出接8个LED,通过开关SW控制LED循环点亮。开关SW打开,LED循环点亮,开关SW合上,LED停止循环点亮。 开关控制LED循环点亮程序 #include /包含AT89X52.H头文件sbit SW=P30; /
40、定义SW是P3.0位对应的变量名void main() unsigned char i; unsigned char temp; P1 = 0 xff; /十六进制全1,熄灭所有LED while(1) temp = 0 x01; /第一位为1 for (i=0;i8;i+) while(SW!=0); P1 = temp; /temp值取反送P1口 Delay(); temp = temp 1 ; /temp值左移一位 C51数据类型 C51定义了标准C语言的所有数据类型;同时对标准C语言进行了扩展,更加注意对系统资源的合理利用,如表所示。 数据类型长度数值范围unsigned char1字
41、节0255char1字节-128+127unsigned int2字节065535int2字节-32768+32767unsigned long4字节04294967295long4字节-2147483648+2147483647float4字节1.175494E-383.402823E+38*13字节对象的地址bit位0或1sfr1字节0255sfr162字节065535sbit位0或1C51基本数据类型 char字符类型长度是一个字节(8位) int整型长度为两个字节(16位) long长整型 长度为四个字节(32位) float浮点型长度为四个字节(32位) * 指针型 指针型本身就是一
42、个变量,在这个变量中存放的是指向另一个数据的地址。这个指针变量要占据一定的内存单元,在C51中它的长度一般为13个字节。 C51扩展的数据类型 bit位变量 sfr特殊功能寄存器 sfr16 16位特殊功能寄存器 sbit可寻址位 bit位变量 bit位变量可以将与MCS-51硬件特性操作有关的定义成位变量。位变量必须定位在MCS-51单片机内部RAM的位寻址空间中。但不能定义位指针,也不能定义位数组。bit位变量的值就是一个二进制位,不是0就是1,类似True和False。例如: bit flag; / flag为bit位变量,其值是0或1 sfr特殊功能寄存器这种定义方法与标准C语言不兼容
43、,只适用于对MCS-51系列单片机进行C语言编程。Sfr占用一个字节,数值范围为0255。利用它可以访问51单片机内部的所有特殊功能寄存器。特殊功能寄存器C51定义的一般语法格式如下: sfr 特殊功能寄存器名=特殊功能寄存器的字节地址;例如: sfr P1 = 0 x90;这一句定义了P1为P1端口在内部的寄存器。又如: sfr SCON=0 x98;/ 串口控制寄存器,地址为0 x98 sfr TMOD=0 x89;/ 定时器/计数器方式控制寄存器sfr16 16位特殊功能寄存器sfr16占用两个字节。在许多新的MCS-51系列单片机中,有时会使用两个连续地址的特殊功能寄存器来指定一个16
44、位的值。如52子系列的定时器/计数器2。为了有效地访问这类SFR,可使用关键字“sfr16”来定义,16位SFR定义语句的语法格式与8位SFR相同,只是“=”后面的地址必须用16位SFR的低字节地址,即低字节地址作为“sfr16”的定义地址。例如: sfr16 T2 = 0 xCC /定时器/计数器2:T2低8位地址为0 xCC,T2高8位地址为0 xCD注意:这种定义适用于所有新的16位SFR,不能用于定时器/计数器0和1。 sbit可寻址位C51的扩充功能支持特殊位的定义,与SFR定义一样,关键字“sbit”用于定义某些特殊位,利用它可以访问芯内部部的RAM中的可寻址位或特殊功能寄存器中的
45、可寻址位。如先前我们定义: sfr P1 = 0 x90; 因P1端口的寄存器是可位寻址的,所以我们可以定义: sbit P1_1 = P11;/P1_1为P1中的P1.1引脚这样我们在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作了。在C语言里,由于P1.1不是一个合法的C语言变量名,得给它另起一个名字,这里起的名为 P1_1,所以必须给它们建立联系,这里使用了C51的关键字sbit来定义 sbit 的用法有三种格式 第一种格式sbit bit-name = sfr-nameint constant;其中“bit-name”是一个寻址位符号名,该位符号名必须是MCS-51单片机
46、中规定的位名称; “sfr-name”必须是已定义过的SFR的名字;“”后的整常数是寻址位在特殊功能寄存器“sfr-name”中的位号,必须是07范围中的数。例如:sfr PSW=0 xD0; / 定义PSW寄存器地址为0 xD0sbit OV=PSW2; / 定义OV位为PSW.2,地址为0 xD2sbit CY=PSW7; / 定义CY位为PSW.7,地址为0 xD7 sbit 的用法有三种格式第二种格式:sbit bit-name = int constantint constant;其中“=”后的int constant为寻址地址位所在的特殊功能寄存器的字节地址;“”符号后的int c
47、onstant为寻址位在特殊功能寄存器中的位号。例如:sbit OV=0 xD02;/定义OV位地址是0 xD0字节中的第2位sbit CY=0 xD07;/定义CY位地址是0 xD0字节中的第7位 sbit 的用法有三种格式第三种格式:sbit bit-name = int constant;其中“=”后的int constant为寻址位的绝对位地址。例如:sbit OV=0 xD2; /定义OV位地址为0 xD2sbit CY=0 xD7; /定义CY位地址为0 xD7 C语言常量与变量 常量是在程序运行过程中不能改变的,而变量是可以在程序运行过程中不断变化的。变量的定义可以使用所有C51
48、编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位变量。 常量 常量可用在不必改变值的场合,如固定的数据表,字库等。 常量的定义方式有几种,下面来加以说明。#difine False 0 x0; /用预定义语句可以定义常量#difine True 0 x1; /这里定义False为0,True为1 程序中用到False和True,在编译时,False替换为0,True替换为1。unsigned int code a=100; /用code把a定义在程序存储器中并赋值const unsigned int c=100; /用const定义c为无符号int常量并赋值 以上两
49、句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a+这样的赋值语句,编译时将会出错。 变量 变量就是一种在程序执行过程中其值能不断变化的。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: 存储种类数据类型存储器类型变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。 存储种类存储种类有四种自动(auto),缺省类型为自动(auto)外部(extern)静态(static)寄存器(register) 存储器类型 存储器类型的说
50、明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。 存储器类型说明data直接访问内部数据存储器(128字节),访问速度最快bdata可位寻址内部数据存储器(16字节),允许位与字节混合访问idata间接访问内部数据存储器(256字节),允许访问全部内部地址pdata分页访问外部数据存储器(256字节),用MOVX Ri指令访问xdata外部数据存储器(64KB),用MOVX DPTR指令访问code程序存储器(64KB),用MOVC A+DPTR指令访问存储模式 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区,这使访问数据非常快。在写小型
51、的应用程序时,变量和数据放在data内部数据存储器中是很好的,因为访问速度快;但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区,最多可有256字节。LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区,最多可有64KB。 工作模块5 步进电机控制 工作任务 使用AT89S52单片机,由P1口的P1.0、 P1.1 、P1.2和 P1.3四个引脚通过步进电机驱动电路分别接在四相步进电机的四相绕组,步进电
52、机的励磁方式采用四相双四拍,通过程序控制步进电机正转。 认识步进电机 步进电动机是“一步一步”的转动的一种电动机。电源输入的电信号是脉冲信号(脉冲电压),每输入一个电脉冲,电动机就转过一个固定角度。故而,也称为脉冲电动机。 步进电机的结构 步进电机是利用输入数字信号转换成机械能量的电气设备。以内部线圈绕线来区分步进电机,有4相和5相两种,使用5V及12V电源控制。一般来说,4相步进电机又称为2相双绕组步进电机,是最常用的一种电机。步进电机的工作过程 每输入一个脉冲信号,步进电机固定旋转一个步进角。例如: 若步进角为1.8的步进电机,如果输入200个脉冲信号,步进电机就会旋转200个步进角,且刚
53、好转一圈(2001.8=360)。由于步进电机旋转角度与输入脉冲数目成正比,只要控制输入的脉冲数目便可控制步进电机转动角度。因此,合适的回路控制常用于精确定位和精确定速。 步进电机线圈励磁的方式DC电流通过定子线圈建立磁场,称为励磁。步进电机励磁顺序:1相励磁顺序;2相励磁顺序;1-2相励磁顺序。 2相励磁顺序4相:表示电动机有四相绕组,分别为A、B、/A、/B绕组。2相励磁:表示每一种励磁状态都有两相绕组励磁。2相励磁顺序:四种励磁状态为一个循环。只要改变励磁顺序,就可以改变步进电机旋转方向。 正转:(A、B)(B,/A)(/A,/B)(/B,A)(A,B)反转:(A、B)(/B,A)(/A
54、,/B)(B,/A)(A,B)步进电机控制电路设计 步进电机驱动电路由ULN2003A和74LS04构成,其中ULN2003A驱动器是一个高电压、大电流的达灵顿对数组。由于ULN2003A的输入与TTL电平兼容,所以一般能直接连接到驱动组件或是负载上,例如:继电器、电机或是LED显示器等。电机正转功能实现分析 控制状态P1口控制码P1.3P1.2P1.1P1.0D相C相B相A相A相、B相绕组通电03H0011B相、C相绕组通电06H0110C相、D相绕组通电0CH1100D相、A相绕组通电09H1001步进电机控制程序设计 #include /由delay参数确定延迟时间 void mDela
55、y (unsigned int delay) unsigned int i; for(;delay 0; delay-) for(i=0;i124;i+); void main() while(1) P1=0 x03; / A、B绕组励磁 mDelay (50); P1=0 x06; / B、C绕组励磁 mDelay (50); P1=0 x0C; /C、D 绕组励磁 mDelay (50); P1=0 x09; /D、A绕组励磁 mDelay (50); 技能拓展ULN2003A驱动器应用 在电子电路应用上,大多要求具有大电流输出的能力,以便驱动各种类型的负载,驱动电路是电子设备输出电路中一
56、个重要的组成部分。在大型仪器系统中,经常要用到伺服马达、步进马达、各种电磁阀等驱动电压高和功率较大的组件。因此,像这种ULN2000和ULN2800等高电压、大电流的达灵顿晶体管数组的产品就被开发出来,从而控制大功率组件。由于这类组件功能强大、应用范围广。UN2000系列能够同时驱动7组负载,向ULN2800系列则能够同时驱动8组负载。 ULN2003A特点一般市面上较为常见的是ULN2003A。ULN2003A组件是一个高电压、大电流的达灵顿对数组,其中包含7个具备共射极的开集极达灵顿对。ULN2003A具有以下特点:电流增益高(大于1000mA);带负载能力强(输出电流大干500mA);温
57、度范围宽(-40o85o);工作电压高(大于50V)。 ULN2003A引脚功能 由于ULN2003A的输入与TTL电平兼容。所以一般能直接连接到驱动组件或是负载上。例如,继电器、DC马达或是LED显示器等。对于每一个驱动器来说,都包含了一个二极管,其阳极连接到输出端,而阴极连接到7个二极管的共通点上。外部的负载连接到电源供应点和驱动器的输出端之间。该电源供应为小于+50V的正电压。 【技能训练2-2】单片机驱动继电器电路设计通过ULN2003A的3个驱动器输出直接驱动3个继电器。每一个继电器线圈的端子连接到驱动器输出,另一端则涟接到供应电压上。连接多大的电压依赖继电器的规格。 项目三数码管显
58、示教学目的掌握数字、字符转换成显示段码的软件译码方法;掌握静态显示的原理;掌握动态显示的原理;掌握数码管程序设计的方法。P130工作模块6 数码管循环显示 09 利用AT89S51 单片机的P1 端口的P1.0P1.7 连接到一个共阴数码管的ah 的笔段上,数码管的公共端接地。在数码管上循环显示 09 数字。 工作模块6 数码管显示程序(C程序)#include unsigned char code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; unsigned char dispcount;void de
59、lay (void) unsigned char i,j,k; for(i=40;i0;i-) for(j=40;j0;j-) for(k=248;k0;k-); void main(void) while(1) for(dispcount=0;dispcount2的结果为真,而3b,a+bb+c,(a=3)=(b=5)在 C 语言中,没有专门的逻辑型变量,如果运算的结果是“真”,用数值“1”表示,而运算的结果是“假”则用数值“0”表示。例如:x1=32的结果是x1等于1 原因是32的结果是“真”,即其结果为1,该结果被“”号赋给了x1。又如:x2=3=2的结果是 x2=0,请自行分析。 逻辑
60、运算符C语言提供了三种逻辑运算符:“&”(逻辑与);“|”(逻辑或);“!”(逻辑非)。 逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子,称为逻辑表达式。C语言编译系统在给出逻辑运算的结果时:用“1”表示真,而用“0”表示假。在判断一个量是否是“真”时,以0代表“假”,而以非0代表“真”,这一点务必要注意。若a=10,则!a的值为0,因为10被作为真处理;如果a=-2,结果与上完全相同,初学时常会误以为负值为假,所以这里特别提醒注意;若a=10,b=20,则a&b的值为1,a|b的结果也为1。 if语句(P54)用if语句构成分支结构。分支结构又称选择结构,它体现了程序的判断能力。这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陶瓷工艺品制作师活动策划强化考核试卷含答案
- 校友录平台建设方案
- 2026年人教版初中英语九年级上册第7单元综合测试卷及答案
- 农林岗2026事业编面试模拟练习习题汇编含答案解析202
- 河北计算机岗事业编2026面试自测卷含答案
- 《心脏康复护理专家共识》解读
- 中小学预防火灾安全教育主题班会课件
- 2026年健康管理师健康信息学应用课件
- 慧择2026AI战略落地与组织转型 把AI从工具账号升级为可治理的劳动力资产 数字员工建设与治理方案
- 山东省青岛市四方区2026届中考数学仿真试卷含解析
- 沃尔玛商品汰换策略
- 雨课堂学堂在线学堂云《实验室安全教育(西南石油)》单元测试考核答案
- 2026年包头铁道职业技术学院单招职业技能测试题库附答案详解(满分必刷)
- 2025-2030中国硼矿行业营销模式及竞争格局分析研究报告
- 2025年中职(动漫与游戏制作)游戏特效设计试题及答案
- 企业薪酬激励制度设计与实施案例
- 江西省2018-2024年中考满分作文121篇
- 城市更新项目的房地产营销方案
- 地氟烷的临床应用
- 鼠疫相关知识培训课件
- 围手术期疼痛管理新进展
评论
0/150
提交评论