打印
[51单片机]

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

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
461
我去,这么久

使用特权

评论回复
462
jianhong_wu|  楼主 | 2014-8-13 22:30 | 只看该作者
zhjyuanji 发表于 2014-8-13 14:02
更新太慢了啊 楼主

我至少每个星期更新一篇。因为我把这个看得很重,每写一篇前,我都要仔细进行规划,并且等我某天状态最好的时候才开始动笔写。我宁愿进度慢一点,也要把质量内容写好。因为分享的东西,只要写了一次,以后就可以批量传播和复制给千千万万的初学者,所以我有这个责任心好好写,写出我最真实的水平。

使用特权

评论回复
463
f502819619| | 2014-8-14 11:26 | 只看该作者
顶起来,非常感谢分享

使用特权

评论回复
464
genghelong| | 2014-8-15 21:49 | 只看该作者
jianhong_wu 发表于 2014-3-5 21:58
第四节:累计定时中断次数使LED灯闪烁。

开场白:

很高兴楼主这么细心认真分享了自己的经验,在认真看了楼主的“第四节:累计定时中断次数使LED灯闪烁。”在T0中断程序中觉得有个问题:
1、TF0=0;书上说CPU响应中断时自动复0;应该不需要TF0=0了吧?
2、TR0=0; 不是关中断,而是T0停止计数;这样便会造成定时器T0不是连续计数,定时可能不准确;
如果我理解有错,烦劳楼主指正,谢谢!

void T0_time() interrupt 1
{
  TF0=0;  //清除中断标志
  TR0=0; //关中断

  if(uiTimeCnt<0xffff)  //设定这个条件,防止uiTimeCnt超范围。
  {
      uiTimeCnt++;  //累加定时中断的次数,
  }

TH0=0xf8;   //重装初始值(65535-2000)=63535=0xf82f
TL0=0x2f;
TR0=1;  //开中断
}

使用特权

评论回复
465
cjseng| | 2014-8-15 22:44 | 只看该作者
genghelong 发表于 2014-8-15 21:49
很高兴楼主这么细心认真分享了自己的经验,在认真看了楼主的“第四节:累计定时中断次数使LED灯闪烁。” ...

认真你就输了。

使用特权

评论回复
466
jianhong_wu|  楼主 | 2014-8-15 23:00 | 只看该作者
cjseng 发表于 2014-8-15 22:44
认真你就输了。

讲话好幽默;P

使用特权

评论回复
467
jianhong_wu|  楼主 | 2014-8-15 23:04 | 只看该作者
genghelong 发表于 2014-8-15 21:49
很高兴楼主这么细心认真分享了自己的经验,在认真看了楼主的“第四节:累计定时中断次数使LED灯闪烁。” ...

1、TF0=0;书上说CPU响应中断时自动复0;应该不需要TF0=0了吧?
答:我平时是用PIC单片机做项目比较多,你说的这个问题我也不敢确定,你以书为准。我即使多加一句也不会有影响。

2、TR0=0; 不是关中断,而是T0停止计数;这样便会造成定时器T0不是连续计数,定时可能不准确;
如果我理解有错,烦劳楼主指正,谢谢!
答:进入中断,我就喜欢停止计数,出中断的时候我才会打开中断。因为时间很短,所以我认为误差很小,只要你不是做实时时钟,就不会影响系统的使用。你也可以按照你的理解来改,不一定要按我的思路来做。这种使用方法是我多年来形成的习惯。

使用特权

评论回复
468
LIYLONG| | 2014-8-18 18:33 | 只看该作者
:lol                          

使用特权

评论回复
469
jianhong_wu|  楼主 | 2014-8-19 16:29 | 只看该作者
第六十三节:大数据的减法运算。

开场白:
直接用C语言的“-”运算符进行加法运算时,“被减数”,“ 减数”,“差”,这三个数据的最大范围是unsigned long 类型,也就是数据最大范围是4个字节,十进制的范围是0至4294967295。一旦超过了这个范围,则运算会出错。因此,当进行大数据减法运算时,我们要额外编程序,实现大数据的算法。其实这种算法并不难,就是我们在小学里学的四则运算算法。
      我们先要弄清楚一个新的概念。不考虑小数点的情况下,数据有两种表现形式。一种是常用的变量形式,另外一种是BCD码数组形式。变量的最大范围有限,而BCD码数组的形式是无限的,正因为这个特点,所以我们可以进行大数据运算。
    这一节要教大家两个知识点:
第一个:如何编写比较两个非组合BCD码数据的大小。
第二个:如何编写涉及到大数据减法运算的算法程序函数,同时也复习了指针的用途。

具体内容,请看源代码讲解。

(1)硬件平台:
    基于朱兆祺51单片机学习板。

(2)实现功能:
波特率是:9600 。
通过电脑串口调试助手模拟上位机,往单片机发送组合BCD码的被减数和减数。单片机把组合BCD码的运算结果返回到上位机。最大范围4位,从0到9999,如果被减数小于减数则返回EE EE EE报错。往单片机发送的数据格式:EB 00 55 XX XX 0d 0a  YY YY  0d 0a指令,其中EB 00 55是数据头,XX 是被减数,可以是1个字节,也可以是2个字节。YY是减数,可以是1个字节,也可以是2个字节。0d 0a是固定的结束标志。
例如:
(a)8259 – 5267 = 2992
上位机发送数据:eb 00 55 82 59 0d 0a  52 67 0d 0a
单片机返回:29 92

(b)5267 - 8259=小于0  所以报错
上位机发送数据:eb 00 55  52 67 0d 0a  82 59 0d 0a
单片机返回:EE EE EE  表示出错了

(3)源代码讲解如下:
第六十三节源代码讲解.rar (5.14 KB)
总结陈词:
既然这节讲了减法程序,那么下一节接着讲常用的乘法程序,这种大数据的乘法程序是什么样的?欲知详情,请听下回分解----大数据的乘法运算。

(未完待续,下节更精彩,不要走开哦)

使用特权

评论回复
470
armxu| | 2014-8-19 17:08 | 只看该作者
整理的吴坚鸿的**,代码不全。版权属于吴坚鸿,我只是整理排版。

吴坚鸿谈初学单片机.pdf

3.61 MB

使用特权

评论回复
471
xg3469| | 2014-8-19 17:30 | 只看该作者
整个全集网售也好!

使用特权

评论回复
472
jianhong_wu|  楼主 | 2014-8-19 23:54 | 只看该作者
armxu 发表于 2014-8-19 17:08
整理的吴坚鸿的**,代码不全。版权属于吴坚鸿,我只是整理排版。

整理的非常好,感谢你的付出。

使用特权

评论回复
473
jianhong_wu|  楼主 | 2014-8-19 23:57 | 只看该作者
armxu 发表于 2014-8-19 17:08
整理的吴坚鸿的**,代码不全。版权属于吴坚鸿,我只是整理排版。

要是在前面第一页增加一个目录,效果会更好。

使用特权

评论回复
474
烹小鲜| | 2014-8-20 10:41 | 只看该作者
做个记号,方便下次学习,谢谢楼主!

使用特权

评论回复
475
armxu| | 2014-8-20 12:36 | 只看该作者
jianhong_wu 发表于 2014-8-19 23:57
要是在前面第一页增加一个目录,效果会更好。

PDF文件中有书签,打开就知道了。

使用特权

评论回复
476
shcshc1234| | 2014-8-20 20:07 | 只看该作者
elec921 发表于 2014-3-6 08:26
基本功很好,再看点程序结构、算法、和技巧的书    变大虾分分钟的事啊

...

求推荐这些书啊
我最想找程序结构的书
现在属于各个模块对着手册都能驱动的起来
就是最后弄到一起的时候就恶心了。。

使用特权

评论回复
477
zuoxp| | 2014-8-20 21:27 | 只看该作者
楼主总结的很到位!

使用特权

评论回复
478
elec921| | 2014-8-21 15:12 | 只看该作者
shcshc1234 发表于 2014-8-20 20:07
求推荐这些书啊
我最想找程序结构的书
现在属于各个模块对着手册都能驱动的起来

程序匠人写的那本  专门讲裸奔程序结构就不错的

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shcshc1234 + 3 求书名是匠人手记么
479
1021352522| | 2014-8-21 15:44 | 只看该作者
坚定不移为楼主点赞

使用特权

评论回复
480
1021352522| | 2014-8-21 15:52 | 只看该作者
楼主有没出书的打算啊

使用特权

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

本版积分规则