单片机数据通信及测控应用技术详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 单片机开发板B简介

1.3.1 单片机开发板B的功能

单片机开发板B是电子开发网(http://www.dzkfw.com)专为单片机初学者设计并开发的一种实验兼开发板,研制这个产品的目的是为了帮助单片机初学者快速学会单片机技术。在自学单片机的过程中,通过做一系列的实验,从而比较容易地领会单片机那些枯燥、难懂的专业术语,而且这款实验开发板弥补了市场上常见的单片机实验板的一些不足,有针对性地面向最终的实用控制功能,包括模拟量输入与输出接口、数字量输入与输出接口,增加了实用的继电器接口,可以使实验板能够直接用于控制各种负载,成为一个实用化的嵌入式控制系统。图1-9所示是单片机开发板B的实物图。

图1-9 单片机开发板B的实物图

单片机开发板B可以做很多实验,例如,模拟电压输入与输出、开关量输入与输出、红外线遥控器编码分析仪、通用频率计、温度测控等。

PC与单片机开发板B组成的数据采集与控制系统如图1-10所示。

图1-10 PC与单片机开发板B组成的数据采集与控制系统框图

工作过程如下:作为下位机的单片机实时采集测量到的电压值,并将采集的电压数据显示在数码管上,同时采集的电压值通过串口传送到上位机PC。上位机收到下位机传送来的电压数据,在显示屏上显示。上位机PC设置电压值,通过串口发送到单片机系统,单片机数码管显示该电压,并通过模拟电压输出端口输出。上位机PC发出开关指令传送给单片机系统,驱动继电器动作。电气开关产生开关信号,发送到上位机PC显示。

1.3.2 单片机开发板B的主要电路

单片机开发板B的电路主要包括电源电路、时钟电路、复位电路、数码管显示电路、串口驱动电路和继电器驱动电路等。

1.电源电路

选择输出直流电压为10~15V之间的电源,并且插头极性为内正外负。稳压电源输出的直流电压通过专门的电源插座J1把直流电压引入实验开发板。电源分两路,一路直接提供12V的直流电源,主要是提供给继电器使用;另一路通过三端稳压芯片LM7805稳压成5V直流电源提供给单片机系统(包括数码管)使用。

电源电路如图1-11所示。电容C1、C2和C3是12V电源的滤波电容,C1、C2是低频滤波,容量为470μF;C3是高频滤波,容量为0.1μF。通过这两个电容的进一步滤波,最后得到的是纯净的直流,这对数字电路起到很好的保护作用。电阻R1和LED1组成5V电源的工作指示电路,只要电源部分正常,LED1就会点亮,可以根据这个LED来判断整个电源部分是否工作正常。

图1-11 电源电路

2.时钟电路

给STC89C51RC提供一定的时钟频率以后,STC89C51RC才能开始工作。图1-12所示电路提供时钟频率。

这个振荡电路与STC89C51RC内部的时钟振荡器一起组成完整的时钟频率发生电路,X1为STC89C51RC内部时钟振荡器的输入端,X2为STC89C51RC内部时钟振荡器的输出端,Y1为晶振,起到选择振荡频率的作用。这里使用的时钟频率为11.0592MHz。C1、C2为振荡补偿电容,起到放宽起振频率,让时钟容易起振的作用。

3.复位电路

要使STC89C51RC单片机工作,主要是给单片机增加上电复位电路和外接一个晶振。给STC89C51RC加电时,需要对STC89C51RC进行一次复位操作。复位操作将STC89C51RC的工作环境置成初始状态,并从程序的开始进行运行。

根据STC89C51RC的管脚定义,上电复位是通过给STC89C51RC的9脚发一个瞬时高电平来完成的,电路如图1-13所示。上电的瞬间,电流有一个突发的向上尖峰脉冲,因此,电流能通过C1电容到达STC89C51RC的复位端口RESET对STC89C51RC进行复位。尖峰过后,电流平稳,电容C1阻止电流的通过,这样可以防止对STC89C51RC反复进行复位。电阻R2是用于给Cl放电的,并将第9脚拉低,防止RESET端口上持续高电平。

图1-12 时钟电路

判断单片机芯片及时钟系统是否正常工作有一个简单的办法,就是用万用表测量单片机晶振引脚(18、19脚)的对地电压。

以正常工作的单片机用数字万用表测量为例,18脚对地约2.24V,19脚对地约2.09V。对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9脚对地电压为零,可以用导线短时间和+5V连接一下,模拟一下上电复位,如果单片机能正常工作了,说明这个复位电路有问题。

图1-13 复位电路

4.数码管显示电路

数码管显示电路起到让某个数码管发光的作用,电路如图1-14所示。所有发光二极管都是共阴极接法,P2口作为数码管的选通线,当给P2口相应位置低电平时,相应的数码管选通。P0口作为数码管的数据线,从P0口输出相应的字形码即可显示数字。

图1-14 数码管显示电路

在本设计中,将P0口作为字形码输出控制口,P0.1~P0.7分别与各数码管的笔画段A~G连接。排阻RB1作为P0口输出的上拉电阻,阻值定为1.5kΩ,作用是使数码管的默认状态为不点亮。排阻RB1起限流作用,对数码管进行保护。如果没有加这个电阻,数码管有可能因电流较大而被烧坏。

单片机开发板B的其他电路将在后续章节介绍。

1.3.3 单片机开发板B的功能测试

对于购买成品板的用户拿到的是经过焊接好的产品,并且经过测试完好。不管是购买套件还是成品单片机实验开发板的用户得到的单片机中都已经烧写了一个测试程序,测试程序主要是用来测试51试验板的单片机和相关外围元件的好坏,如果这个程序能够顺利运行,说明实验板的各方面都很正常。

测试程序的功能是,接通电源后P0口的8个发光二极管依次从下往上点亮,然后蜂鸣器鸣叫一声,两个继电器轮流动作一次,数码管的个位显示8,再换成十位显示8,然后不断循环,如果这时按下红外遥控器的按键时,蜂鸣器立即发出“嘀嘀嘀”的提示音,同时将这个按键的键值通过串口在计算机屏幕上显示出来(需要运行串口调试软件)。通过这个程序可以判断单片机实验开发板的各个部分的硬件和软件都是完好的。

1.Keil C51软件的使用

Keil C51软件是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编语言、PLM语言和C语言的程序设计,界面友好,易学易用。

启动Keil C51,几秒钟后出现编辑界面, 如图1-15所示。

图1-15 Keil C51编辑界面

1)建立一个新工程

单击“Project”菜单,在弹出的下拉菜单中选中“New Project”选项,出现“Create New Project”对话框。然后选择要保存的路径、文件夹,输入工程文件的名字,如pc_com(后缀名默认),单击“保存”按钮。这时会弹出一个“Select Device for Target ‘Target 1’”对话框,要求选择单片机的型号,可以根据使用的单片机来选择,Keil C51几乎支持所有的51核的单片机,这里选择Atmel的89C51。选择89C51之后,右边一栏是对这个单片机的基本的说明,然后单击“确定”按钮。

2)编写程序

单击“File”菜单,再在下拉菜单中单击“New”选项。此时光标在编辑窗口里闪烁,这时可以输入用户的应用程序了,但笔者建议首先保存该空白的文件。

单击菜单上的“File”选项,在下拉菜单中选中“Save As”选项,在“文件名”栏右侧的编辑框中,输入欲使用的文件名,同时,必须输入正确的扩展名,如pc_com.asm,然后,单击“保存”按钮。

注意:如果用C语言编写程序,则扩展名为.c。

回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上右击,弹出菜单,再单击“Add File to Group‘Source Group 1’”选项。

选中“pc_com.asm”,然后单击“Add ”按钮,再单击“Close ”按钮。此时注意到“Source Group 1”文件夹中多了一个子项“pc_com.asm”。子项的多少与所增加的源程序的多少相同。

现在,请输入汇编语言源程序。

在输入程序时,读者可看到事先保存待编辑的文件的好处,即Keil C51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

3)编译程序

单击“Project”菜单,在下拉菜单中单击“Options for Target‘Target 1’”选项,出现对话框,选择“Output”选项卡,选中“Create HEX Files”项,单击“确定”按钮。

再单击“Project”菜单,在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),进行编译。若有错误会在“output”窗口提示,可根据此提示,找出错误并修改,直至编译通过。

至此,用Keil C51做了一个完整工程,其中,生成一个编程器烧写文件pc_com.hex。

2.测试程序设计

以下是完成单片机开发板测试的汇编源程序:

ORG 0000H
AJMP MAIN      ;转入主程序
ORG 0003H       ;外部中断P3.2脚INT0入口地址
AJMP INT       ;转入外部中断服务子程序(红外遥控解码程序)
;以下为主程序进行CPU中断方式设置
MAIN:LCALL YS3    ;等待硬件上电稳定
SETB EA        ;打开CPU总中断请求
SETB IT0        ;设定INT0的触发方式为脉冲负边沿触发
SETB EX0       ;打开INT0中断请求
MOV SCON,#50H    ;设置成串口1方式
MOV TMOD,#20H    ;波特率发生器T1工作在模式2上
MOV PCON,#80H    ;波特率翻倍为2400×2=4800bps
MOV TH1,#0F3H    ;预置初值(按照波特率2400bps预置初值)
MOV TL1,#0F3H    ;预置初值(按照波特率2400bps预置初值)
SETB TR1       ;启动定时器T1
;以上完成串口通信初始化设置
START:MOV P2,#11110111B  ;选中8个发光二极管
MOV P0,#10000000B
LCALL DELAY
MOV P0,#01000000B
LCALL DELAY
MOV P0,#00100000B
LCALL DELAY
MOV P0,#00010000B
LCALL DELAY
MOV P0,#00001000B
LCALL DELAY
MOV P0,#00000100B
LCALL DELAY
MOV P0,#00000010B
LCALL DELAY
MOV P0,#00000001B ;P0口的LED循环由下往上点亮一次,延时约250ms
LCALL DELAY
MOV P3,#01111111B  ;蜂鸣器鸣响一声
LCALL DELAY
MOV P3,#11111111B
MOV P2,#11111110B  ;继电器J1吸合一次
LCALL DELAY
MOV P2,#11111101B  ;继电器J2吸合一次
LCALL DELAY
MOV P0,#0FFH
MOV P2,#11101111B  ;数码管个位显示8
LCALL DELAY
MOV P0,#0FFH
MOV P2,#11011111B  ;数码管十位显示8
LCALL DELAY
MOV P0,#0FFH
MOV P2,#10111111B  ;数码管百位显示8
LCALL DELAY
MOV P0,#0FFH
MOV P2,#01111111B  ;数码管千位显示8
LCALL DELAY
AJMP START  ;反复循环
;以下为进入P3.2脚外部中断子程序,也就是解码程序
INT: CLR EA   ;暂时关闭CPU的所有中断请求
MOV R6,#10
SB: ACALL YS1  ;调用882μs延时子程序
JB P3.2,EXIT ;延时882μs后判断P3.2脚是否出现高电平,如果有就退出解码程序
DJNZ R6, SB  ;重复10次,目的是检测在8820μs内如果出现高电平就退出解码程序
;以上完成对遥控信号的9000μs的初始低电平信号的识别
JNB P3.2, $     ;等待高电平避开9ms低电平引导脉冲
ACALL YS2      ;延时4.74ms避开4.5ms的结果码
MOV R7,#26      ;忽略前26位系统识别码
JJJJA:JNB P3.2,$   ;等待地址码第一位的高电平信号
LCALL YS1  ;高电平开始后用882μs的时间尺去判断信号此时的高低电平状态
MOV C,P3.2      ;将P3.2脚此时的电平状态0或1存入C中
JNC UUUA       ;如果为0就跳转到UUUA
LCALL YS3       ;检测到高电平1的话延时1ms等待脉冲高电平结束
UUUA: DJNZ R7,JJJJA
MOV R1,#1AH     ;设定1AH为起始RAM区
MOV R2,#2     ;接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP: MOV R3,#8    ;每组数据为8位
JJJJ: JNB P3.2,$   ;等待地址码第一位的高电平信号
LCALL YS1  ;高电平开始后用882μs的时间尺去判断信号此时的高低电平状态
MOV C,P3.2     ;将P3.2脚此时的电平状态0或1存入C中
JNC UUU       ;如果为0就跳转到UUU
LCALL YS3      ;检测到高电平1的话延时1ms等待脉冲高电平结束
UUU: MOV A,@R1   ;将R1中的值给A
RRC A        ;将C中的值0或1移入A中的最低位
MOV R1,@A      ;将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ    ;接收满8位换一个内存
INC R1       ;对R1中的值加1,换下一个RAM
DJNZ R2,PP     ;接收完8位数据码和8位数据反码,存放在1AH/1BH中
MOV A,1AH
CPL A        ;对1AH取反后和1BH比较
CJNE A,1BH,EXIT   ;如果不等表示接收数据发生错误,放弃
MOV P0,1AH      ;将按键的键值通过P0口的8个LED显示出来!
MOV A,1AH      ;将红外遥控器具体按键的键值发送到串口去
MOV SBUF,A      ;通过串口在电脑屏幕上显示出来
CLR P3.7       ;蜂鸣器鸣响嘀嘀嘀的声音,表示解码成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P3.7      ;蜂鸣器停止
EXIT: SETB EA    ;允许中断
RETI         ;退出解码子程序
YS1: MOV R4,#20   ;(占用R4/R5)延时子程序1,精确延时882ms
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;(占用R4/R5)延时子程序2,精确延时4740ms
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2   ;(占用R4/R5)延时程序3,精确延时1000ms
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
DELAY:MOV R1,#08H  ;(占用R1/R2/R3)延时子程序,12MHz晶振延时约250ms
L3: MOV R2 ,#0FAH
L1: MOV R3 ,#0FAH
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R1 ,L3
RET
END

将汇编程序编译生成HEX文件,然后采用STC-ISP软件将HEX文件下载到单片机中。

3.程序下载

程序经过调试运行之后就可以将其烧写进单片机了。STC系列单片机在线下载程序只需要用串口连接到单片机上即可。用串口线连接PC与单片机开发板,将编写好的汇编程序用Keil C编译生成HEX文件就可以实现程序的简便烧写。

到网站http://www.mcu-memory.com下载 STC单片机ISP下载编程软件。按照提示在计算机上运行该程序,其界面如图1-16所示。

图1-16 单片机烧写程序

连接单片机开发板与PC后,实验板电源先不要接通。

按下面步骤完成单片机程序的在线下载。

第1步:选择要下载程序的单片机型号(MCU Type)。

第2步:打开编译完成要下载到单片机中的扩展名为HEX的文件。

第3步:选择与实验板连接的串口,如COM1。

第4步:选择合适的通信波特率(这步可以省略)。

第5步:单击“Download/下载”按钮。

第6步:接通实验板电源。

几秒钟后就可以将程序下载到单片机中,并运行了。

程序烧写进单片机之后,就可以给单片机开发板通电了,这时单片机检测程序开始运行。