最近准备做个串口通信的LED数码管显示板,搞了一堆芯片做实验,遇到的问题挺多的,这里记录一下吧。
1. CMOS芯片不用的输入端不能悬空!!!
浪费一个小时的时间,惨痛的教训证明,数电老师上课强调的事情并非子虚乌有。。。用了一个74HC595串入并出移位寄存器,有个神棍的清零端,我也用不着,就悬空了。结果数码管都是半亮半不亮的状态,很诡异。检查电路,无果。。。后来忽然意识到,这个HC貌似就代表这是个CMOS的芯片,于是把那个清零端接到高电位,和谐了。。。
2. 0805表面贴装的电阻可以焊到洞洞板上。。。
感觉一般的电阻体积太大,想搞点小的,就顺便买了100个表贴的电阻,回来发现真的可以焊到洞洞板上,刚好是两个洞洞的长度~还有,SMD的电阻貌似很精确,标明的误差是5%,可是我实测的误差都在0.5%以内,出乎意料
3. 串口通信,神棍一般的波特率计算!
调串口通信的程序,收到的一直是乱码,无限吐血中。。。很奇怪,为什么网上的代码都是在11.0592的晶振上做的,我的晶振是12.000的,就是找不到代码。我自己算了一个RELOAD值,也不行。后来看到数据手册上提到了波特率的误差,又在STC官方下到了波特率计算工具,直接生成C代码,挺给力的。更重要的是,这个软件会给出一个波特率的误差。在12.000MHz,12T,9600bps的情况下,误差超过了8%,而数据手册要求误差不能高于3%,看来是达不到要求的。只好把波特率改成了2400bps,成功了。。。
另外在STC11的单片机上,可以使用内部RC时钟,还有独立波特率发生器,由于STC11是1T的单片机,所以波特率的误差会小一些,可以达到9600的波特率了。要注意的是晶振频率要选5.5296,我手动改到了更准确(吗?)的5.8,貌似没多大区别。但是6.0的话就不行了。。。
评论