基于STC15单片机小系统开发实验箱指导书 - 图文

更新时间:2024-04-20 00:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

吉首大学实践教学系列

SERIES OF PRACTICAL TEACHING OF

基于JISHOU UNIVERSITY

单片机小系统板

实验指导书

主编:陈善荣 硬件设计:STC公司 软件设计:STC公司

物理机电工程学院

STC15

实验分组:2012电科分组:分为二组,第一组时间4-18周(双周)星期四56节;第二组时间4-18周(双周)星期四78节;地点总理楼6楼(电梯那边)微机原理实验室。

实验分组:2012物理、应物分组:分为二组,第一组时间4-18周(双周)星期五56节;第二组时间4-18周(双周)星期五78节;地点总理楼6楼(电梯那边)微机原理实验室。

2

第一章 STC单片机系统概述

STC单片机系统板是宏晶科技赞助支持建设的,结合吉首大学物理机电工程学院的《单片机原理与接口》课程教学需要,适用于物理科学与信息工程学院各专业学生的《单片机原理与接口》课程实验教学,STC单片机系统板,选择目前在单片机应用系统中使用广泛的,具有较大的片上ROM和RAM的STC15系列单片机为核心,扩展串并显示模块、矩阵键盘、AD模拟采样键盘、双串通信、日历芯片、SPI接口的大容量FLASH存储器,扩展32KB SRAM存储器、红外收发模块、LCD12864液晶显示模块接口等。

STC公司为此开发板提供了详细的库函数,是广大青年学习的首选。

实验箱外观图

从此处打开 !

打开方式:双手捏住如上图红圈所示的实验箱的把手处,双手分别向两边用

力即可打开实验箱。

3

实验板布局图

红外发送 测试 RS232电平转换芯片 USB转串口 芯片 串口1 测试接口 串口1与串口2 相互通讯开关 RTC测试芯片 PCF8563 红外接收 测试 掉电检测测试 (调节电压) 8位数码管 测试 自定义实验 万能板 仿真主控芯片 ADC通过热敏电阻测温 内部PWM做 DAC并由自带的ADC来纠正误差 外部2.5V参考源TL431/CD431 ADC分压检测 按键测试 串口2 测试接口 Micro-USB 接口 行列式矩阵扫描 按键测试 USB 接口 主控芯片电源开关 下载测试代码时,先点下载软件中的下载按钮,再按下此电源键,松开后即可进行程序下载 (按下给目标芯片断电,松开后重新上电) LCD 亮度调节电阻 LCD12864 接口 INT1测试接口 可进行掉电唤醒测试 外部扩展RAM测试接口 INT0测试接口 可进行掉电唤醒测试

4

2.1 实验一 LED灯显示控制

[实验目的]

1.学习并掌握LED灯电路与编程控制方法;

[实验重点和难点]

1. 熟练掌握Keil C51 集成编译环境的使用; 2. 熟练掌握STC ISP软件的使用方法; 3. 并口的结构及程序设计方法.

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱

[实验原理]

1.LED电路原理及参数估算方法

5

图1 LED 电路

LED电路主要包括电阻R52~R54,发光二极管LED7~LED10,如果单片机以+5V供电,则电阻R的取值方法如下:

P1口为低电平时,电压约为0.3V以下;发光二极管正向导通时的压降(红色为1.7V左右,蓝、绿为2.5V左右);发光二极管正常发光时的电流约为1~20mA;因此限流电阻较大可取R=(5V-0.3V-1.7V)/(0.001A)=3K左右.

2. KEIL C51软件的基本使用方法

(1)启动Keil C51集成编译环境,并新建项目

6

选择项目文件的保存路径,并输入项目名led。

选择所采用的微处理器,这里可选择与STC89C52兼容的AT89C52。

7

系统会提示是否拷贝初始化系统的启动代码,选择不拷贝。

单击

新建一个文本文件,输入源程序,并存盘为led.c

8

如果没有看到项目工作区

9

可以单击目。

显示项目工作区,右击项目工作区的Source Group,将源程序添加入项

单击

重新编译项目,如果有错,将会提示如下,修改到没有错误为止。

右击项目工作区的target1,进入设置目标选项。

10

一定要将Create HEX file选项选中:

再执行重新编译即可生成可下载到单片机上的二进制文件了,该文件存放在项目所在路径,主文件名与项目名同名。

3. STC-ISP的使用方法

启动STC_ISP程序,将出现以下界面,根据提示进行操作即可。

11

正确下载后显示:

4.硬件连接:将PC的USB口与单片机的USB/Micro-USB口用2-3交换的DB9线连接起来,通过PC的USB口,给单片机系统供电。

5.编程原理: 5.1、配置端口

12

5.2 流程图:(开始)-(配置IO口的工作方式初始化)-主循环:关所有LED灯,延时500ms;开第一只LED灯,延时500ms;开第二只LED灯,延时500ms;开第三只LED灯,延时500ms;开第四只LED灯,延时500ms;重复上述。

[实验内容与步骤]

1.熟悉Keil C51编译环境 2. 练习STC-ISP下载程序

3. 修改源程序,以其它不同的方式显示跑马灯,并将程序写入到实验报告中。

[本实验注意事项]

1.第一次实验,请仔细按照指导书操作,以免出现莫名其妙的错误 2. 请老师检查实验结果。

[实验报告]

整理数据、记录实验现象、源程序等并写入实验报告,交纸质文档。 [附实验参考程序]

13

2.2 实验二 七段数码管显示仿真

[实验目的]

1.学习并掌握七段数码管电路与编程控制方法;

[实验重点和难点]

1. 进一步掌握Keil C51 集成编译环境的使用; 2. 七段数码管的电路结构及程序设计方法. 3. 掌握使用protues软件进行仿真的方法。

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱

[实验原理]

1.七段数码管的结构与原理

四位七段数码管外形及内部原理结构如下图所示:

121110987U2CC14D12ALDD-A51R18F17G16A15B4DP3C2D1E18F17G16A15Bcom1afcom2com3baD13ALDD-C51Rfgbededdotcgcom4cdp123456SEG74

可分为共阳极与共阴极两种类型,二者的字形码是按位取反的关系,在电路结构上,二者应用时是有区别的,其驱动电路不同。

下图为共阴七段数码管电路:字形码从P0口送出,位选从P2口(P2.4~P2.7),共阴端采用PNP管加的驱动电路,用排阻约470*8上拉到VCC。排阻的取值可参考实验一的计算方法。

14

EDCCC144DP321

VCC1C98765432R7470*831191891213141512345678U1EA/VPX1X2RESETINT0INT1T0T1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.78051P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7RDWRPSENALE/PTXDRXD39383736353433322122232425262728171629301110D8A109854237ALDS-C32RR81KBCDCC1EFGDPQ2Q2SA1015

VCCA如果采用共阳极七段数码管,应该采用如下的驱动电路:

31191891213141512345678U3EA/VPX1X2RESETINT0INT1T0T1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.78051P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7RDWRPSENALE/PTXDRXD3938373635343332212223242526272817162930111012345678R9D14161514131211109109854237BCDQ2SA10151,6Q2CCE470*8LDS-A32R本实验系统采用的是共阴极七段数码管。 2.字形码

字形0,1,2,3.。。9,A,b,C,d,E,F分别对应十六进制值:

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;小数点对应0x80位。

3.基本程序——显示一个数字

参数说明:zf需要显示的字符(0-F);zw显示在哪一位上(1-4);dot是否加小数点。

void lightseg7(unsigned char zf,unsigned char zw,unsigned char dot) {

zx_port=0;

zx_port=zx[zf]|dot; switch(zw) {

15

FGR81KDP

case 1:seg7_1=0;seg7_2=1;seg7_3=1;seg7_4=1; delay20ms();break; case 2:seg7_1=1;seg7_2=0;seg7_3=1;seg7_4=1; delay20ms();break; case 3:seg7_1=1;seg7_2=1;seg7_3=0;seg7_4=1; delay20ms();break; case 4:seg7_1=1;seg7_2=1;seg7_3=1;seg7_4=0; delay20ms();break; }

zx_port=0; }

4.仿真软件PROUTEUS软件的使用

内容参考教材《单片微机原理与接口技术》---基于STC15系列单片机,第46-51页。

[实验内容与步骤]

1.熟悉Keil C51编译环境,编写七段数码管显示子程序和测试程序,要求在四位数码管上显示不同的数字符号,并循环显示。

2. 在protues软件中画出实验电路原理图,并仿真出七段数码管显示的数据。并将程序写入到实验报告中。

[本实验注意事项]

1.请仔细按照指导书操作,以免出现莫名其妙的错误 2. 请老师检查实验结果。 [实验报告]

整理数据、记录实验现象、源程序等并写入实验报告,交纸质文档。 [附实验参考程序]

16

2.3 实验三 串并扩展七段数码管显示实验

[实验目的]

1.学习并掌握使用串并扩展输出端口芯片74HC595的工作原理和编程方法; 2、进一步掌握七段数码管电路显示电路的设计和编程控制方法;

[实验重点和难点]

1. 进一步掌握Keil C51 集成编译环境的使用; 2. 七段数码管的电路结构及程序设计方法. 3. 掌握使用74HC595的编程方法。

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱

[实验原理]

1.实验箱中串并显示部分原理图:

2.编程原理

(1).74HC595管脚介绍及逻辑功能表

17

(2)根据上述逻辑真值表编写74HC595的驱动程序

/**************** 向HC595发送一个字节函数 ******************/ void Send_595(u8 dat) { u8 i;

for(i=0; i<8; i++) {

dat <<= 1;

18

P_HC595_SER = CY; P_HC595_SRCLK = 1; P_HC595_SRCLK = 0; } }

(3)显示扫描程序

/********************** 显示扫描函数 ************************/ void DisplayScan(void) {

Send_595(~LED_TYPE ^ T_COM[display_index]); //输出位码 Send_595( LED_TYPE ^ t_display[LED8[display_index]]); //输出段码

P_HC595_RCLK = 1;

P_HC595_RCLK = 0; //锁存输出数据 if(++display_index >= 8) display_index = 0; //8位结束回0 }

(4)主程序中循环调用显示扫描程序实现显示功能。

[实验内容与步骤]

1.熟悉Keil C51编译环境,修改程序,要求在8个数码管上显示一组电话号码。 2.并将程序写入到实验报告中。

[本实验注意事项]

1.请仔细按照指导书操作,以免出现莫名其妙的错误 2. 请老师检查实验结果。 [实验总结]

整理数据、记录实验现象、源程序等并写入实验报告,交纸质文档。 [附实验参考程序]

19

2.4 实验四 独立按键处理

[实验目的]

1.学习并掌握独立按键电路与编程控制方法; 2. 进一步掌握串并扩展显示的编程方法

[实验重点和难点]

1. 独立按键的电路结构及程序设计方法.

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱

[实验原理]

1.独立按键的结构与原理 由于单片机并行口资源有限,并且单片机应用系统力求越小越好,按键的复用也成为一种需求。

独立按键电路包括按键(SW17~SW18)、串连电阻(R10,R11);按键采用带四个引脚的轻触型按键。

软件编程读取按键之前需将连接按键的引脚先置高电平,关闭并行口内部的MOS管,然后再读取引脚,才能正确地将按键信号读入内部总线。

2.基本程序——按键扫描

unsigned char scankey(void) //0 无键,1,2相应键被按一次 {

key1=1;key2=1; key_delay(30); if(key1==0) {

while(key1==0) key_delay(10); return(1); }else if(key2==0) { while(key2==0) key_delay(10); return(2); }

20

return (0); }

[实验内容与步骤]

1.熟悉Keil C51编译环境,编写按键扫描了程序和测试主程序,要求按1键显示的按键次数加1, 按2键显示的按键次数加10。

2. 练习STC-ISP下载程序

[本实验注意事项]

1.请仔细按照指导书操作,以免出现莫名其妙的错误 [实验报告]

整理数据、记录实验现象、源程序等并写入实验报告,交纸质文档。 [附实验参考程序]

21

2.5 实验五 外部中断程序设计

[实验目的]

1.学习并掌握中断系统的结构和外部中断处理程序的编程方法;

[实验重点和难点]

1. 进一步掌握Keil C51 集成编译环境的使用; 2. 中断系统结构.

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱

[实验原理]

1.STC15F2K60S2单片机的中断结构与原理

22

2.外部中断输入引脚连接图。

3.中断服务程序的声明。

中断函数无参无返回值,使用interrupt N 关键字指明响应哪一个外部事件。N=0为外部中断0,N=2为外部中断1.

//----------------------------------------- //中断服务程序

void exint0() interrupt 0 //INT0中断入口 {

P10 = !P10; //将测试口取反

FLAG = INT0; //保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿) }

//----------------------------------------- //中断服务程序

void exint1() interrupt 2 //INT1中断入口 {

P10 = !P10; //将测试口取反

FLAG = INT1; //保存INT1口的状态, INT1=0(下降沿); INT1=1(上升沿) }

需要改写上述程序,完成实验三中所要求的功能。 4.中断初始化。 INT0 = 1;

IT0 = 0; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) EX0 = 1; //使能INT0中断

INT1 = 1;

IT1 = 0; //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿) EX1 = 1; //使能INT1中断 EA = 1;

23

[实验内容与步骤]

1.熟悉Keil C51编译环境,编写显示程序和测试主程序,要求按1键显示的按键次数加1, 按2键显示的按键次数加10。。

2. 练习STC-ISP下载程序

[本实验注意事项]

1.请仔细按照指导书操作,以免出现莫名其妙的错误 [实验总结]

1.

[附实验参考程序]

24

2.6 实验六 定时打铃器的设计

[实验目的]

1.学习并掌握定时器的编程方法; 2.进一步掌握中断系统的结构和编程;

[实验重点和难点]

1. 定时器的工作原理及编程方法;

[实验课时]

2学时

[实验仪器]

微型计算机,STC单片机系统实验箱。

[实验原理]

[实验内容与步骤]

1.设计并实现秒表的基本功能;

[本实验注意事项]

[实验报告]

[附实验参考程序]

25

2.7 串行通信

[实验目的]

(1)掌握串行口工作方式和程序设计方法;

(2)了解实现串行通信的硬环境,数据格式的协议,数据交换的协议; (3)了解PC机通信的基本要求和程序设计方法。 [实验重点和难点]

(1)串行口工作方式1下的单片机端编程方法; (2)PC端串行通信程序的编程方法。 [实验课时]

4学时 [实验仪器]

STC单片机实验系统、微型计算机。 [实验原理] 1.串行通信基础

串行通信是一种能把二进制数据按位传送的通信,它所需传输线极少,适用于分级、分层和分布式控制系统及远程通信。

串行通信可分为异步通信和同步通信。

在异步通信中字符帧格式和波特率是两个重要的指标。(1)字符帧 也称为数据帧,由起始位、数据位、奇偶校验位和停止位组成。起始位位于字符帧开头,只占1位,始终为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息;数据位紧跟起始位之后,可取5、6、7或8位,低位在前高位在后;奇偶校验位在数据位之后仅占1位,用于表征串行通信中采用奇校验还是偶校验;停止位位于字符帧末尾,为逻辑1高电平,通常可以取1、1.5或2位。(2)波特率 波特率定义为每秒钟传送的二进制的位数(bps),用于表征数据传输的速度。

图8-1异步通信的字符帧格式

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息,这里的信息帧和异步通信中的字符帧不同,通常含有若干个数据字符。它由同步字符、数据字符和校验字符CRC等部分组成。

26

图8-2同步通信中的字符帧结构

串行通信中串行I/O数据的实现方式可以分为两种:软件方式和硬件方式。

软件方式中,采用两层循环,外层循环控制发送字符的个数,内层循环控制字符帧的位数,如需要将内部RAM20H起,长度为LEN的数据,按照字符帧格式为11位(1位起始位,7位数据位,1位奇偶校验位和2位停止位)从P1.0引脚串行输出字符帧,实现的示例程序如下:

ORG 0

SOUT:MOV R0,#20H NEXT:MOV R2,#0BH CLR C MOV A,@R0 RLC A INC R0 LOOP:MOV R1,A ANL A,#01H ANL P1,#0FEH ORL P1,A

MOV A,R1 ACALL DELAY RRC A SETB C DJNZ R2,LOOP DJNZ LEN,NEXT RET

;数据块的起始地址送R0

;字符帧长度送R2 ;清Cy ;待发送数据送A ;起始位送ACC.0 ;数据块指针指向下一个待传输的数据 ;发送字符暂存于R1 ;屏蔽A中的高7位 ;清除P1.0

;在P1.0上输出串行数据 ;恢复A中的值 ;延时 ;准备输出下一位 ;在Cy中形成停止位 ;若一帧未发完,则LOOP ;若所有字符未发完则NEXT ;若所有字符已发完,则返回

硬件实现方式中采用UART芯片,其硬件框图如图3所示。其工作原理是:当串行发

送时,CPU通过数据总线将8位并行数据送到“发送数据缓冲器”,然后并行送给“发送移位寄存器”,在发送时钟和发送电路的控制下通过TXD线逐位地发送出去,起始位和停止位是由UART在发送时自动添加上去的,UART发送完一帧后产生中断请求,CPU响应中断后可以把下一个字符送到“发送数据缓冲器”,重复上述过程;当串行接收时,UART监视RXD线,并在检测到RXD线上有一个低电平时就开始一个新的字符接收过程,UART每接收到1位二进制数据位后则使“接收移位寄存器”左移一次,连续接收到一个字符后则并行传送到“接收数据缓冲器”,并通过中断促使CPU从中取走所接收的字符。UART的硬件结构框图如图8-3所示。

27

图8-3 UART硬件框图

2.MCS-51单片机的串行接口

MCS-51内部含有一个可编程的全双工串行通信接口SIO,具有UART的全部功能,该接口电路不仅能同时进行数据的发送和接收,也可以作为一个同步移位寄存器使用。其电路功能框图如图8-4所示。

在异步通信中,发送和接收都是在发送时钟和接收时钟控制下进行的,发送时钟和接收时钟必须同字符位数的波特率保持一致,它们既可以由主机时钟经分频获得,也可由内部定时器T1或T2的溢出率经16分频后提供。

串行口的发送过程源于CPU执行如下一条指令:MOV SBUF,A ,当发送电路成功地将这一字节发送出去后,产生一中断请求,CPU清除发送中断标志后,可执行下一条MOV SBUF,A指令将下一个数据放入发送缓冲区并发送出去。

串行口完成一个字符的接收后,将产生一个中断,CPU可执行MOV A,SBUF 将数据读走,并清除接收中断标志。

串行控制寄存器SCON和PCON负责对串行通信工作方式的配置,同时在方式1和方式3中还需要结合T1定时器完成配置。MCS-51对串行口的控制是通过SCON实现的,也与电源控制寄存器PCON有关。图8-5描述了SCON和PCON各位的含义。

串行口的工作方式和所用的波特率对照表如表8-1所示。

28

图8-4 MCS-51串行口发送和接收电路框图

29

图8-5 SCON和PCON中各位定义

3.串行口的通信波特率

方式0 的波特率:在方式0 下,串行口的波特率是固定的,其值为fosc/12(fosc为主机晶振频率);

方式2的波特率:在方式2下,通信波特率为fosc/32或fosc/64,其选定公式为: 波特率=(2SMOD/64)×fosc 方式1或方式3的波特率:在这两种方式下,串行口的波特率是由定时器的溢出率决定的,因而波特率是可变的,相应的公式为:

波特率=(2SMOD/32)×定时器T1的溢出率

而 定时器T1的溢出率=(fosc/12)×(1/(2K-初值))

因此 波特率=(2SMOD/32)×(fosc/12)×(1/(2K-初值)) (式中,K为定时器T1的位数,它和定时器T1的设定方式有关)。 基本程序模块——中断处理程序

void scon_int(void) interrupt 4 using 2 {

if (RI==1) { RI=0; c1=SBUF; dispbuf[j]=c1-'0'; dispbuf[j]=7; j++; if(j>3) j=0; }else { TI=0; } }

[实验内容和步骤]

1.单片机向PC机发送字符,PC机启动超级终端程序接收所发送的字符; 2.PC机运行超级终端程序发送数字在单片机系统的SEG7上显示;

[本实验注意事项] 1.

[附实验参考程序]

30

实验八 数字电子钟设计

[实验目的]

1.设计具有:时间显示、闹钟提示、秒表计时及日历显示功能的数字电子钟。并都能调整,走时准确,闹钟时间到时蜂鸣器有滴滴声提示,在断电后重启闹钟设置时间不变,日历显示能区分大月份、小月份以及年份是否为闰年时二月份的天数。

[实验重点和难点]

1. MCS-51定时器的使用。

[实验课时]

4学时

[实验仪器]

STC单片机实验系统、微型计算机。

[实验原理]

1. 数字钟硬件结构框图

数码管和发光二极管显示 晶振 复位电路 单片机 STC15F2K60SISP下载电路 电源 按键 蜂鸣器 图 数字钟硬件框架

如图所示,晶振给单片机提供时钟频率,电源给单片机提供5V电压,单片机通过ISP烧录程序,控制着显示,闹铃提示等部分。

2.各模块电路原理参考丹萌实验系统原理图,这里不再重复。 3. 数字钟程序流程图

31

开始 从E2PROM中读闹钟时间 初始化定时器T2 显示时间 等待中断发生

如图是本设计的主程序,当给单片机充电时,首先从单片机的E2PROM中读取上一次设

置的闹钟时间,然后初始化定时器,显示当前的时间等待中断发生。

中断服务子程序的功能:(1)扫描按键,根据SET键按键的次数决定修改哪一个时间数据;(2)进入秒表功能;(3)处理闹铃;(4)单位时间计时计数功能。

32

中断发生 定时器T2中断服务子程序 TF2=0 扫描按键 Y 是否到15ms Count%2==0&&set==3&&miaobiao_open_flag==0? 走时程序 Y Y 秒表启动 判断set的值 N 蜂鸣器响一分钟 P27按下 Y 蜂鸣器声音关 闹钟时间到? N 返回 set=0 N p26按下? Y p07亮? N Y 闹钟启动 set=1 set=2 set=3 set=4 set=5 Set=6 进入时间调整,按下p25小时加一,按下p26分钟加一 进入闹钟调整,按下p25闹钟小时加一,按下p26闹钟分钟加一 进入秒表计时,按下p25开始计时, 按下p26停止计时,按下p27计时清0 进入年份显示,按下p25年份加一,按下p26年份减一 进入月日显示,按下p25月份加一,按下p26天数加一 时间显示 结束 闹钟关闭

4 E2PROM的使用

因为本设计要求断电后重起闹钟设置时间不变,所以用到单片机STC89C52RC中的E2

33

PROM,利用IAP技术可实现E2PROM,内部Flash擦写次数为100,000次以上。STC89C52RC系列ISP/IAP特殊功能寄存器如下:

ISP_DATA: ISP/IAP 操作时的数据寄存器。ISP/IAP 从Flash 读出的数据放在此处,向Flash 写的数据也需放在此处。

ISP_ADDRH: ISP/IAP 操作时的地址寄存器高八位。 ISP_ADDRL: ISP/IAP 操作时的地址寄存器低八位。

ISP_CMD: ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效。 ISP_TRIG: ISP/IAP 操作时的命令触发寄存器。在ISPEN(ISP_CONTR.7) = 1 时,对ISP_TRIG 先写入46h,再写入B9h,ISP/IAP 命令才会生效。

ISP_CONTR: ISP/IAP 控制寄存器,地址在 0E7H 单元。

表ISP_CONTR寄存器各位的含义 B7 B6 ISPEN SWRS B5 SWRST B4 CMD_FALL B3 1 B2 WT2 B1 B0 Reset Value WT1 WT0 0000,1000 ISPEN: ISP/IAP 功能允许位。0:禁止ISP/IAP 编程改变Flash,1:允许编程改变Flash SWBS: 软件选择从用户主程序区启动(0),还是从ISP 程序区启动(1)。 SWRST: 0: 不操作;1: 产生软件系统复位,硬件自动清零。

CMD_FAIL: 如果送了ISP/IAP 命令,并对ISP_TRIG 送46h/B9h 触发失败,则为1,需由软件清零。

具体实现程序模块如下:

//关闭IAP功能,把与ISP有关的特殊功能寄存器清0 void isp_disable(void) {

ISP_CONTR=0x00;//禁止ISP/IAP操作 ISP_CMD=0x00;//去除ISP/IAP命令

ISP_TRIG=0x00; //防止ISP/IAP命令误触发 }

uchar byte_read(uchar data adh,uchar data adl)//字节读 {

uchar data rddata=0; ISP_CONTR=ENABLE_ISP; ISP_CMD=0x01; ISP_ADDRH=adh; ISP_ADDRL=adl; ISP_TRIG=0x46; ISP_TRIG=0xb9; nop=nop;

rddata=ISP_DATA; isp_disable(); return rddata; }

void sector_erase(void)//擦除扇区 {

ISP_CONTR=ENABLE_ISP; ISP_CMD=0x03;

ISP_ADDRH=0x20;//扇区地址 ISP_ADDRL=0x00;

34

ISP_TRIG=0x46; ISP_TRIG=0xb9; nop=nop;

isp_disable(); }

void byte_program(uchar data adh,uchar data adl,uchar data rddata)//字节编程 {

ISP_CONTR=ENABLE_ISP;//打开IAP功能,设置Flash操作等待时间 ISP_CMD=0x02; ISP_ADDRH=adh; ISP_ADDRL=adl; ISP_DATA=rddata; ISP_TRIG=0x46; ISP_TRIG=0xb9; nop=nop;

isp_disable(); }

void alarm_read(void)//闹钟时间读程序 {

uchar data i=0x00;

alarm1hour=byte_read(0x20,i++); alarm1minute=byte_read(0x20,i++); }

void alarm_save(void)//闹钟时间保存程序 {

uchar data i=0;

sector_erase();//擦除扇区,再保存当前改变的闹钟时间设置 nop=nop; nop=nop; nop=nop;

byte_program(0x20,i++,alarm1hour); byte_program(0x20,i++,alarm1minute); }

注意事项: 1 . 同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区, 就不须读出保护。

2.如果一个扇区只用一个字节,那就是真正的E2PROM,STC 单片机的Data Flash 比外部E2PROM 要快很多,读一个字节/ 编程一个字节大概是0.2uS/60uS。

3. 如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则另外的不需要修改的数据须先读出放在STC 单片机的RAM 中,然后擦除整个扇区,再将需要保留的数据和需修改的数据一并写回该扇区中。这时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。扇区擦除,没有字节擦除,只有扇区擦除,5 1 2 字节/ 扇区, 每个扇区用得越少越方便,如果要对某个扇区进行擦除,而其中有些字节的内容需要保留,则需将其先读到单片机内部的R A M 中保存,再将该扇区擦除,然后将须保留的数据写回该扇区,所以每个扇区中用的字节数越少越好,操作起来越灵活越快.

5 定时器T2的使用

(1)T2的特殊功能寄存器

35

89C52比8051增加了一个16位多功能定时器,相应地增加了6个特殊功能寄存器:TH2(0CDH)、TL2(0CCH)、RCAP2H(0CBH)、RCAP2L(0CAH)、T2MOD(0C9H)、T2CON(0C8H)。T2主要有3种工作方式:捕捉方式、常数自动再装入方式和串口的波特率发生器方式。TH2、TL2组成16位计数器,RCAP2H、RCAP2L组成一个16位寄存器。在捕捉方式中,当外部输入端T2EX(P1.1)发生负跳变时,将TH2、TL2的当前计数值锁存到RCAP2H、RCAP2L中,在常数自动再装入方式中,RCAP2H、RCAP2L作为16位计数初值常数寄存器。

(2)T2CON

T2CON为T2的状态控制寄存器,其格式如下:

TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 T2的工作方式主要由T2CON的D0、D2、D4、D5位控制,对应关系如表4-2所示 表3-2 定时器T2方式选择 RCLK+TCLK 0 0 1 × CP/RL2 TR2 1 1 1 0 工作方式 16位常数自动再装入方式 16位捕捉方式 串行口波特率发生器方式 停止计数 0 1 × × (3) T2MOD

另外T2还有可编程的时钟输出方式,在16位常数自动再装入方式中可控制为加1技术计数或减1计数。它们由T2MOD控制。T2MOD为T2的方式寄存器,格式如下:

— — — — — — T2OE DCEN

T2OE:T2时钟输出允许位,C/T2 =0、T2OE=1,T2(P1.0)输出可编程时钟。

DCEN:DCEN=1时,T2可构成加减计数器。在16位常数自动再装入方式中,若DCEN=1,T2EX=1,T2加“1”计数;DCEN=1,T2EX=0为减“1”计数。

T2初始化程序如下:

//系统初始化,用定时器T2 void init_time(void) {

RCAP2H=0xee; RCAP2L=0x00;

TL2=0x00;//5ms定时 TH2=0xee; T2CON=0x04; T2MOD=0x00; ET2=1; EA=1; }

[实验内容与步骤]

36

1.分模块编写数字钟程序,下载并调试。

[本实验注意事项]

1.

[实验总结]

[附实验参考程序]

37

3.2 温度采集与传输

[实验目的]

1.设计一种分布式的温度检测系统,它采用单片机采集温度,通过串口送给

现场PC机,同时现场PC机又作为服务器,通过互联网TCP/IP协议传输到远程终端,实现远程监测与远程控制现场温度,并可以绘制实时温度曲线。

[实验重点和难点]

1. 单片机端的温度数据采集。 2. 单片机与PC机的串行通信; 3. 现场PC与远程PC的通信; 4. 温度曲线的描绘。

[实验课时]

12 学时

[实验仪器]

丹萌单片机实验系统、联想启天2400微型计算机。

[实验原理]

1.总体结构框图

温度采集与传输系统,由PC机VisualBasic模块,单片机温度采集模块、串行通信模块3个模块组成,系统总体框图如图2.4所示:

温度采集 温度监控对象 加温或降温 测温装置(DS18B20) 数据送单片机处理 控温装置 通过继电器控制 单 片 机 通过串口将数通过串口发据送服务器 送控制命令 发送控制命令 远程客户机 传送数据 现场服务器

图2.4 系统设计总模块图

单片机模块将采用AT89C52芯片;温度采集模块使用数字温度传感器DS18B20;串行通信模块采用MAX232芯片;计算机通信则直接借助现有的因特网,实现远程数据的传输。

38

2.温度传感器模块

本系统采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,大大简化了电路的复杂度,以及算法的要求。

(1) DS18B20的管脚及特点

DS18B20可编程温度传感器有3个管脚,GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.0~5.5V。本文使用外部电源供电。主要特点有:(1).用户可自设定报警上下限温度值。(2).不需要外部组件,能测量-55~+125℃范围内的温度。(3).-10℃~+85℃范围内的精度为±0.5℃。(4).通过编程可实现9~l2位的数字读数方式,可在至多750ms内将温度转换成12位的数字,测温分辨率可达0.0625℃。(5).独特的单总线接口方式,与微处理器连接时仅需要一条线即可实现与微处理器双向通讯。

(2)DS18B20的数据部件

64位光刻ROM,ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。

温度传感器可完成对温度的测量,其内部包括一个高速暂存RAM(便笺式的内部存储器)和一个非易失性的可电擦除的EEPROM,后者存放高温和低温触发器TH,TL和结构寄存器。便笺存储器包含了9个连续字节(0~8),前两个字节是测得的温度信息,字节0的内容是温度的低8位,字节1是温度的高8位,字节2是TH(温度上限报警),字节3是TL(温度下限报警),字节4是配置寄存器,用于确定输出分辨率9到12位。第5、6、7个字节是预留寄存器,用于内部计算。字节8是冗余检验字节,校验前面所有8个字节的CRC码,可用来保证通信正确。

非易失性的温度报警触发器TH和TL由一个字节的EEPROM组成,使用一个存储器功能命令可对TH,TL写入。

配置寄存器也由一个字节的EEPROM组成,使用一个存储器功能命令可对配置寄存器写入。配置寄存器各位的意义如表3.1所示:

表3.1 配置寄存器

TM R1 R0 1 1 1 1 1

低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1,R0用来设置分辨率,如表3.2所示(DS18B20在出厂时被设置为12位)

表3.2 DS18B20分辨率设置编码表

R1 0 0 1 R0 0 1 0 分辨率 9位 10位 11位 最大转换时间 98.75ms 187.5ms 375ms 39

1 1 12位 750ms

(3) DS18B20电路连接

DS18B20电路连接如图3.3所示:

U1318b20GNDdqVCC123VCCGNDR111kp13图3.3 DS18B20电路连接如图

3. 单片机与PC机串口通信模块

(1) MAX232简介

MAX232芯片是MAXIM公司特别为满足EIA/TEA232E的标准而设计的。它们在EIA/TIA232E标准串行通信接口中日益得到广泛的应用,它们具有功耗低、工作电源为单电源,外接电容仅为0.1或1μF、采用双列直插封装形式、接收器输出为三态TTL/CMOS等优越性,为双组RS2232接收发送器,工作电源为+5V,波特率高,仅需外接0.1μF或1μF的电容。其价格低,可在一般需要串行通信的系统中使用。

(2) MAX232电路原理图

MAX232电路连接原理图如图3-7所示:

rxdttltxd232129R1OUT14R2OUT7T1OUTT2OUTU2R1INR2INT1INT2INC+C1-C2+C2-V+V-MAX232C522uC5VCC22u1381110134526rxd232txdttlC322uJ1123456789com1rxd232txd232C422u

图3-7 MAX232电路连接原理图

(3)PC机间通信模块

40

将PC机接入互联网,通过TCP/IP协议,即可轻松实现远程通信.在本设计中,将采用WinSock控件,实现数据传送。

4. 软件设计

(1)软件模块结构图 客单服户 片务房TCP/IP协议 器 机机RS485协议 程程程 序序序模 模模块块块 (2)单片机模块流程图

单片机初始化后读取当前温度并在液晶上显示出来,开中断,等待上位机请求命令,若为请求读取当前温度,则通过串口传送当前温度值至上位机;若为警戒信号,则控制继电器,启动温控装置。单片机主程序流程图如图4.2所示:

41

开始初始化调用温度模块程序显示模块 显示当前温度串口接受上位机命令调用串口发送模块发送当前温度请求传送当前温度是否启动继电器控制降温装置是温度高值警戒信号否启动继电器控制升温装置是温度低值警戒信号否返回

(3)串行通信模块

将数据采用字符串的形式发送,每次发送的数据块以“$”结尾,即“数据+$”,上位机判断接收到“$”,表示此次数据传送完成。发送数据函数如下:

42

Void Send_Data(void) {

unsigned char j;

for(j=0;j

SBUF=Buffer[j]; while(!TI); TI=0; }

Count=0; }

(4)服务器模块

通过VB6.0做出服务器端控制界面如图4.3所示:

图4.3 服务器端控制界面

(5)远程客户机模块

通过VB6.0做出客户端控制界面如图4.4所示:

43

图4-4 客户端控制界面

[实验内容与步骤]

1. 编写温度传感器模块程序,可参考实验2.8; 2. 编写串行通信模块程序,可参考实验2.9; 3. 编写现场PC机程序,采用VB+MSCOMM编程;

4. 编写远程PC机上的程序,采用VB+WinSOCK编程;

[本实验注意事项]

1. 本实验综合性,调试难度高。

[实验总结]

[附实验参考程序]

44

3.3 智能恒温控制系统

[实验目的]

1.设计一个利用多台普通空调实现较大空间内的恒温控制,协调各空调的工作时间,达到高效控制和节能的目的。

[实验重点和难点]

1. 单片机温度采集; 2. 多机串行通信;

3. 空调遥控器解码、编码; 4. 功率控制与协调;

[实验课时]

12学时

[实验仪器]

多台STC单片机实验系统、微型计算机,空调机;

[实验原理]

1.总体结构图

空调遥控器测温终端测温终端测温终端大房间测温终端RS-485总线测温终端恒温节能控制器测温终端测温终端遥控器空调

2.软件结构图

(1)测温终端软件结构

45

温度采集模块RS-485通信模块主控模块(命令解释执行) (2)遥控器软件结构

遥控指令发送38KHz载波产生RS-485通信模块主控模块(命令解释执行) (3)恒温节能控制器软件结构

RS-485通信模块接收温度数据主控模块循环检测设备工作时间协调

[实验内容与步骤]

1. 分模块进行程序设计,单片机温度采集可参考实验2.8;串行通信可参考实验2.9;空调遥控器解码可参考实验2.5;空调遥控器编码可参考实验2.6;

2. 进行系统集成与调试安装;

[本实验注意事项]

1. 本实验实用性强,难度大;

[实验总结]

[附实验参考程序]

46

4.1 直流电机调速仿真

[实验目的]

1.了解直流电机调速方法

2.掌握产生PWM波的程序设计

3. 掌握定时中断,外部中断程序的编写

[实验重点和难点]

1.PWM波产生原理和方法

2. 中断的基本原理和程序设计方法 [实验课时]

2学时

[实验仪器]

丹萌单片机实验系统、联想启天2400微型计算机。

[实验原理]

1.PWM(脉宽调制)是单片机上常用的模拟量输出方法,通过外接转换电路,可以将占空比不同的脉冲转换成不同的电压,以驱动直流电机转动从而得到不同的转速.可采用此方法实现直流电动机转速控制.

2.原理图

电机具有惯性,加减速时操作要慢,等速度稳定后再加减BC1U133p19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617AX1CRYSTAL18C233pXTAL29R1C310u100R293031RSTR210kPSENALEEAD11N4007U21234567891020191817161514131211LED-BARGRAPH-RED12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52[实验内容与步骤]

1.画原理图;

2.编程并调试运行;

47

+88.8 [本实验注意事项]

[实验总结]

[附实验参考程序]

48

4.2 步进电机控制仿真

[实验目的]

1.了解步进电机的基本工作原理; 2.掌握外部中断程序设计方法

[实验重点和难点]

1. 步进电机的工作原理及编程控制方法 2.

[实验课时]

2学时

[实验仪器]

丹萌单片机实验系统、联想启天2400微型计算机。

[实验原理]

1. 步进电机转速控制基本知识

步进电机如同普通电机一样,也有转子、定子和定子绕组。定子绕组分为若干相,每相的磁极上的极齿,转子在轴上也有若干个齿。当某相定子绕组通电时,相应的两个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。如果这时定子的小齿与转子的小齿没有对齐,则转子在磁场的作用下转动一个角度,使转子上的齿与定子的极齿对齐。因此它是按电磁铁的原理工作的,在外加电脉冲的作用下,一步一步地转动,是一种将电脉冲信号转换成相应角位移的机电元件。

如果利用单片机控制脉冲发生器产生一定频率的脉冲信号,脉冲分配器将产生一定规律的电脉冲输出给驱动器,就可以控制步进电机的转动。步进电机转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。

步进电动机的励磁方式可分为全部励磁及半步励磁,其中全部励磁又分为1相励磁及2相励磁,而半步励磁又弹钢琴为1~2相励磁。

(1)1相励磁法,是在每一瞬间只有一个线圈导通。特点是消耗电力小,精确度较好,

0

但其转矩小,振动较大,每送一励磁信号可走18。若以1相励磁法控制步进电动机正转,则励磁顺序为A→B→C→D→A;若反转,则励磁顺序为D→C→B→A→D。

(2)2相励磁法,是在每一瞬间有2个线圈同时导通。特点是转矩大,振动小,每送

0

一励磁信号可走18。若以2相励磁法控制步进电动机正转,则励磁顺序为AB→BC→CD→DA→AB;若反转,则励磁顺序为DA→CD→BC→AB→DA。

(3)1~2相励磁法为1相与2相轮流交替导通。特点是分辨率高,运转平滑,每送一

0

励磁信号可走9。若以1~2相励磁法控制步进电动机正转,则励磁顺序为A→AB→B→BC→C→CD→D→DA→A;若反转,则励磁顺序为A→DA→D→CD→C→BC→B→AB→A。

2.电路原理图

49

C133p19XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617+88.8U1X1CRYSTAL18C233pXTAL29R1C310u100R293031RSTR210kPSENALEEAU21234567891020191817161514131211LED-BARGRAPH-RED12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52减速加速

[实验内容与步骤]

1. 画电路原理图

2. 编写程序并调试运行

[本实验注意事项]

[实验总结]

[附实验参考程序]

50

本文来源:https://www.bwwdw.com/article/psvp.html

Top