单片机-初学-1

说明:

知识与经验:

参考网址:

https://blog.csdn.net/qq_29350001/article/details/52241802            Keil uVision4使用总结

======================================

项目目标

通过构造单片机开发环境,了解单片机开发系统结构和流程。

建议学时

4学时

知识要点

1.单片机系统开发流程

2. 编程工具Keil C51

3. 程序烧录

技能掌握

安装USB驱动;利用KeilC开发环境编辑、编译、调试C51程序的初步过程;掌握实用程序烧录方法以及相关工具。

学习单片机之前,必须要掌握构建单片机开发环境的方法。本项目详细讲解USB驱动程序的安装方法,如何安装使用开发软件keil4,如何烧录程序和使用相关工具。

1.2.1单片机系统简介
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位的主频超过300M的高速单片机。
在单片机应用系统开发中,单片机是整个设计的核心。如图1-1所示,单片机应用系统由硬件和软件组成。硬件是应用系统的基础,软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。


1.2.2安装USB驱动程序
1.确保电脑联网。
2.USB口插入开发板后电脑会自动识别设备,自动联网安装驱动设备成功。
3.若电脑未自动安装驱动,打开设备管理器,找到插入开发板后弹出的新设备(未安装好驱动的情况下在“其他设备”中,带有黄色感叹号或问号),右键点击设备,选择“更新驱动程序软件“———“自动搜索更新的驱动程序软件”即可安装驱动。

1.2.3程序烧录方法和相关工具
STC单片机的烧写及实验,具体方法如下:
第一步:硬件连接
将配套的USB电源线,及串口线连上,在锁紧坐上放入STC的单片机,其他的硬件连接保存默认,打开电源,硬件连接完毕;
第二步:软件操作

1.打开软件,出现如下画面

需要设置的几个参数

第三步:下载程序

1.导入源程序

2.关闭单片机开发板套件的电源为下载做准备

3.下载程序

点击Download/下载,这时软件信息会提示操作过程,如下图:

4.当提示窗口的内容为给MCU上电时,即打开单片机开发板套件的电源,程序将会自动完成写入,程序写入后,在本书的学习工具(本书附带的单片机开发板套件)中,会立即演示出程序的效果。

1.2.4使用单片机开发软件keil4

编程工具Keil C51

KeilSoftware公司推出的KeilµVision 是一款基于Windows的软件平台,它是一种用于51系列单片机的集成开发环境(IDE—IntergratedDevelopment Enviroment)。目前的µVision4版本还可以支持ARM编程。µVision提供了功能强大的编辑器和调试器。编辑器可以像一般的文本编辑器一样对源代码进行编辑,调速器使用户快速地检查和修改程序。用户还可以选中变量和存储器来观察其值,并可在双层窗口中显示,还可对其进行适当的调整。

Keil同时支持C语言和汇编语言编程,本书只针对C语言开发。Keil C51编译器在遵循ANSI C标准的同时,为51单片机进行了特别的设计和扩展,能让用户使用在应用中需要的所有资源。

KeilC51的库函数含有100多种功能,其中大多数是可再入的。函数库支持所有的ANSIC的程序。库函数中的程序还为硬件提供特殊指令,例如nop、testbit、rol、ror等,方便了应用程序的开发。

任务1:用Keil C51编写程序

编程语言都是需要开发环境的,这样才能完成程序的编写、调试和编译。C51程序开发是在KeilµVision开发环境下进行,首先介绍该开发环境KeilµVision4。

软件启动

软件启动画面如图1-11所示。

1.点击“project --- New uVisionProject”新建一个工程,如图1-12所示。

2.在对话框中,给这个工程取个名test1后保存,不需要填后缀,如图1-13所示。注意默认的工程后缀与uVision3及uVision2版本不同了,为uvporj:

3.弹出一个对话框,在CPU类型下选择实际单片机型号。本例找到并选中“Atmel”下的AT89S51,如图1-14所示。 

4. 以上工程创建完毕,接下来开始建立一个源程序文本,如图1-15所示。

5.在源程序编辑区写入完整的C程序,如图所示。 

6.点击保存快捷键,刚开始出现保存对话框,在文件名框里输入源程序文件名名称,在这里笔者示例输入“test”,这个名称,同样大家可以随便命名。如图1-17所示。注意:如果您想用汇编语言,要带后缀名一定是“test. asm”,如果是C语言,则是“test . c”,然后保存,此时大家可以看到程序文本字体颜色已发生了变化,表明编译器生效。

7.接下来需要把刚创建的源程序文件加入到工程项目文件中,如图所示。

8.点击目标选项(Target Options)按钮,先选择目标(Target)标签,设置晶振,一般修改成12M,因12MHZ方便计算指令时间,如图1-19所示。

9.在Output标签栏选中Create HEX File,使编译器输出单片机需要的HEX文件,如图1-20所示。

10.保存后点击重新建造(Rebuild)按钮的进行编译,输出窗口2在文件没有错误情况下提示有hex文件输出,如图1-21所示。

C51程序开发与Windows中运行的项目工程的开发有所不同,在Windows中,一般程序的编译结果是后缀名为“.exe”的可执行文件,该文件在Windows系统中能直接运行,而单片机C51程序的开发属于嵌入式开发,遵循主流的交叉编译模式,即在宿主机(运行KeilµVision4的PC机)上开发编译,在目标机(51系列单片机)上运行。在宿主机上的编译结果为HEX文件,要经过编程器烧写到单片机的程序区(FlashROM)才能执行。当然也可以通过EDA仿真软件来执行。

=================================

项目2  了解开发板
 

项目目标

通过课堂加视频的讲解去了解本开发板

建议学时

2学时

知识要点 

1.BST-M51电路图

2.BST-M51学习板功能模块图

技能掌握

熟知BST-M51 开发板

使用开发板之前,必须熟悉各个模块的电路图以及功能。

2.2.1亚博BST-M51模块电路图

VCC+5V:从USB取出来的5V电源

CH340G_VCC:模块供电点

CH34OG_TXD:串行数据输出

CH340G_RXD:I:行数据输入

GND:模块接地

图2- 1 CH340烧录模块电路图

图2- 24位数码管电路图

LED数码管的a~g七个发光二极管。加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型。

图2- 3 WIFI模块电路图

单5V或3.3V供电工作

温度范围: -45°C ~ +85°C

尺寸:32mm x 20mm x 4.5mm

图2- 4红外发送模块电路图

图2- 5红外接收模块电路图

通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。

图2- 6亚博科技BST-M51学习板功能模块图

=============================================

项目点亮一个LED
 

项目目标

通过单片机最小系统点亮LED灯,了解单片机开发程序基础及系统结构和流程。

建议学时

8学时

知识要点

1.单片机系统开发流程

2.C51程序基础

3.进行程序烧写

技能掌握

1、了解发光二极管介绍,硬件。

2、建立工程、完成“点亮一个发光管”

掌握程序的编写、编译

3、C51的标识符和关键字;

4、常用数据类型;

5、运算符和表达式;

6、程序结构、函数、数组和指针;

7、预处理。

8、进行程序烧写

学习目标:学会用C语言控制单机,点亮开发板上的第1个LED发光管。

单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。让输入/输出口的P1.0连接一盏LED灯进行点亮。通过这一项目将整个开发流程展示出来,包括点亮LED灯,闪烁LED灯,控制闪烁时间多项任务。

1、LED发光二极管。

它是半导体二极管的一种,可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。

2、LED的工作原理。

LED的符号为:    LED的工作是有方向性的,只有当正级接到LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能正常工作的。

3、LED的原理图解析

开发板上面LED的原理图如右图,LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P1口,如果你想点亮一盏LED就对把单片机相对应的IO赋为低电平。

图3- 1 LED流水灯

1、C51的标识符和关键字

C语言的标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。标识符由字符串、数字和下划线等组成,第一个字符必须是字母或下划线。错误的标识符,编译时会有错误提示。由于C51中有些库函数的标识符是以下划线开头的,所以一般不要以下划线开头命名标识符。

例如:f-2,4am,a.m等均为错误标识符。

标准C语言定义了32个关键字,如表3-1所示:

表3-1   ANSI C关键字

表3-2   C51编译器扩充关键字

2、常量和变量 

常量又称为标量,它的值在程序执行过程中不能改变,常量的数据类型有整型、浮点型、字符型和字符串型等。

实际使用中用#define定义在程序中经常用到的常量,或者可能需要根据不同的情况进行更改的常量,例如译码地址。而不是在程序中直接使用常量值。这样一方面有助于提高程序的可读性,另一方面也便于程序的修改和维护,例如:

#definePI 3.14  //以后的编程中用PI代替浮点数常量3.14,便于阅读

#defineSYSCLK 12000000  //长整型常量用SYSCLK代替12MHz时钟

#defineTRUE  1  //用字符TRUE,在逻辑运算中代替1

#defineSTAR ‘*’  //用STAR表示字符“*”

#defineuint unsigned int  //用uint 代替unsigned int

变量是一种在程序执行过程中,其数值不断变化的量。C51规定变量必须先定义后使用。 

3、数据类型

变量都有相应的数据类型,C51的数据类型如表3-3所示。

1)char字符类型

char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型 unsigned char 和有符号字符类型 signed char,默认值为signed char 类型。 unsigned char 类型用字节中所有的位来表示数值,所能表达的数值范围是 0~255。 signed char类型用字节中最高位字节表示数据的符号,“0”表示正数,“1”表示负数,负数用补码表示。所能表示的数值范围是-128~+127。unsigned char常用于处理 ASCII 字符或用于处理小于或等于 255 的整型数。

2)int整型

int整型长度为两个字节,用于存放一个双字节数据。分有符号 int 整型数 signed int 和无符号整型数 unsigned int,默认值为 signedint 类型。signed int 表示的数值范围是-32768~+32767,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。 unsignedint 表示的数值范围是 0~65535。

3)long长整型

long长整型长度为四个字节,用于存放一个四字节数据。分有符号 long 长整型 signed long 和无符号长整型 unsigned long,默认值为signed long 类型。signed int 表示的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号,“0”表示正数,“1”表示负数。unsigned long 表示的数值范围是0~4294967295。

4)float浮点型

float浮点型在十进制中具有 7 位有效数字,是符合 IEEE-754 标准的单精度浮点型数据,占用四个字节。

5)指针型

指针型是一种特殊的数据类型,其本身就是一个变量,但在其中存放的是另一个数据的地址。在C51中,指针的长度一般是3个字节。根据所指向的变量类型的不同指针变量也有不同的类型,指针变量的类型也就表示了该指针指向的地址中的数据的类型。

6)bit位标量

bit位标量是C51的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是 0 就是 1,位变量的值可以取0(false)或1 (true)。对位变量进行定义的语法如下:

bitflag1;

bitsend_en=1;

7)sfr特殊功能寄存器

单片机内的各种控制寄存器、状态寄存器以及I/O端口锁存器、定时器、串行端口数据缓冲器是内部数据存储器的一部分,离散地分布在80H~FFH的地址空间范围内,这些寄存器统称特殊功能寄存器(SFR,SpecialFunction Registers )。

sfr类型的长度为一个字节,其定义方式如下:

sfr特殊功能寄存器名=地址常量;

说明“地址常量”就是所定义的特殊功能寄存器的地址,例如:

sfr  TMOD=0x89;  /*定义定时器/计数器方式控制寄存器TMOD的地址为89H*/

sfr  P1=0x90;  /*定义P1口的地址为90H*/

注意:在关键字sfr后面必须是一个名字,名字可以任意选取,但应符合一般的习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H~0FFH)。

8)sfr1616位特殊功能寄存器

在新一代的8051单片机中,特殊功能寄存器在功能上经常组合成16位来使用。为了有效地访问这种16位的特殊功能寄存器,可采用关键字sfrl6。sfrl6类型的长度为两个字节,其定义语法与8位SFR相同,但16位SFR的低端地址必须作为sfr16的定义地址。例如

sfr16T2=0CCH; //定义TIMER2,其地址为T2L=0CCH、T2H=0CDH。

9)sbit可寻址位

sbit同样是C51中一种扩充数据类型,利用它能访问芯片内部的 RAM 中的可寻址位或特殊功能寄存器中的可寻址位。例如:

PSW是可位寻址的SFR,其中各位可用sbit定义。

  sbit  CY=0Xd7;  /*定义进位标志CY的地址为D7H*

  sbit  AC=0xD0^6;  /*定义辅助进位标志AC的地址为D6H*/

  sbit  RS0=0XD0^3;  /*定义RS0的地址为D3H*/

注意:sfr和sbit只能在函数外使用,一般放在程序的开头

实际上大部分特殊功能寄存器及其可位寻址的位的定义在reg51.h、reg52.h等头文件中已经给出,使用时只需在源文件中包含相应的头文件,即可使用SFR及其可位寻址的位;而对于未定义的位,使用前必须先定义。例如:

#include<reg51.h>

sbit  P10=P1^0;

sbit  P12=P1^2;

main()

{

  P10=1;

  P12=0;

  PSW=0x08;

……

}

使用Keil C51编写程序

参考项目一的使用Keil 的方法,将该程序编写出来。如图3-2所示。

烧录程序

打开烧录软件,并且选择好单片机型号和串口。如图所示。

点击“打开程序文件”,打开之前编写好的程序。(.hex文件)如图所示。

程序烧入,点击右下角“下载/编程”。如图所示。

3.2.1点亮LED灯实战环节

显然,从LED原理图上看,只要P1.0输出为低电平就可以点亮LED灯了。

软件设计不用汇编,一律采用C51语言,便于理解和扩展。

图3- 6 LED点亮实物结果

==========================================

项目流水灯实验
 

项目目标

通过流水灯控制来了解C51程序。

建议学时

4学时

知识要点

1、掌握下列C语言知识点:宏定义、函数和函数调用、循环结构、while语句、关系运算和逻辑值

2、掌握流程图绘制。

3、完成闪烁灯的设计。

4、完成函数调用。

技能掌握

常用C51程序设计

前面学习了如何点亮LED灯,现在扩展到构成最简单的流水灯。本项目完成一个典型流水灯的设计,便于学生掌握C51语言的数据类型、程序结构、函数、数组等等基本概念。

4.2.1流水灯硬件实物

流水灯是由多个LED灯组成的。如图4-1所示。

图4- 1流水灯

4.2.2 流水灯原理图

编流水灯程序之前,必须懂得该单片机上面的流水灯原理。

图4- 2流水灯原理图

4.2.3流水灯实验理论知识

1、了解延时函数

汇编每条指令都占一定的时间(或者机器周期)的,如果让机器什么都不做,即空指令的话,机器就会延时,然后在计算好每次延时到底有多长,外面套一个循环(或者多重循环),根据想要的延时时间即可计算出来循环的次数,延时函数基本上都是这种原理,它的参数就是用来控制循环次数的。

实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。

2、编写精确的延时函数

1)使用定时器/计数器实现精确延时

2)软件延时与时间计算

在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。

2.1短暂延时

2.2在C51中嵌套汇编程序段实现延时

2.3使用示波器确定延时时间

2.4使用反汇编工具计算延时时间

3、认识一个For 循环语句

For(表达式1;表达式2;表达式3)

{语句(内部可为空)}

执行过程:

1)求解一次表达式1.

2)求解表达式2,若其值为真(非0即为真),则执行for中语句。然后执行第3步。否则结束for语句,直接跳出,不再执行第3步。

3)求解表达式3.

4)跳到第2步重复执行。

4、一个简单的延时函数

只需要了解,不需全记住,但学会调用它。

 /*------------------------------------------------

延时函数,含有输入参数unsigned intt,无返回值

 unsigned int是定义无符号整形变量,其值的范围是

  0~65535

 ------------------------------------------------*/

voidDelay(unsigned int t)

  {

while(--t);

 }

4.2.4定时器的结构

定时器功能由T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。

工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式。

控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态。

定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的:通过设置寄存器TMOD、TCON、TH0、TL0、TH1和TL1实现。TH0和TL0存放定时器T0的初值或计数结果。TH0存放高8位,TL0存放低8位;TH1和TL1存放定时器T1的初值或计数结果。TH1存放高8位,TL1 存放低8位;

4.2.5定时器的TMOD和TCON寄存器

1.  工作方式寄存器TMOD

TMOD格式如图4-4所示。

(1) GATE — 门控位

GATE=0  定时器的启动不受到外部中断请求信号的影响一般情况下GATE=0。

GATE=1  T0的启动受到 /INT0 (P3.2)控制,T1的启动还受到/INT1(P3.3)控制,只有当外部中断信号/INT0 和/INT1为高电平的时,才能启动定时器。

(2) M1、M0 — 工作方式选择位

(3) C/T* — 计数器模式和定时器模式选择位

  0:定时器模式。

  1:计数器模式。

2. 特殊功能寄存器TCON

TCON格式如图4-6所示

低4位与外部中断有关。高4位的功能如下:

(1) TF1、TF0 —计数溢出标志位

  定时器T0或T1计数溢出时,由硬件自动将此位置“1”;

  TFx可以由程序查询,也是定时中断的请求源;

(2) TR1、TR0 —计数运行控制位

  TRx=1:启动定时器/计数器工作

  TRx=0:停止定时器/计数器工作

4.2.6定时器工作方式

MCS-51的定时器T0有4种工作方式:  即:方式0,方式1,方式2,方式3。

MCS-51的定时器T1有3种工作方式:  即:方式0,方式1,方式2。

1.方式0

在这种方式下,16位寄存器TH1和TL1只用13位,由TH1的8位和TL1的低5位组成。TL1的高3位不定。

其定时时间为:

  (213-初值)×振荡周期×12

  例如:若晶振频率为12MHz,则最长的定时时间为(213-0)×(1/12)×12us=8.191ms

2.方式1

在这种方式下,16位寄存器TH1和TL1为16位的计数器,除位数外,其他与方式0相同。

其定时时间为:

  (216-初值)×振荡周期×12

  例如:若晶振频率为12MHz,则最长的定时时间为(216-0)×(1/12)×12us=65.536ms

3.方式2

     THx作为常数缓冲器,当TLx计数溢出时,在置“1”溢出标志TFx的同时,还自动的将THx中的初值送至TLx,使TLx从初值开始重新计数。

其定时时间为:

   (28-初值)×振荡周期×12

若晶振频率为12MHz,则最长的定时时间为(28-0)×(1/12)×12us=0.256ms

4.方式3 

T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。 

       当T0处于方式3时,T1仍可设置为方式0、方式1和方式2。当时由于TR1、TF1和T1的中断源都已被定时器T0占用,所以定时器T1仅有控制位C/T来决定其工作在定时方式或计数方式。当计数器计满溢出时,不能置位“TF1”,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或不需要中断的场合。

4.2.7定时器编程步骤

MCS-51单片机的定时器/计数器是可编程的,具体步骤如下:

(1)对TMOD赋值,以确定定时器的工作模式;

初值计算:

设计数器的最大值为M,则置入的初值X为:

计数方式:X=M-计数值

定时方式:由(M-X)T=定时值,得X=M-定时值/T

    T为计数周期,是单片机的机器周期。

(模式0: M为213=8192 ,模式1: M为216=65536,模式2和3: M为28=256)

例如:机器时钟频率为12MHZ,机器周期为1μs 时,

若工作在模式0,则最大定时值为:213×1μs =8.192ms

若工作在模式1,则最大定时值为:    216×1μs =65.536ms

(2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;

(3)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。

(4)查询溢出标志TFx的状态, 决定是否停止定时/计数器;

4.3.1 流水灯开发实战环节

注意:J1接上才能开始做流水灯模块实验

图4- 6流水灯实物结果

====================================

项目蜂鸣器实验
 

项目目标 

通过控制蜂鸣器发声来了解C51的I/O口。

建议学时 

4学时

需要掌握的知识

1.使用放大电路

2.蜂鸣器

需要掌握的技能 

懂得I/O口程序编写

学会设计放大电路

        本项目是单片机最小系统的简单应用。设计一个单片机的最小系统,利用P1.0引脚输出点位的变化,控制蜂鸣器的鸣叫,P1.0引脚的电位变化可以通过指令来控制。

5.2.1 蜂鸣器硬件实物

在图片上认识蜂鸣器:有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。

有源蜂鸣器和无源蜂鸣器

这里的“源”不是指电源。而是指震荡源。也就是说有源蜂鸣器内部带震荡源,所以只要一通电就会叫。
而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。
有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

无源蜂鸣器的优点是:

1)便宜,

2)声音频率可控,可以做出“多来米发索拉西”的效果。

3)在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是:程序控制方便。

蜂鸣器驱动电路

        由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。

蜂鸣器软件设计方法

        IO口电平取反方法:I/O口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O口的电平设置为高电平即可。

5.2.2 了解实验板蜂鸣器电路

5.2.3 蜂鸣器驱动电路

蜂鸣器驱动电路如图5-4所示。

5.2.4串行口的结构

单片机串口结构如图5-5所示。有两个物理上独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据。控制寄存器共有两个:特殊功能寄存器SCON和PCON。发送和接收引脚分别是TXD(P3.0)和RXD(P3.1)。

图5- 5单片机串口结构

1. 串行口控制寄存器SCON

字节地址98H,可位寻址,位地址为98H~9FH。格式如图5-6所示。

                                                              图5- 6串行口控制寄存器SCON

SCON中各位的功能请参考相关原理书籍,其中SM0、SM1两位编码所对应的4种工作方式见表5-1。有关4种通信方式描述见下一节。

表5-1SM0、SM1组合设置串行端口的工作方式 

(UART 是一个将并行输入转为串行输出的芯片,集成在单片机内,了解即可)(OSC:晶振频率) 

2.特殊功能寄存器PCON

字节地址为87H,不能位寻址。格式如图5-7所示。

图5- 7特殊功能寄存器PCON

    仅最高位SMOD与串口有关,SMOD:波特率选择位。当SMOD = 1时,要比SMOD = 0时的波特率加倍,所以也称SMOD位为波特率倍增位。

5.2.5串行口的4种工作方式和波特率

1.方式0

为同步移位寄存器输入/输出方式。该方式并不用于两个AT89S51单片机之间的异步串行通信,而是用于串行口外接移位寄存器,扩展并行I/O口。

方式0发送时,串行数据由P3.0(RXD端)送出,移位脉冲由P3.1(TXD端)送出。在移位脉冲的作用下,串行口发送缓冲器的数据逐位地从P3.0串行移入外接移位寄存器中。

方式0接收时,引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器以fosc/12的固定波特率采样RXD引脚的数据信息,当接收完8位数据时,中断标志RI置1,表示一帧数据接收完毕,可进行下一帧数据的接收

方式0时,SM2位(多机通信控制位)必须为0。

2.方式1

当SM0、SM1=01时,串行口设为方式1的双机串行通信。TXD脚和RXD脚分别用于发送和接收数据。

方式1发送时,数据位由TXD端输出,发送一帧信息为10位:1位起始位0,8位数据位(先低位)和1位停止位1。当CPU执行一条数据写SBUF的指令,就启动发送。发送开始时,内部发送控制信号变为有效,将起始位向TXD脚(P3.0)输出,此后每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD引脚输出一个数据位。8位数据位全部发送完毕后,中断标志位TI置1。

方式1接收时(REN = 1),数据从RXD(P3.1)引脚输入。当检测到起始位的负跳变,则开始接收。当一帧数据接收完毕后,同时满足以下两个条件,接收才有效。

(1)RI = 0,即上一帧数据接收完成时,RI = 1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。

(2)SM2 = 0或收到的停止位 = 1(方式1时,停止位已进入RB8),则将接收到的数据装入SBUF和RB8(装入的是停止位),且中断标志RI置“1”。

若不同时满足两个条件,收的数据不能装入SBUF,该帧数据将丢弃。

3.方式2 和方式3

方式2和方式3,为9位异步通信接口。每帧数据为11位,1位起始位0,8位数据位(先低位),1位可程控为1或0的第9位数据和1位停止位。除了波特率外,方式3和方式2相同。

方式2发送

发送前,先根据通信协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据标志位),然后将要发送的数据写入SBUF,即启动发送。TB8自动装入第9位数据位,逐一发送。发送完毕,使TI位置“1”。

方式2接收

SM0、SM1=10,且REN = 1时,以方式2接收数据。数据由RXD端输入,接收11位信息。当位检测逻辑采样到RXD的负跳变,判断起始位有效,便开始接收一帧信息。在接收完第9位数据后,需满足以下两个条件,才能将接收到的数据送入SBUF(接收缓冲器)。

(1)RI = 0,意味着接收缓冲器为空。

(2)SM2 = 0或接收到的第9位数据位RB8 = 1。

当满足上述两个条件时,收到的数据送SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”。若不满足这两个条件,接收的信息将被丢弃。

5.3.1 简单蜂鸣器发声实验

单片机的串口通信工作方式有4种,需要设置更多的寄存器。前面学习过的定时器与中断是单片机通信的基础。

5.3.2给前面任务的流水灯加入报警效果

程序二

/***************************************************

*实验名:流水灯报警

*实验效果:程序烧录进去后蜂鸣器配合流水灯发出声音

*************************************************/

图5- 9蜂鸣器实物结果

============================================

项目数码管静态显示
 

项目目标 

通过在4位数码管静态显示数字和字母掌握单片机的输出

建议学时 

4学时

需要掌握的知识

1.数码管的基本类型

2.数码管静态扫描

需要掌握的技能 

懂得数码管程序编写,Proteus常用外设和总线的绘制

         单片机也需要人机交互,掌握常用的输入和输出设备非常必要。本章选取了最常用的输出模块数码管来演示其典型程序的编制方法。

6.2.1  数码管静态显示理论知识

1、显示器及其接口

单片机系统中常用的显示器有:

发光二极管LED(Light Emitting Diode)显示器、液晶LCD(LiquidCrystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。

2、数码管实物如图所示

图6- 1数码管实物

6.2.2  数码管可显示内容和特点

可显示内容:数字、小数点和部分英文字符、符号。

特点:1、自发光、亮度高,特别适合环境亮度低的场合使用。2、牢固,不怕冲击。数码管是一种半导体发光器件,其基本单元是发光二极管。

6.2.3  LED显示器(数码管)的结构与原理

1、数码管的结构

LED显示器(数码管)系发光器件的一种。常用的LED发光器件有两类:数码管和点阵。

数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。根据内部发光二极管的接线形式可分为共阴极和共阳极两种。

使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。每段发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流的大小。

2、数码管显示原理

LED数码管的a~g七个发光二极管。加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型,这种组合称为字型码。共阳极和共阴极的字型码是不同的,下面进行分析。

3、静态显示驱动

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S52单片机可用的I/O端口才32个呢:),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

4、数码管驱动电路

要驱动1个四位数码管常见的有以下几种数码管驱动电路:

1.使用12个IO口

2.P2.4-P2.7驱动位选,IO口直接驱动位选

3.P0驱动段选,IO口直接驱动段选

6.2.4  LED显示二种接法

1、使用LED显示器时,要注意区分这两种不同的接法。为了

显示数字或字符,必须对数字或字符进行编码。七段数码

管加上一个小数点,共计8段。因此为LED显示器提供的编

码正好是一个字节。BST实验板用共阴LED显示器。如图所示。

图6- 3LED显示接法

2、LED数码管显示分析

LED数码管的结构:①共阳与共阴

图6- 4 LED数码管的结构

单片机系统扩展LED数码管时多用共阳LED:

共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很

小;而共阴数码管段笔画是用高电平(“1”)点亮的,要求驱动功率较

大。

通常每个段笔画要串一个数百欧姆的降压电阻。

6.3 项目实施

6.3.1  数码管静态显示实战环节

程序一

/************************************

*实验名:数码管静态显示

*实验效果:第一个数码管显示字符“b”

************************************/

==============================================

项目 7 数码管动态显示
 

项目目标

了解数码管动态显示原理,掌握其编程方法。

建议学时

4学时

知识要点

1.数组、元素、利用数组实现查表。

2.局部变量和全局变量的作用域、可见性。

        通过演示数码管动态显示的操作过程,穿插讲解以下知识点:数组、元素、利用数组实现查表。局部变量和全局变量的作用域、可见性等。

7.2.1  数码管动态显示理论知识

复习:1位数码管和单片机的连接,其上显示1位十进制数的方法。

问题的提出:

1、如何显示4位十进制数?

  用4个1位数码管拼成。

2、8个1位数码管和单片机如何连接

      a、静态显示的连接方式、静态显示的优缺点(优点:不需要动态刷新;缺点:占用IO口线多)。

      b、动态显示的连接方式(所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效)、动态显示的优缺点(缺点:需要动态刷新;优点:占用IO口线少)。

         4位及4位以上比较适合用动态显示,为了方便使用,市售的4位一体数码管,内部已经按动态显示的连接方式连好了。

7.2.2  动态扫描的原理

在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候,怎么让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示,利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像看的电影是有一帧一帧的画面显示的,当速度够快的时候看到它就是动态的。当显示数码管的速度够快的时候,也就可以看到它们是同时显示了。

7.2.3  数码管的动态显示原理

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

7.3.1  数码管动态显示实战环节

实验代码数码管动态显示1

/**************************************************

*实验名:数码管动态显示

*实验效果:在4位一体数码管左数第4位显示4,过1秒,

*在左数第3位显示3,过1秒,在左数第2位显示2,过1秒,

*在左数第1位显示1,上述过程不断循环

****************************************************/

图7- 4数码管的动态显示实物

================================================

项目 8 独立键盘输入
 

项目目标

单片机也需要人机交互,掌握常用的输入和输出设备非常必要。本章选取了最常用的输入模块键盘来演示其典型程序的编制方法。

建议学时

4学时

知识要点

1. 认识各种按键

2. P3引脚

3.IF语句(条件分支语句)

4. 键盘种类

       单片机也需要人机交互,掌握常用的输入和输出设备非常必要。本章选取了最常用的输入模块键盘来演示其典型程序的编制方法。

8.2.1独立键盘输入理论知识

P3口第二功能表

图8- 1 P3口第二功能表

P3.0—P3.7:双功能口(内置了上拉电阻) 它具有特

定的第二功能。

在不使用它的第二功能时它就是普通的通用准双向I/O

口。

如何检测键盘输入

键盘的分类

独立式键盘电路原理。

编写一个简单的键盘输入程序:按下KEY1,用LED显示出信号

读端口就是读Pn端口寄存器;读引脚就是读该引脚在Pn端口寄存器中的对应位,通过引用Pn端口寄存器的值,或者引用Pn端口寄存器中的对应位,就可以实现读端口或者读引脚。

IF语句

键盘输入检测的一种基本方法:轮询法。

键按下和释放时,输入信号的抖动现象,如何进行键盘软件消抖。

IF语句(条件分支语句)

if(条件) 语句

语句可以是复合语句

复合语句:用 {}将多条语句组合在一起而形成的一种语句不需要用;结束,但它内部的语句仍需要用;结束。

复合语句格式:

{

局部变量定义;

语句1;

语句2;

……

语句n;

}

8.2.2硬件实物和模块原理图

图8- 2 四位按键电路图

键盘软件消抖

按键一般是利用机械触点的闭合、断开作用,由于机械触点的弹性作用,在其闭合、断开瞬间均有抖动过程,抖动时间一般在5—10mS,稳定闭合时间由操作人员的按键动作决定,一般为零点几秒到几秒。为了保证单片机对一次闭合,仅作一次键输入操作,必须在编程时候编写必要的程序代码来去除抖动影响,称键盘软件消抖。

判断键一次按下的具体方法

先判断键是否按下,若按下了延时10ms,跳过按下抖动期,然后再判断按键是否按下,若是说明按键真的按下了,否则说明是干扰信号,如果键真的按下了,则等待键释放,如果键释放了,延时10ms,再判断键是否释放,若释放了,说明按键真的释放了,否则说明是干扰信号,如果按键真的释放了,说明一次完整的按键过程完成了。在一次完整的按键后,可以连接该键对应的功能程序段,以实现特定的功能。

8.2.3 认识轻触开关按键

轻触开关是一种电子开关,使用时,轻轻按开关按钮就可使开关接通,当松开手时,开关断开。使用的开关如下图:

8.2.4键盘的分类

l键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.

l而靠软件编程来识别的称为非编码键盘;

l在单片机组成的各种系统中,用的最多的是非编码键盘。

l也有用到编码键盘的。

l非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。

8.3.1  独立键盘输入实战环节

实验代码独立键盘输入1

/*************************************************

*实验名:独立键盘输入

*实验效果:按下第1个独立按键K1 2个红色的led灯亮

  按下第2个独立按键K12个绿色的led灯亮

  按下第3个独立按键K12个黄色的led灯亮

  按下第4个独立按键K12个蓝色的led灯亮

*************************************************/

图8- 6 按键实验实物

=======================================

猜你喜欢

转载自blog.csdn.net/qq_20476939/article/details/81055705