上一篇我们终于说到了真正可以真枪实弹的 IO口和定时器。
基本上有了他们两个,融合前面的指令系统。我们已经可以做不少东西了,最基本的一个就是 流水灯。
这一篇,我接着讲另两个最常见的内部资源
外部中断
外部中断,跟前边说的 计数器 有点儿像,不同的是,计数器可以计数多个,而外部中断一个外部跳变就触发。
前边忘了说,,计数器和 外部中断 都是可以设置不一样的触发方式的,有低电平触发,也有 上升沿或者下降沿触发。
外部中断的设置,大致如下:
它涉及的寄存器只有两个,中断允许,还是那个IE,以及与定时器共享一个TCON的四个位。
它的设置,基本上就是,,设置好 触发模式, ITx位,允许其中断,完了.......
另外补充一点,如果使用了中断方式,标志位IEx位是无须软件清除的,啥叫软件清除?就是你写程序代码清除。而如果不是,采用查询方式则需要?
咦?
不用中断,那我怎么知道有外部中断啊?查询IEx么?
记住了,定时器,计数器,外部中断,串口这些,虽然总是跟中断一起,但是,没有人说过它们非得用中断的方式完成。
而且,就51而言,它们都有一个共同特征,标志位,如果用中断方式,都可以硬件清除,无须人为软件清除,查询方式则必须软件清除。
接下来,说串口。
一般的书上这部分内容也是啰啰嗦嗦,云里雾里,其实到最后我们知道的可能就是,它就是把一位一位的数据按照特定的速率传送出去。
俺对此简单总结一下:
数字系统通信,就数据位的多寡而言,有两种方式:串行和并行。
所谓串行,就是无论数据多少位长,我们都把它们按顺序一个一个位传输出去,并行就是有多少位就设置多少条口线,一次多个位同时传输出去。
说到这里,也许你会觉得,那并行比串行好啊,快啊,当然,表面上看起来是很快——在特定场合下它也的确快。
但事实上,串行的使用要比并行频繁的多得多。包括USB,也是串行总线。
这里面的原因我简单解释一下:
尽管并行一次传输多个位,但是这也带来了硬件上的复杂,因为,串行只要一到两条线,而并行呢,8个位就至少需要8条口线,加上一些控制线,仪表上常用的并行总线,GPIB,就有25条线。
这个还是其次,最严重的是,当数据线多的时候,彼此之间的干扰就会变成一个重要问题,特别是速度一旦提高,这就成了一个很严峻的考验。
所以,并行总线,比如GPIB,它大多用在短距离要求高速度的场合使用,而串口则比它适用性宽泛得多。
常见的RS232,通信距离最大可以去到15米到50米。与此相比,并口一般只有几十厘米。
此外,对于通信,还有 同步 和 异步之说。这个我不了解,也没做过同步的。
我们一般的传输数据,都属于异步。
因此,下面只简单说一下 异步通信。
串口的通信,其实做起来很简单,它只涉及五个寄存器的设置(数量上挺多,其实很简单)。
IE,如果不中断,没他什么事。
TCON TMOD 这个其实是把T1做成一个自动重装的8位计数器,用来产生波特率——其实,你只需设置好定时器工作就好,产生波特率什么的,不用你操心。
SCON 这个是串口唯一一个直接相关的控制寄存器。
PCON,有时候用到它的一个位把波特率倍频。
此前我从没具体讲个一个寄存器,而今,讲串口,我必须讲一下SCON这个寄存器,不然我就没啥好讲了。
前边说了,串口,说白了,就是把一个字节或者几个字节的内容按照顺序一个位一个位传出去,串口的硬件结构比较简单,为了稳定传输,它对波特率的要求比较高,很多人做串口实验室,失败的最常见原因之一就是,实际波特率不准。
波特率的具体计算公式,这里不重复,百度一下即可。
PCON的最高位,叫SMOD,设置为1时,波特率可在T1的溢出率基础上再翻一倍。
串口一收一发,但是它使用的是一个共同的缓冲寄存器,叫SBUF,我们如何启动串口收发呢?
其实太简单了,只要设置好前面几个寄存器,然后给SBUF赋值,就可以启动串口发送了,接收完成后,读出SBUF的值就可以完成接收。
嗯,今晚的内容貌似比较少,说的也比较简单。
在结束前,想简单说一句:
很多51教程上一大章一大章的内容,才说完了 定时器计数器 外部中断 和 串口,而我却如此“草草了事”。
其实我想说的是,当我在写的时候,我就希望我不是在重复别人的工作,那个没意思。
我希望有一些我认为需要补充的内容,我会用自己的方式表达出来,有一些我认为需要简洁的内容,比如这四部分,我则采用提炼的形式。
至于具体的寄存器相关位如何定义,如何设置,这些我认为你百度上搜索都是一大把一大把,所以,我不会重复。而且,其实我的记性很糟糕,我只是理解了它们是什么,正如我所说出来的那样,具体你让我写,不好意思,我还得看相关资料,当然排除一些太经常用的,我已经记得寄存器的所有定义了。
边写边和一个单片机群里的几个人扯。我想用我在里面说的一个小故事来结束这个话题:
我初中时有个老师,姓唐,一个当时30来岁的男老师。此老师很牛,他不随便给人做家教,再牛逼的家长也拿他没辙,他坚持按照自己得方式教,而且,他不是谁都辅导。
有一些学生,他只给他上了几节课然后就说你不用来了,因为他缺的可能只是方法和 点睛的一些话语和点破。
我很希望我就像这位老师,我不想重复教科书上的内容,我只希望我这个不太一样的讲述,会让你从另一个角度或者从一个最根本的角度去理解和学习51单片机——
它到底是什么?
它到底能做什么?
我们怎么做?
还有一句话,看 华清远见 的LINUX教程时看到的:
重要的是知道要多什么,而不是怎么做。