打印

我学单片机的日子

[复制链接]
4803|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hulx|  楼主 | 2010-5-10 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hulx 于 2010-5-14 19:51 编辑

这把年纪了,动起了学单片机的念头。
先用三极管在洞洞板上搭RS232电平转换电路,静态测试成功。
于是找来一片飞利浦的P89V51RD2,它可以串口ISP。继续焊单片机部分的电路,先在P1口接了2个LED,写程序,下载,延时交替闪烁,还不错。有点遗憾的是,下载只能9600,但是速度还不错5秒下载结束。如果选半双工,可以用19200下载,但是太慢了。有时间再用MAX232试试。
在RS232转换上加上DTR控制,这回给单片机写程序都不用按RST按钮了。
找出几年前买的MAX7219(当时是想用PLC驱动数码管掏钱买来玩的,却试验未果)接了8个数码管,点亮。又找了电子钟软件,调试、校时,忙的不亦乐乎!
对时钟始终有偏好,最想用号称业界最准确的实时钟芯片DS3231,1年误差1分钟,非常向往,看来里这个目标不远了。慢慢来,想先把串口通讯搞搞。

现在的书真是没法说。讲到串口通讯有关波特率的计算时,能找到的三本单片机书里都引用一个概念——定时器T1的溢出率,却无一例外地不讲定义,叫人摸不着头脑。猜吧:

望文生义一次:莫非溢出率=溢出速率?

那样的话,一个机器周期是晶振的频率f除以12(标准模式),每当计数到256-TH1溢出一次(定时器1工作在方式2,8位),使用11.0592MHz晶振,TH1=0xFD,此时溢出速率为
11.0592/12/(0xFF-0xFD)=0.3072(MHz)
再除以32,为0.0096MHz,真是9600Hz!

看来猜对了。

相关帖子

沙发
麻辣鸭脖子| | 2010-5-10 23:08 | 只看该作者
多大一把了?

使用特权

评论回复
板凳
hulx|  楼主 | 2010-5-14 19:10 | 只看该作者
LS,猜吧哈哈~~~~

使用特权

评论回复
地板
hulx|  楼主 | 2010-5-14 19:50 | 只看该作者
接上文,继续我的工程,记录这几天的进展,上流水账:

用内部的定时器做精密计时,还是有点难度。主要是要费时间调整定时器初值。

中间碰到过拔插电烙铁后,显示乱码,发现拔插10次有七八次都要挂掉,必须解决。MAX7219的三根串口线对地接了瓷片电容,每次调显示子程序时,对MAX7219初始化一次,这回坚如磐石再也不乱了。

改道:用DS12C887。因为先使用了串行总线器件MAX7219,竟然忽略了单片机的端口还是地址线和数据线以及复用,译码时费了点周折。还好,搞定。可以正确显示时间了。

中间有一次ISP时,没完成就按下复位,这下DS12C887里面的寄存器挂了,重写了世纪 年 月 日 时 分 秒,都恢复了。但是星期却一直是80H,以为挂了。又找了1片,设定好时间后星期一直为0,改变日期无效。疑惑……又找到2片887+(无铅),星期为0aH。难道星期不是算出来的?疑惑中向星期寄存器写入正确值,竟然可以了!

结论:虽然星期寄存器数值范围1-7,超过了这个范围,芯片会傻掉。可以推至其他时间寄存器。

该在小数点位来个秒闪。利用内部周期定时标志PF,RS3-0为0fH,PF置1频率为2H。0.5s亮,0.5s灭,搞了大半天。

下一步,编校时按键。有点想不好怎么弄按键。3个办法选择:
1、3键方式:set键、另2个+、-键。——比较想做的。今天做了一点点,发现工程不小,有点麻烦。要理清思路再做,或者暂时放一下。
2、多个按键,设定时分秒年月日星期。——这个不是不可行,是想当不可行。
3、通过串口改写。——这个方案也不错。是一定要做的。

在下一步,准备搞闹钟。

使用特权

评论回复
5
strang| | 2010-5-14 21:29 | 只看该作者
根据你的思路,是不是用汇编在编程啊 ??

使用特权

评论回复
6
hulx|  楼主 | 2010-5-14 22:24 | 只看该作者
用汇编很累的,多亏有了C,工作了20多年后我才敢动单片机。

使用特权

评论回复
7
efen| | 2010-5-14 22:57 | 只看该作者
LZ真敬业

使用特权

评论回复
8
xwj| | 2010-5-14 23:20 | 只看该作者
呵呵,很多时钟芯片当寄存器数值超过范围时,芯片都会傻掉,所以要编程的人自己判断数据的合法性:)

PS:
DS12C887这个芯片芯片可真够古老的,估计很多电池都已经过期了。

使用特权

评论回复
9
wenshu20| | 2010-5-15 10:22 | 只看该作者
LZ真牛啊……

使用特权

评论回复
10
xiaomifan| | 2010-5-15 12:29 | 只看该作者
工作都20多年了!!!

使用特权

评论回复
11
fyshuljj| | 2010-5-15 13:09 | 只看该作者
也够苦的了

使用特权

评论回复
12
dengm| | 2010-5-15 15:36 | 只看该作者
用三极管在洞洞板上搭RS232电平转换电路就可以了, 我从不用MAX232!!!!

使用特权

评论回复
13
hulx|  楼主 | 2010-5-16 19:18 | 只看该作者
8# xwj

老x,怪自己想当然一点:星期是根据日期算出来的!还有它是因为误操作跑到非法区的,开始以为不小心把程序搞乱了,检查了一遍又一遍。
这个C887是够老的(我说过目标是DS3231),仓库里面丢在那里有几个tube新货,最近的是07年的,现在用的这片是在破烂堆里找的03年的,离过期不远了吧,现在还好用。以前产品用到,现在已经淘汰不用了,因为电池会失效。想好了,等到电池失效之日,就敲开它,换下里面的电池,现在还舍不得哈。

使用特权

评论回复
14
hulx|  楼主 | 2010-5-16 19:26 | 只看该作者
12# dengm
用三极管成本会低一点,还有一点,好像比xx232芯片皮实一点,不知道是否错觉。缺点是占地方太大,搭电路麻烦,只能算权宜之计。

使用特权

评论回复
15
yuhaiyang10| | 2010-5-16 19:32 | 只看该作者
niu!!!!!!!!!!

使用特权

评论回复
16
yuhaiyang10| | 2010-5-16 19:32 | 只看该作者
niu!!!!!!!!

使用特权

评论回复
17
花花牛| | 2010-5-16 21:06 | 只看该作者
佩服,太牛了

使用特权

评论回复
18
hulx|  楼主 | 2010-5-23 16:31 | 只看该作者
这一周加班,没有时间弄。
试了一下printf,scanf,getchar几个函数。
发现一个问题:利用PF做的秒闪,跟887内部的秒更新不同步,看起来有点别扭。改进办法,利用PF读时间寄存器。
发现,这块887走了很多天了,最多时差一秒,有时会变回来。datasheet上面说的每月误差1分钟很保守,还有东北这边温差比较大。887这么好,想搞的好一点,准备用AT89C2051,如果程序存储器空间不够,就选用4051,规模比较合适。会改来改去的,先搭一个烧录器,快完工了。

使用特权

评论回复
19
yong27| | 2010-5-23 17:54 | 只看该作者
一日,一母牛在吃草,突然公牛跑过来,慌张的对母牛说:“快跑,楼主来了!”母牛很奇怪,问:“为什么楼主来了就要跑?”公牛解释到:“楼主,很爱吹牛B。”不得了,母牛拔腿就跑,公牛跟在后面,母牛很奇怪,问:“你为什么你也要跑呢?”公牛:“楼主不光喜欢吹牛B,还喜欢扯蛋。”

使用特权

评论回复
20
xuyiyi| | 2010-5-23 17:56 | 只看该作者
呵呵!
LS有趣。

使用特权

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

本版积分规则

5

主题

421

帖子

1

粉丝