51单片机-串口&EEPROM

发布者:psi33最新更新时间:2021-10-19 来源: eefocus关键字:51单片机  串口  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

1.题目要求


作为本教程最后一个例程,我们也不打算写的太复杂,这次还是运用串口的知识,实现用串口往EEPROM写入数据,同时也能用串口读出EEPROM里的数据出来显示在电脑端的窗口上。根据前几讲的串口与液晶屏的代码理解,这一讲的例程也不难理解。


2.main.c测试代码


#include  

#include //详见第六章第8讲

#include      //详见第十章第4讲

#include       //详见第十二章第3讲

  

u8 uart_i=0;

u8 pdata RXDBUF[130];

void COUNT_TIMES()

{

    TMOD&=0xF0;   //清0低四位

    TMOD|=0x01;   //设置定时器0为工作模式1

}

    

void UART_E2Write()

{

    u8 j,k;

    u8 E2_add;

    u8 pdata E2BUF[102];//存取从RXDBUF[12]开始后的数据,RXDBUF[0]~RXDBUF[11]是字符串“E2Write:xxx,”(xxx表示地址)

    if(  RXDBUF[0]=='E'&&RXDBUF[1]=='2'&&RXDBUF[2]=='W'&&RXDBUF[3]=='r'

       &&RXDBUF[4]=='i'&&RXDBUF[5]=='t'&&RXDBUF[6]=='e'&&RXDBUF[7]==':')                               

    {

        E2_add=(RXDBUF[8]-'0')*100+(RXDBUF[9]-'0')*10+(RXDBUF[10]-'0'); //确定要开始写入的地址  

        k=uart_i-12;                                                    //由于uart_i在“InterruptUART()”函数中的最后自加了一次,

                                                                        //所以“k=uart_i-12;”表示的是收到要写入EEPROM的字符串的个数

          

        for(j=0; j     

        E2Write(E2BUF,E2_add,k);                                        //把内容写入进EEPROM中

        printf_str("rn写入完成!rn");

        printf_str("地址写到了");

        printf_num( (u32)E2_add+j-1 );                                  //打印出此时EEPROM写到了哪个地址位置了,因为要传入的参数为u32类型,所以必须强制转换

        printf_rn();   

    }

}

   

void UART_E2Read()

{

    u8 E2_add,n;

    u8 pdata E2BUF[102];//接收缓冲区,最多能接收50个汉字

    if(  RXDBUF[0]=='E'&&RXDBUF[1]=='2'&&RXDBUF[2]=='R'&&RXDBUF[3]=='e'

       &&RXDBUF[4]=='a'&&RXDBUF[5]=='d'&&RXDBUF[6]==':')                               

    {

        E2_add=(RXDBUF[7]-'0')*100+(RXDBUF[8]-'0')*10+(RXDBUF[9]-'0'); //确定要开始读出的地址  

        n=(RXDBUF[11]-'0')*100+(RXDBUF[12]-'0')*10+(RXDBUF[13]-'0');   //确定要读出的个数

     

        E2Read(E2BUF,E2_add,n);        

        E2BUF[n]='';     //添加结束符

     

        printf_str(E2BUF); //打印出从EEPROM读出的数据    

    }

}

   

void main()

{   

    u8 x; 

    EA = 1;        //闭合总中断开关

    COUNT_TIMES(); //初始化计数器

    ConfigUART(9600);

    

    while(1)

    {    

        if(TH0>=200)        //判断是否把数据接收完毕

        {

            TR0=0;          //关闭定时器,停止计时

      

            UART_E2Write(); //查看串口发送来的信息是否满足EEPROM写入数据的命令

            UART_E2Read();  //查看串口发送来的信息是否满足EEPROM读出数据的命令

      

            uart_i=0;       //uart_i归0是为了下次接收新的字符串是从RXDBUF[0]开始存取数据

            TH0=0;          //清零定时器的寄存器,下次再从0开始计时  

            TL0=0;     

      

            for(x=0;x<64;x++)RXDBUF[x]=0x00; //发送完接收到的字符串之后,内存区全部清除数据,统一改为0x00以便下次接收新的字符串

        }

    } 

}

    

void InterruptUART() interrupt 4

{  

    if (RI)  //接收到字节

    {

        RI = 0;

      

        TH0=0;//每接收到一个字节数据就清0寄存器的值,定时时间又是从0开始计时,直到TH0大于等于200的时候,

        TL0=0;//时间超过50ms,也就是没有再接收到数据,因为接收到数据都会进入“if (RI)”把TH0和TL0清0,TH0大于等于200,

              //超出了等待时间,证明后面没有数据发送过来了    

        TR0=1;//接收到第一个数据就打开定时器开始计时,后面接收到第二,第三个数据照样打开定时器计时,直到在主函数里面被关闭为止

      

        RXDBUF[uart_i]=SBUF; //接收一个字节数据

        uart_i++;            //RXDBUF从0号元素不停往下存取数据   

    }

}


下一讲我们再教大家如何实践操作,代码可以了解了解意思先。


关键字:51单片机  串口  EEPROM 引用地址:51单片机-串口&EEPROM

上一篇:51单片机-串口&液晶屏Ⅲ
下一篇:51单片机-实践操作

推荐阅读最新更新时间:2024-11-11 13:28

51单片机-按键的中断检测
接着昨天,继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成
[单片机]
学<font color='red'>51单片机</font>-按键的中断检测
51单片机编程环境搭建方法
前言 本教程将向大家介绍KEIL C51软件的安装,通过本教程的学习,我们可以在电脑上安装一个KEIL C51 软件,为后面学习程序的开发做好铺垫。 一、KEIL C51安装 1.软件获取 要在电脑上成功安装KEIL C51,首先必须要有安装包,我们可以通过万能的百度,搜索关键字“KEIL C51 下载”,上面会有很多下载渠道,也可以在KEIL的官网上下载,打开界面如下图所示。 使用我们提供下载好的软件包,其内部含有如下图所示文件。 C51V901.exe:是KEIL C51 软件的安装文件。 keygen_new2032.zip:KEIL C51 破解软件,在KEIL C51 不破解的情况下只 能编译2K 大小文件,如果
[单片机]
<font color='red'>51单片机</font>编程环境搭建方法
51单片机复位电路的设计
单片机在可靠的复位之后,才会从0000H地址开始有序的执行应用程序。同时,复位电路也是容易受到外部噪 声干扰的敏感部分之一。因此,复位电路应该具有两个主要的功能: 1. 必须保证系统可靠的进行复位; 2. 必须具有一定的抗干扰的能力; 一、复位电路的RC选择 复位电路应该具有上电复位和手动复位的功能。以MCS-51单片机为例,复位脉冲的高电平宽度必须大于2个机器周期,若系统选用6MHz晶振,则一个机器周期为2us,那么复位脉冲宽度最小应为4us。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。图1是利用RC充电原理实现上电复位的电路设计。实践证明,上电瞬间RC电路充电
[单片机]
<font color='red'>51单片机</font>复位电路的设计
51单片机寄存器寻址方式与指令举例
寄存器寻址的寻址范围是: 1、4个工作寄存器组共有32个通用寄存器,但在 指令 中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。 2、部份专用寄存器。例如,累加器A、通用寄存器B、地址寄存器DPTR和进位位CY。 寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能得到操作数。 例如:MOV A,R0 这条指令的意思是把寄存器R0的内容传送到累加器A中,操作数就在R0中。 INC R3 这条指令的意思是把寄存器R3中的内容加1 从前面的学习中我产
[单片机]
51单片机(八)—— 数码管电路介绍
在51单片机关于数码管的实验电路中,采用的硬件是一个八位八段共阴极数码管,通过两个锁存器74HC573来控制。数码管电路的原理图如下图所示。 所谓“八位”指的是数码管上有八个子单元。每个子单元如下图所示。实际上开发板上的八位数码管是由两个四位八段共阴数码管组成。 所谓“八段”指的是每个子单元由8个发光二极管组成,如上图所示,八段分别为:A、B、C、D、E、F、G、DP。 数码管按照连接方式可以分为共阴数码管和共阳数码管。二者的区别在于每一位的8个发光二极管是阴极连接在一起还是阳极连接在一起。共阴数码管的阴极连接在一起,共阳数码管的阳极连接在一起。 开发板上包含了2个四位八段共
[单片机]
<font color='red'>51单片机</font>(八)—— 数码管电路介绍
基于51单片机的酒精浓度监测仪
一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+MQ-3酒精检测模块+小灯+ADC0832。 本设计采用51单片机为核心控制,通过调节电位器可以模拟MQ-3酒精浓度的变化,MQ-3采集到的模拟电压信号会通过ADC0832转换为数字电压信号,单片机会将电压信号进行处理和分析并得到我们想要的酒精浓度信号,通过LCD1602显示屏显示酒精浓度,当检测到的酒精浓度高于设置的阈值,小灯就会直接进行报警。 二.仿真概述 1.通过LCD1602显示实时检测到的酒精浓度和设置的酒精浓度阈值。 2.通过MQ-3乙醇模块进行酒精浓度的检测。 3.当检测到的酒精浓度值超过设定阈值后就会通过小灯进行报警。 三
[单片机]
基于<font color='red'>51单片机</font>的酒精浓度监测仪
MSP430F149串口收发程序详解
MSP430单片机的串口收发程序涉及到多个寄存器,可以一步一步按照以下步骤进行配置: 1、首先将用到的IO口设置为第二功能,例如要使用P3.4和P3.5作为USART0的TXD和RXD,则有 P3SEL |= BIT3+BIT4; 2、使能串口收发功能,要配置以下寄存器 如果既要收,又要发,则需要将UTXE0和URXE0置1,因为他们默认都是不打开的。 在IAR的头文件中有关于两位的掩码: #define UTXE0 (0x80) #define USPIE0 (0x40) 因此,我们可以直接使用语句: ME1 |= UTXE0 + URXE0; 3、选择每帧的数据位的个数,需要配置寄存器: 默认的是7bit数据位,因此将C
[单片机]
基于51单片机的智能恒温箱设计--数码管显示
一.硬件方案 根据恒温箱控制器的功能要求,并结合对51系列单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系统的控制核心。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到的温度值实时的显示出来,当加热到设定温度值时,单片机控制声光报警模块,发出声光报警,同时关闭加热器。当自然冷却到设定温度50摄氏度以下时,单片机再次启动加热器,如此循环反复,以达到恒温控制的目的。 主要由51单片机+最小系统+数码管显示模块+数码管驱动模块+温度采集模块+蜂鸣器模块+LED指示灯模块+继电器驱
[单片机]
基于<font color='red'>51单片机</font>的智能恒温箱设计--数码管显示

推荐帖子

低气压试验箱窥探极端环境下的产品性能
  随着科技的不断进步,人类对于各种极端环境下设备性能的要求也越来越高。其中,低气压环境是一种极端的条件,它常常出现在高海拔地区、太空等场景中。为了能够在这些恶劣的环境条件下确保设备正常运行,低气压试验箱应运而生。  低气压试验箱是一种专门用来模拟低气压环境的设备。它能够通过控制内部的气压,创造出与高海拔或太空相似的环境,以便测试设备在这些条件下的工作表现。这种试验箱通常由密封的箱体和内置控制系统组成,箱体通过减压和抽气的方式将内部气压降低到所需的低气压水平。  在低气压试验箱中
林频仪器 测试/测量
TI 用于Virtex™-6 FPGA 的微型电源解决方案
此电源参考设计支持针对Xilinx’sVirtex-6FPGAsolutions解决方案的所有电源要求TI用于Virtex™-6FPGA的微型电源解决方案
莫妮卡 模拟与混合信号
零线和地线,别不当回事!
一、零线和地线区别零线是在供电端(发电厂、变电站、变压器)接地,或在入户前重复接地,是工作接地线,是输电线路的一部分,电流经电厂→火线→负载→零线反回电厂。地线在用户端接地,和用电电器的金属外壳或人体可触部位连接,使机壳与大地等电位,保护人体不触电。零线不与输电线路构成回路,正常情况下没有电流。注意两者的区别:“1.零线和地线这两个是不同的概念,不是一回事,千万别互换或混接。2.地线的对地电位为零,是就近接地。3.零线的对地电位不一定为零。零线是在最近的变电所接地,和本地的接
qwqwqw2088 模拟与混合信号
网上可以购买《STM32系列ARMCortex-M3微控制器原理与实践》
当当网:http://search.dangdang.com/search.aspx?selectcatalog=&key=STM32%CF%B5%C1%D0ARM+CORTEX-M3%CE%A2%BF%D8%D6%C6%C6%F7%D4%AD%C0%ED%D3%EB%CA%B5%BC%F9&search=%CB%D1+%CB%F7&catalog=&SearchFromTop=1China-Pub网上书店:http://www.china-pub.com/search/power_s
dan123456 stm32/stm8
STM8的SPI怎么配置成接收16位数据?
数据寄存器是8位的,怎么配置成16位模式??STM8的SPI怎么配置成接收16位数据?楼主想表达什么意思,据我所知,这个是该不了的吧STM8的SPI有16位模式吗?spanstyle=position:absolute;display:noneid=attach_16205onmouseover=showMenu(this.id,0,
haozi963 stm32/stm8
【STM32H7S78-DK】 五 乱序键盘实现及分析
【STM32H7S78-DK】五乱序键盘实现及分析【STM32H7S78-DK】一开箱贴【STM32H7S78-DK】二touchgxf环境搭建和基本测试【STM32H7S78-DK】三touchgxf和stm32cubeide和led按键测试【STM32H7S78-DK】四下载失败问题及解决、计数器实现及分析之后一、打开touchgfxdesigner,加上提示文本和10个标号按键,一个
damiaa stm32/stm8
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved