嵌入式实验报告_第1页
嵌入式实验报告_第2页
嵌入式实验报告_第3页
嵌入式实验报告_第4页
嵌入式实验报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统及其应用实验题目:保险柜开锁模拟姓名: 班级:学号:一 实验要求使用网络助手发送保险柜密码,单片机通过WiFi模块接收,将密码在数码管上显示,同时点亮对应数字的LED小灯。如果密码输入正确,则继电器打开,模拟开柜成功的LED小灯点亮;如果密码输入错误,则蜂鸣器报警。二 单片机工作原理图1 80C51单片机内部结构图2 80C51单片机引脚图1单片机的CPU 它可以分为运算器和控制器两部分。运算器功能部件包括算术逻辑运算单元ALU、累加器ACC、寄存器B、暂存寄存器TMP1、TMP2、程序状态字寄存器PSW等。控制器功能部件包括程序计数器PC、指令寄存器IR、指令译码器ID、

2、定时控制逻辑电路CU、数据指针寄存器DPTR、堆栈指针SP及时钟电路等。(1)运算器算术逻辑运算单元ALU。ALU可以进行算术、逻辑运算。算术运算有:加、减、乘、除,逻辑运算有:与、或、异或等。累加器ACC。累加器ACC的主要功能是在运算前存放一个操作数,运算后存放一个操作结果。80C51系列单片机虽然在结构上仍然以累加器A作为重要部件。但由于内部电路采取了措施,使得累加器A在数据传送、逻辑操作等方面的核心作用有所削弱。数据可以在片内直接/间接地址的存储器之间直接传送,而不必经过累加器A。但,加、减、乘、除算术运算指令的运算结果都存放在累加器A或AB寄存器对中。暂存器TMP1、TMP2。由图1

3、可知,ALU进行算术逻辑运算前的两个操作数来自暂存器TMP1、TMP2,所以暂存器TMP1、TMP2用于存放运算前的两个操作数。程序状态字寄存器PSW。程序状态字寄存器PSW用来存放运算结果的状态标志。PSW寄存器各位的含义如下,其中PSW.1未定义,其它各位说明如下:图3 PSW寄存器CY:进位标志。它是累加器A的进位位,如果操作结果在最高位有进位(加法)或借位(减法)时置1,否则清0。AC:半进位标志。它是低半字节的进位位(累加器A中A3位向A4位的进位),主要用于BCD码调整。低4位有进位(加法时)或向高4位有借位时(减法时),AC是1,否则,AC清0。F0:用户定义的状态标志位。可通过

4、软件对它置位、复位或测试,以控制程序的流向。RS1、RS0:工作寄存器区选择控制位,用于选择4组工作寄存器之一。可以用软件来置位或清零,以确定工作寄存器区。RS1、RS0与寄存器区的对应关系如下:       RS1、RS0=000区(地址00H07H)       RS1、RS0=011区(地址08H0FH)       RS1、RS0=102区(地址10H17H)       RS1、RS0=113区(地址18H1FH)OV:溢出标

5、志位,用于表示有符号数算术运算的溢出。溢出时OV为1,否则OV为0。P:奇偶标志位。每个指令周期都由硬件来置位或清零,以表示累加器A中1的个数的奇偶性。若1的个数为奇数,则P置位;若1的个数为偶数,则清零。寄存器B。在乘除指令中,用到了寄存器B。(2)控制器 控制器是控制单片机各种操作的部件,用于完成指令规定的操作。它包括程序计数器PC、指令寄存器IR、指令译码器ID、定时控制逻辑、数据指针寄存器DPTR、时钟发生器、复位电路、堆栈指针SP等。程序计数器 PC。程序计数器PC为16位寄存器,用于存放下一条要执行指令地址,具有自动加1功能。指令寄存器IR、指令译码器ID、定时控制逻辑电

6、路。指令寄存器IR用来暂时存放当前取出的指令,并由指令译码器ID译码,产生相应的译码信号,并传送给定时控制电路,定时控制电路发出各种控制信号控制各器件完成指令规定的操作。数据指针DPTR。DPTR为16位寄存器。由于80C51单片机采用哈佛结构,因此,其程序存储器与地址存储器是分开的,程序存储器的地址是由程序计数器PC提供,而数据存储器的地址是由数据指针DPTR提供的,所以DPTR用于存放片外数据存储器及I/O口的地址。时钟电路。时钟电路是计算机的心脏,它控制着计算机的工作节奏。复位和复位电路。计算机在启动运行时都需要复位,复位就是使CPU和系统中的其它部件处于一个确定的初始状态,并从这个状态

7、开始工作。堆栈指针SP。堆栈指针SP用于存放栈顶单元的地址。2单片机的存储器配置 由于80C51单片机采用哈佛结构,所以其程序存储器和数据存储器是分开的,各有自身的寻址系统、控制信号和功能。程序存储器用来存放程序和表格常数;数据存储器通常用来存放程序运行所需要的给定参数和运行结果。从实际的物理存储介质来看,80C51有4种存储空间,它们是片内程序存储器、片外程序存储器、片内数据存储器(含特殊功能寄存器)和片外数据存储器。80C51的存储器配置情况如图2所示。图4 80C51的存储器配置从逻辑地址空间来看,80C51单片机可分为三部分,即:程序存储器、片外数据存储器、片内数据存储器。这

8、3部分分别使用不同的地址指针,不同的访问指令。因此,下面按逻辑结构介绍80C51的存储器结构。(1)程序存储器程序存储器以程序计数器PC作地址指针,通过16位地址总线,可寻址的地址空间为0000H0FFFFH共64K(216=64K)字节,用于存放程序指令码与固定的数据表格等。80C51单片机中内部和外部共64K字节程序存储器的地址空间是统一的。对于有内部ROM的单片机,在正常运行时,应把引脚接高电平,使程序从内部ROM开始执行。当PC值超出内部ROM的容量时,会自动转向外部程序存储器空间。(2)片外数据存储器由图可知,片外数据存储器以DPTR作为地址指针,通过16位地址总线,可寻址的地址空间

9、为0000H0FFFFH共64K(216=64K)字节。用于存放数据与运算结果。(3)片内据存储器片内数据存储器的地址空间从00HFFH共256字节。其地址可由R0、R1寄存器提供。内部数据存储器是最灵活的地址空间,它分成物理上独立且性质上不同的2个区:00H7FH单元组成的128字节RAM区,地址为80HFFH的特殊功能寄存器区(简称SFR区)。1)RAM区(00H7FH)由图2-3可知,RAM区又分为3个区:工作寄存器区、位地址区与数据缓冲区。工作寄存器区(00H1FH)80C51单片机的内部RAM区结构如图2-3所示。位地址区(20H2FH)内部RAM的20H2FH为位寻址区域,见表1所

10、示。这16个单元的每一位都有一个位地址,位地址范围为00H7FH。通常把各种程序状态标志、位控制变量设在位寻址区内。位寻址区的RAM单元也可以作为一般的数据缓冲区使用。  数据缓冲区数据缓冲区的地址空间从30H7FH共80个字节单元,用于存放数据与运算结果,如加法运算时,存放加数、被加数及运算和。通常堆栈区也设置在该区内。有些单片机将显示缓冲区设置在该区内。2)特殊功能寄存器SFR(80HFFH)80C51单片机内的I/O口锁存器、状态标志寄存器、定时器、串行口、数据缓冲器以及各种控制寄存器统称为特殊功能寄存器,它们离散地分布在内部RAM地址空间(80H0FFH)内。累加器

11、ACC、寄存器B、程序状态字PSW、I/O口P0P3等均为特殊功能寄存器。380C51单片机并行输入/输出口80C51单片机含有4 个8位并行I/O口P0、P1、P2和P3。每个口有8个引脚,如图2所示,共有32个I/O引脚,每一个并行I/O口都能用作输入或输出用作输入时,均须先写入“1”, 用作输出时,P0口应外接上拉电阻。P0口的负载能力为8个LSTTL门电路,P1P3口的负载能力为4个LSTTL门电路。各口的第一、第二功能如下:I/O口引脚第一功能第二功能P0口P0.0P0.7输入与输出 分时的传送地址低8位与数据线P1口P1.0P0.7输入与输出无P2口P2.0P2.7输入与

12、输出传送地址的高8位P3口P3.0P3.7输入与输出功能见下文P3.0RXD:串行口输入端P3.1TXD:串行口输出端P3.2INT0:外部中断0中断请求输入端P3.3INT1:外部中断1中断请求输入端P3.4T0:定时器/计数器0外部输入端P3.5T1:定时器/计数器1外部输入端P3.6WR:外部数据存储器写选通信号P3.7RD:外部数据存储器读选通信号四个通道口都有一种特殊的线路结构,每个口都包含一个锁存器,即特殊功能寄存器P0P3,一个输出驱动器和两个(P3口有三个)三态缓冲器。这种结构在数据输出时,可以锁存,即在重新输出新的数据之前,口上的数据一直保持不变。但对于输入信号是不锁存的,所

13、以外设欲输入的数据必须保持到取数指令执行(把数据读取后)为止。三 模块工作原理1、WiFi模块图5 WiFi模块时钟结构图WiFi模块使用的是乐鑫信息科技研制的ESP8266WiFi模块,该模块可以实现将WiFi功能嵌入其他系统,实现数据通过WiFi在不同模块之间的接收和发送。因为是商业产品,所以该模块的内部工作原理不得而知,接下来从如何实现该模块与51单片机之间的数据传输和如何实现ESP8266与网络助手的通信两方面介绍模块工作原理。(1)ESP8266与51单片机通过串口通信。我们采用8位数据异步通信方式。要实现两个具有独立CPU的模块之间的通信,则必须保证这两个模块之间的波特率一致。在信

14、息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。从定义可以看出,只有波特率一致,数据发送方所发送的数据才能被接收方正确接收,不然就会出现错误。我们将ESP8266的波特率设置成了9600,利用单片机的T1定时器,通过计算,将其波特率也设置成了9600,这样就实现了两个模块间波特率一致,从而奠定了串口通信的基础。51单片机的串口通信是全双工的,可以支持同时发送和接收数据。下面分别从单片机接收数据和发送数据两方面介绍串口通信原理。ESP8266模块向单片机发送数据时,将数据分成8个一组,加上起始位和停止位,通过自己的TXD口(另一边接到了单片机的

15、RXD口)将数据逐位发送出去,单片机接收到数据后,若接收中断标志(RI)为0且结束位为1,则会将数据按顺序存入串口通信缓冲寄存器中,即SBUF,接受结束后,RI变成1,从而程序可以得知此次传输完毕,可以进行下一次传输。若RI初始为1,则不接受数据,也不改变RI。单片机向ESP8266发送数据时,同样通过自己的TXD口将数据传输到ESP8266模块。单片机需要先将发送中断(TI)置零,再将要发送的数据写入SBUF,当数据通过SBUF传输到TXD口后,TI会置1,从而告知程序本次传输完成,可以进行下次传输。其中TI和RI都需要编写程序控制其置1和置0,中断标志不会自动恢复。(2)ESP8266与网

16、络助手的通信我们这里采用将ESP8266作为服务端,将网络助手作为客户端接入的方法来实现ESP8266与网络助手的通信。它们之间的数据传输可以使用TCP或者UDP,这里我们采用TCP。首先将ESP8266设置成站模式,然后将其连入已有WiFi,ESP8266被分配得到一个IP地址,并且开启ESP8266的多连模式和服务器端及8080端口。同理将电脑接入相同WiFi,电脑也获取得到一个IP地址,然后在电脑上开启网络助手,创建一个向ESP8266的IP地址和8080端口通信的进程。当将数据写入网络助手内点击发送后,该软件和相关软硬件系统会通过TCP/IP协议和WiFi协议等一系列协议将数据封装成帧

17、,利用WiFi的2.4G UHF射频频段将数据发送出去,ESP8266接收到数据后进行解析,将数据送到指定端口,从而实现数据通信。ESP8266发送数据到网络助手的原理相同。2、流水灯模块图6 流水灯原理图从图中可以看出,8个LED灯的阳极接限流电阻后接到了VCC上,因此当其阴极接到低电平时,LED灯即点亮,接到高电平时,LED灯熄灭。在QX-MCS 51单片机开发板中,8个流水灯的引线接到了51单片机的P1口上,因此可以直接通过程序控制51单片机的P1口输出低电平来点亮小灯。3、8位共阴极数码管模块图7 8位共阴极数码管原理图如图所示,8个共阴极数码管通过两个74HC573锁存器实现分别控制

18、和数据传输。锁存器的C端接入高电平时,锁存器可以读进数据,当其接入低电平时,锁存器停止读取数据,从而实现锁存功能。通过段锁存器将8位数据输入到数码管内,通过位锁存器选通8个数码管中的一个。数码管是共阴极接法,因此段选高电平点亮8段中对应的段,位选低电平选通相应的数码管。而在模拟保险柜开锁的实验中,需要同时在多个数码管上显示字符,因此需要利用动态扫描方法。因为人眼的视觉暂留时间为1/24秒,因此只要保证在40ms以内对每个数码管实现一次扫描,即可让看到多个数码管均显示相应字符的效果。在QX-MCS 51单片机开发板中,段锁存器的选通信号口与51单片机的P2.6口的引线相连,位锁存器的选通信号口与

19、P2.7口的引线相连,锁存器的8位数据输入线与P0口的引线相连。4、蜂鸣器模块图8 蜂鸣器原理图蜂鸣器原理如上图所示,蜂鸣器一端接地,另一端接到三极管的C端,三极管E端接VCC,B端接电阻后接到了单片机的P23口。当P23输出高电平时,三极管不导通,蜂鸣器不响;当P23输出低电平时,三极管导通,有电流流过蜂鸣器,从而蜂鸣器发出声音。四 实验流程图图9 保险柜开锁模拟程序流程图五 实验程序#include <reg52.h> /包含头文件#include <string.h>#include <intrins.h>#define uint unsigned i

20、nt#define uchar unsigned char/*端口定义*/P1.0P1.7为小灯07,分别对应数字07sbit LED0=P10;sbit LED1=P11;sbit LED2=P12;sbit LED3=P13;sbit LED4=P14;sbit LED5=P15;sbit LED6=P16;sbit LED7=P17;sbit LED8=P24;/小灯8sbit LED9=P25;/小灯9sbit BEEP=P23;/蜂鸣器,密码输入错误会报警sbit OPEN=P22;/继电器sbit DU=P26;/段选信号锁存器sbit WE=P27;/位选信号锁存器/*波特率发生

21、器相关功能寄存器的定义*/sfr AUXR=0x8E;sfr BRT=0x9C;sfr AUXR1=0xA2;/*相关变量*/uchar Receive,i; uint n;uchar Receive_table15;/用于接收wifi模块反馈到MCU上的数据uchar password10; /保险柜初始密码uchar input10;/保存输入的密码uchar display8; /保存数码管需要显示的内容uchar code lcd_num10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F /数字09;/*名称:延时函数作用:毫秒级延

22、时,微妙级延时函数。*/void ms_delay(uint t)uint i,j;for(i=t;i>0;i-) for(j=110;j>0;j-);void us_delay(uchar t)while(t-);/*名称:阴极数码管显示函数作用:根据输入类型,显示display相应的信息在数码管上。*/void Lcd_Display()uint i;for(i=0;i<6;i+)P0=0xff;WE=1;P0=_crol_(0xfe,i);WE=0;DU=1;P0=displayi;DU=0;ms_delay(1);/*名称:9600波特率发生器函数作用:通过T1定时器

23、实现,以实现异步串行通讯。*/void Uart_Init()/使用定时器1作为波特率发生器SCON=0x50;/设置为串行口以方式1工作,8位异步通讯,允许接收中断。/一帧信息为10位,1位起始位,8位数据位(低位在先),1位停止位。PCON=0x80;/SMOD波特率选择位为1,SMOD=1.TMOD=0x21;/设置定时器1为波特率发生器,工作在模式2,8位自动装载TH1=0xFA;/波特率9600 ,TH1=256-FOSC/16/12/波特率TL1=TH1;EA=1; /总中断打开ES=0; /关闭串口中断TR1=1; /启动定时器1/*名称:串口发送函数功能:MCU向其他与其连接的

24、设备发送数据(此处是无线WIFI模块ESP8266)*/void Send_Uart(uchar value)ES=0;/关闭串口中断TI=0;/清发送完毕中断请求标志位SBUF=value;/发送while(TI=0);/等待发送完毕TI=0;/清发送完毕中断请求标志位ES=1;/允许串口中断 /*名称:WIFI模块设置函数作用: 启动模块,以便可以实现无线接入和控制*/void ESP8266_Set(uchar *puf) /数组指针*puf指向字符串数组 while(*puf!='0') /遇到结束跳出循环Send_Uart(*puf); /逐位向WIFI模块发送控制指

25、令。us_delay(5);puf+;us_delay(5);Send_Uart('r');/回车us_delay(5);Send_Uart('n');/换行ms_delay(1000);/*名称:ESP8266发送数据函数功能:用于与wifi模块相连的终端发送数据*/void ESP8266_Sent(uchar *puf) / 数组指针*puf指向字符串数组 ESP8266_Set("AT+CIPSEND=0,60");while(*puf!='0') /遇到空格跳出循环Send_Uart(*puf); /向WIFI模块发

26、送控制指令。us_delay(5);puf+;us_delay(5);Send_Uart('n'); /换行ms_delay(10);/*名称:ESP8266初始化函数功能:设置ESP8266WiFi模块的工作方式*/void ESP8266_Init()ESP8266_Set("AT+RST");/重新启动wifi模块ESP8266_Set("AT+CIPMUX=1");/开启多连接模式,允许多个各客户端接入ESP8266_Set("AT+CIPSERVER=1,8080");/启动TCP/IP端口为8080,实现基

27、于网络控制/*名称:灯状态清零函数功能:熄灭所有小灯*/void led_clear()P1=0xff;LED8=0;LED9=0;/*名称:其他模块始化函数功能:初始化保险柜密码和继电器*/void Other_Init()for(i=0;i<8;i+)inputi='0'password0='8'password1='8'password2='8'password3='8'password4='8'password5='8'password6='0'OPEN

28、=1;/*名称:数码管初始化函数功能:保险柜数码管初始显示内容设置为'- - - - - - - -'*/void Lcd_Init()uint i;for(i=0;i<6;i+)displayi=0x40;/*名称:主函数作用:程序的执行入口*/void main()led_clear();/初始化LED灯Uart_Init();/初始化波特率发生器ESP8266_Init();/初始化WiFi模块Other_Init();/初始化保险柜密码和蜂蜜器等其他部件Lcd_Init();/初始化数码管显示BEEP=0;ms_delay(1000);BEEP=1;ES=1;/允

29、许串口中断while(1) Lcd_Display();/数码管对应位置显示对应数字if(Receive_table0='+')&&(Receive_table1='I')&&(Receive_table2='P')&&(Receive_table3='D')/MCU接收到的数据为+IPD时进入判断uint k;input0=Receive_table9;input1=Receive_table10;input2=Receive_table11;input3=Receive_tabl

30、e12;input4=Receive_table13;input5=Receive_table14;input6='0'led_clear();/熄灭所有灯for(k=0;k<6;k+)uchar ch=inputk;/获取该数字switch(ch)case '0':LED0=0;displayk=lcd_num0;break;case '1':LED1=0;displayk=lcd_num1;break;case '2':LED2=0;displayk=lcd_num2;break;case '3':LED

31、3=0;displayk=lcd_num3;break;case '4':LED4=0;displayk=lcd_num4;break;case '5':LED5=0;displayk=lcd_num5;break;case '6':LED6=0;displayk=lcd_num6;break;case '7':LED7=0;displayk=lcd_num7;break;case '8':LED8=1;displayk=lcd_num8;break;case '9':LED9=1;displayk

32、=lcd_num9;break;default:break;/输入的是非法字符,不被接收if(password0=input0)&&(password1=input1)&&(password2=input2)&& (password3=input3)&&(password4=input4)&&(password5=input5)OPEN=0;BEEP=1;elseBEEP=0;OPEN=1; /*名称:串行通讯中断作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数 据正常的收发。*/void U

33、art_Interrupt() interrupt 4 static uchar i=0;if(RI=1)/数据位接收完毕,关接收标志,保存数据位RI=0;Receive=SBUF; /MCU接收wifi模块反馈回来的数据 Receive_tablei=Receive; i+;if(Receive_tablei-1='n')i=0; /遇到换行 重新装值else TI=0;/RI不为1,那不管TI是否为0,置0就好六 实验现象开发板上电后,听见蜂鸣器长鸣一声,前六位数码管显示,即表明初始化成功。通过网络助手作为客户端接入,发送开柜密码“123456”。保险柜将密码显示在数码管上

34、,并点亮相应的LED小灯,若密码输入错误,则蜂鸣器长鸣。通过网络助手发送正确的开柜密码“888888”。密码输入正确,蜂鸣器停止,继电器打开,代表保险柜开启的小灯被点亮。注:流水灯模块的八个灯从右到左依次代表数字07,面包板上左侧的两个灯从上到下分别代表数字8,9,右侧的一个灯代表保险柜状态,熄灭则代表保险柜关闭,点亮则代表保险柜开启。七 心得与建议1.心得(1)关于ESP8266的接线实验一开始使用ESP8266和USB接口相连,利用串口助手进行调试,ESP8266与USB连接时用了4根线,即ESP8266的VCC、GND、UTXD、URXD分别接USB的V3.3、GND、URXD、UTXD

35、。接线完成后使用串口助手采用115200波特率调试,发现无数据响应。后来查阅资料得知,ESP8266有新旧两个版本,旧版本中间四根线悬空即可正常工作,新版本需要将CH_PD口接V3.3或者上拉电阻,模块才能启动进入AT指令系统。 新版(右上角比旧版多出一块) 旧版采用新的接线方法后,ESP8266可以成功响应串口助手发送的AT指令。然后我查看了一下实验室的ESP8266模块,发现里面确实有新版的也有旧版的,在使用时需要注意接线方式的不同。(2)关于实现ESP8266通过串口助手与网络助手的通信。这又是一个让人头疼的问题,根据各种资料显示,ESP8266可以作为服务器也可以作为客户端,只需要设置相应的指令即可。一开始我使用手机开的热点,然后分别测试在站模式下将ESP8266作为客户端和服务端,用网络助手与其通信,发现无法进行通信。分析原因可能是电脑所连接的WiFi与ESP8266所连接的WiFi不是同一个,所以导致电脑上的网络助手与ESP8266无法通信。后来将电脑和ESP8266模块都接入了老师的无线路由中,将它们都放在了同一个路由环境内,本想可以比较容易实现通信,但是尝试了将ESP8266作为客户端进行配置,利用网络助手当服务端,开启相应IP地址和端口号,然后通过ESP8266建立与该IP地址和端口号的TCP连接,结果返回连接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论