`

浅谈嵌入式入门

阅读更多

嵌入式入门小结

最近,荒废了一段时间的JAVAAndroid,玩了一段时间的89c52单片机。简单小结一下。一是给自己前一段时间的工作做一个记录,自己以后可以回头看看自己跌跌撞撞的入门过程。二是可以给学弟学妹一些经验启示。

提示:以下观点均为个人观点,正所谓所见皆偏,大家如果对我所言有不同的观点,欢迎找我讨论。

 

2013103日,为了完成电路老师作业一个电子小制作,我翻开了《爱上单片机》,不得不说这本书写的挺好,生动活泼,不拘一格这种叙事风格我特别喜欢。在作者的悉心指导下。我最终做出来了八音电子琴。

具体制作过程,详见书。

我遇到的问题

一.程序烧不进去

当时线路都是对的就是烧不进去程序

解决方法:1. stc-isp 时,注意热插拔后才会执行烧录程序。具体操作就是点击烧录后

            VCC的杜邦线,拔出后再插上。

2.把最高波特率和最低波特设为1200(原理暂时不明)

二.用蜂鸣器发音不准确

完成了总线的连接,但是发音效果不理想

解决方法:1.换了个喇叭,不用蜂鸣器。

 

如果是用开发板就可以忽略上面的问题

 

10天做出蓝牙小车

主要实现了,串口通信,最小系统板的焊接,程序的编写,以及线路的连接。

了解了单片机开发相关软件的安装,单片机基础知识,数码管综合使用,中断定时器,电子钟的程序设计,以及串口通信。

具体实现歩奏:看视频动手做(实验室有视频哦~

模块简洁:MCU模块供电模块蓝牙转串口模块驱动模块

注意事项:蓝牙转串口模块上的RXDTXD分别接单片机上的TXDRXD.

          另外再给单片机烧录程序时要把蓝牙与单片机分开

               否则会弄坏蓝牙串口模块

感想:由于中途给单片机烧程序时候没把蓝牙模块分开,导致中间有4天进度缓慢,但也因祸得福,深入了解了蓝牙串口模块。并且总结了经验教训。

 

感悟:嵌入式入门特别坑,尤其是在没有人指导的情况下,遇到问题很难得到专业性指导,但是只要入门后就特别轻松。就像软件模块化一样,你只要了解不同的通信协议,你就可以很轻松的添加各种模块来实现你想要的功能。(例如添加一个wifi模块,就从蓝牙车变成wifi车)

 

接下来几个月只要是对前面的蓝牙小车和wifi小车的电路图,工作原理等资料做进一步的整理。同时做出我们自己的手机端的上位机APP。如果可能的话,再加上一些传感器,使小车更智能。

 

下面附上小车的MCU源码

#include<REG52.h>

 

sbit LED=P1^0;

sbit LED2=P1^1;

 

sbit CHE1=P1^0;

sbit CHE2=P1^1;

sbit CHE3=P1^2;

sbit CHE4=P1^3;

 

char flag=0;//设置标志位

char a;//缓冲接受字符

 

void init();//初始化程序

 

void main(){

                   LED=1;

      LED2=1;

              init();//初始化中断器

              while(1){

                   if(flag==1){

 

                            ES=0;//关闭串口

                            if(a==0x00){

                            CHE1=1;

                            CHE2=0;

                            CHE3=1;

                            CHE4=0;

}

                            if(a==0x01){

                                     CHE1=1;

                            CHE2=0;

                            CHE3=0;

                            CHE4=1;

                            }

 

 

                            if(a==0x02){

                                     CHE1=0;

                            CHE2=1;

                            CHE3=1;

                            CHE4=0;

                            }

 

 

                            if(a==0x03){

                                     CHE1=0;

                            CHE2=1;

                            CHE3=0;

                            CHE4=1;

                            }

 

              if(a==0x04){

                                     CHE1=0;

                            CHE2=0;

                            CHE3=0;

                            CHE4=0;

                            }

 

                            flag=0;//清除标志位

                            ES=1;//打开串口中断

                            }

              }

             

}

 

void communication() interrupt 4

{

              RI=0;//取消本次串口的响应

              a=SBUF;//接受缓冲区的数据

              flag=1;//标记位

             

}

void init(){

              TMOD=0x20;//定时器1设定为方式2 8位数据自动从装

              TH1=0xfd;//对定时器赋值,高8位与低低8位相同

              TL1=0xfd;//波特率设为9600

              TR1=1;//打开定时器1

              SM0=0;//设置串口的工作方式1

              SM1=1;

              REN=1;//允许串口

              EA=1;//开总中断

              ES=1;//打开串口中断

}

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics