打印
[51单片机]

从业将近十年!手把手教你单片机程序框架(连载)

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
801
cjseng| | 2016-5-22 23:58 | 只看该作者 回帖奖励 |倒序浏览
jackhwang 发表于 2016-5-17 22:12
485的自动切换基本都是有TXD信号来控制。这种切换要消耗时间、信号驱动。我个人认为不适合传输速度比较快 ...

这个电路我常用,19200波特率没有问题,再高的没试过。

使用特权

评论回复
802
315liang| | 2016-6-11 22:01 | 只看该作者
jianhong_wu 发表于 2014-5-3 08:28
第四十四节:从机的串口收发综合程序框架

开场白:

你好,一直跟着大哥学到现在,现在遇到一个问题,44讲中210行

if((ucRcregBuf[uiRcMoveIndex+0]==0xeb)&&(ucRcregBuf[uiRcMoveIndex+1]==0x00)&&(ucRcregBuf[uiRcMoveIndex+2]==0x55))  //数据头eb 00 55的判断

修改为if(1)

程序才能通讯,不修改程序就不能通讯,想了很久也想不通,还请老大有时间看看的 。

使用特权

评论回复
803
cjsxm626428| | 2016-7-20 13:01 | 只看该作者
楼主牛X啊,写程序的思路很细,像汇编一样直白,找问题好找

使用特权

评论回复
804
xklzw| | 2016-8-4 23:03 | 只看该作者
吴工,您好。我以前好像看到您有写过一个关于函数的使用。就是关于函数形参的巧妙用法,可以到达函数的模块独立性的效果,但是今天翻看您的博客却找不到了,请问是您删了吗?

使用特权

评论回复
805
一笑风云过| | 2016-8-7 11:40 | 只看该作者
程序结构很清晰,值得学习

使用特权

评论回复
806
刘东君| | 2016-9-8 16:41 | 只看该作者
很好啊,精华,对刚入门的帮助特比大,就像小学拼音,26个英文字母一样。对我帮助特别大啊,今天看了前面9节,后续慢慢看

使用特权

评论回复
807
岩子焱| | 2016-10-4 22:28 | 只看该作者
你好,博主,那些压缩包为什么显示已经损坏,是我电脑问题吗

使用特权

评论回复
808
liuxianbing| | 2016-10-10 12:34 | 只看该作者
楼主真是用心良苦,感谢付出!要是早一点认识,我们的**可能就不一样了.

使用特权

评论回复
809
h_8816002| | 2016-10-12 12:03 | 只看该作者
不得不说,您的**中提出的思想,对于我这个从菜鸟级进阶过程中的人来时,实在是受益匪浅,读每一行代码都如沐春风,确实是深度教学好文。市面上卖的书大多是有用没用介绍这个介绍那个,真正的思想反而没有体现出来。
如果您打算出书,我一定先买一本,尽微薄之力支持你!

使用特权

评论回复
810
linxwn| | 2016-10-25 19:49 | 只看该作者
jianhong_wu 发表于 2015-11-28 01:39
第九十节:针对行程开关感应器,分享一种既能及时响应,又能抗干扰处理的识别思路。         我今天在做数 ...

有一种思路是PLC的,做一个梯形加减速,确定脉冲数 加减速时间段,可以利用编码器反馈坐标减速,这样没有冲击

使用特权

评论回复
811
linxwn| | 2016-10-25 19:50 | 只看该作者
jianhong_wu 发表于 2015-11-28 01:39
第九十节:针对行程开关感应器,分享一种既能及时响应,又能抗干扰处理的识别思路。         我今天在做数 ...

有一种思路是PLC的,做一个梯形加减速,确定脉冲数 加减速时间段,可以利用编码器反馈坐标减速,这样没有冲击

使用特权

评论回复
812
fankaimrk| | 2016-10-26 21:05 | 只看该作者
写的不错,谢谢分享,学习学习

使用特权

评论回复
813
busike| | 2016-10-27 14:53 | 只看该作者
学习了!

使用特权

评论回复
814
yongxiang6091| | 2016-11-19 20:11 | 只看该作者
谢谢楼主分享!!!!

使用特权

评论回复
815
arima| | 2016-11-19 23:27 | 只看该作者
写的太好了!

使用特权

评论回复
816
蜂蜜大王| | 2016-11-22 09:48 | 只看该作者
马克  谢谢楼主  

使用特权

评论回复
817
Terrys| | 2016-11-22 14:46 | 只看该作者

使用特权

评论回复
818
WANYCL| | 2016-11-27 12:57 | 只看该作者
吴大哥,我问你一个问题
因为我现在用单片机控制蓝牙,智能家居方面的,
#include <reg52.h>
#define uint unsigned int

sbit led1 = P1^7;    //定义LED1 引脚
sbit led2 = P1^6;    //定义LED2 引脚
void delay(uint k)
{
        uint i,j;
        while(k--)
        {
                for(i=255;i>0;i--)
                        for(j=100;j>0;j--);
        }
}
void com_ser() interrupt 4  //串口中断处理函数,收到数据后产生中断,在这里处理
{
        unsigned char temp;        //定义一个变量,用来存放电脑端发来的数据
  
        if(RI)      //如果数据已经接收完,即RI=1
{
        RI=0;           //对RI进行清零
          temp = SBUF;       //把收到的数据赋值给变量(注意接收的写法)
}   
if(temp=='a')   //判断收到的数据是不是小写的 a
{
        SBUF = 'A';   //是,则把大写的 A 发送给电脑端(注意发送的写法)
        led1 = 1;
        delay(10);
        led1=0;   //并点亮白色LED
}        

else        //如果不是字母 a
{
        SBUF = 'B';     //把 B 发给电脑端,也可以 SBUF = temp 把temp的值发回去
           led2 = 1;
        delay(10);
        led2=0;        //并点亮红色LED
}

while (!TI);     //判断数据是否发送完毕,即TI=1,没发完就在这等待
TI = 0;       //发送完后对TI进行清零
}

void main()      //主函数
{
/******************设定定时器*********************/
        TMOD = 0x20;     //设定定时器的工作方式(方式2)
        TH1  = 0xfd;    //设定波特率为 9600 bps (在11.0592MHZ晶振时)
        TL1  = 0xfd;
       
         /*******************设定串口**********************/
        SM0  = 0;  //SM0 和 SM1 设定串口的工作方式(方式1)
        SM1  = 1;
        REN  = 1;      //允许串口接收外部传来的数据
       
        /******************设定中断**********************/
        ES   = 1;    //允许串口收到数据后产生中断通知我们
        EA   = 1;    //因为总中断开关是控制所有中断的,所以要把它打开
        TR1  = 1;       //启动定时器,串口就开始工作喽!
       
        P1=0x00;
        while (1);     //什么都不做,在这等串口的中断产生
}
程序如上,但在手机APP(蓝牙调试助手)连接蓝牙型号(HC-05)调试时发现手机APP发什么LED灯都亮,所以我个人认为在解码方面有问题
但因为我个人技术有限,所以麻烦吴大哥帮我修改修改,我用的板子是普中科技开发板

使用特权

评论回复
819
WANYCL| | 2016-11-27 12:58 | 只看该作者
吴大哥,我问你一个问题
因为我现在用单片机控制蓝牙,智能家居方面的,
#include <reg52.h>
#define uint unsigned int

sbit led1 = P1^7;    //定义LED1 引脚
sbit led2 = P1^6;    //定义LED2 引脚
void delay(uint k)
{
        uint i,j;
        while(k--)
        {
                for(i=255;i>0;i--)
                        for(j=100;j>0;j--);
        }
}
void com_ser() interrupt 4  //串口中断处理函数,收到数据后产生中断,在这里处理
{
        unsigned char temp;        //定义一个变量,用来存放电脑端发来的数据
  
        if(RI)      //如果数据已经接收完,即RI=1
{
        RI=0;           //对RI进行清零
          temp = SBUF;       //把收到的数据赋值给变量(注意接收的写法)
}   
if(temp=='a')   //判断收到的数据是不是小写的 a
{
        SBUF = 'A';   //是,则把大写的 A 发送给电脑端(注意发送的写法)
        led1 = 1;
        delay(10);
        led1=0;   //并点亮白色LED
}        

else        //如果不是字母 a
{
        SBUF = 'B';     //把 B 发给电脑端,也可以 SBUF = temp 把temp的值发回去
           led2 = 1;
        delay(10);
        led2=0;        //并点亮红色LED
}

while (!TI);     //判断数据是否发送完毕,即TI=1,没发完就在这等待
TI = 0;       //发送完后对TI进行清零
}

void main()      //主函数
{
/******************设定定时器*********************/
        TMOD = 0x20;     //设定定时器的工作方式(方式2)
        TH1  = 0xfd;    //设定波特率为 9600 bps (在11.0592MHZ晶振时)
        TL1  = 0xfd;
       
         /*******************设定串口**********************/
        SM0  = 0;  //SM0 和 SM1 设定串口的工作方式(方式1)
        SM1  = 1;
        REN  = 1;      //允许串口接收外部传来的数据
       
        /******************设定中断**********************/
        ES   = 1;    //允许串口收到数据后产生中断通知我们
        EA   = 1;    //因为总中断开关是控制所有中断的,所以要把它打开
        TR1  = 1;       //启动定时器,串口就开始工作喽!
       
        P1=0x00;
        while (1);     //什么都不做,在这等串口的中断产生
}
程序如上,但在手机APP(蓝牙调试助手)连接蓝牙型号(HC-05)调试时发现手机APP发什么LED灯都亮,所以我个人认为在解码方面有问题
但因为我个人技术有限,所以麻烦吴大哥帮我修改修改,我用的板子是普中科技开发板

使用特权

评论回复
820
WANYCL| | 2016-11-27 13:01 | 只看该作者
WANYCL 发表于 2016-11-27 12:58
吴大哥,我问你一个问题
因为我现在用单片机控制蓝牙,智能家居方面的,
#include

因为程序是改自串口通信,所以后面的注释只作为参考作用,无多大作用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则