学51单片机需要专门把C语言学透吗
大家是不是看了很多网上的视频或者文章,他们的建议是不是教你拿一本C语言书看几个月,当真正开始给单片机编程时你会发现单片机编程语言只用到了c语言的百分之十都不到,浪费了自己的青春,消磨了对电子方面的兴趣!真正学习单片机需要一定的动手能力,不误人子弟的教程,理论和实践相结合的教学模式并没有刚开始教大家一堆C语言知识。
所以建议从一块开发板和教程开始学起,起初的知识对C语言的要求很低。之后发现自己的C语言功底不足以使你的程序如鱼得水的时候再回头认认真真学习C语言。
51单片机的四种工作模式怎么去设置,既然它有四种工作模式,像定时计数器一样,要想使用定时计数器它也有四种工作方式,那必然的要有一个特殊功能寄存器进行设置,所以串行口实际上对他的控制和操作也是对特殊功能寄存器的操作,串行口当中的特殊功能寄存器就是SBUF,接下来还要介绍一个特殊功能寄存器,也就是要发送和接收,已经解决了,靠的是SBUF这个特殊功能寄存器就是让发送就把数据写到SBUF当中,要想接收就是要把数据从SBUF当中读出来,但是怎么样去配置这个工作方式?或者串行口的这个波特率怎么样来设定?怎么样去让他去启动传输?这个肯定是要有一个特殊功能寄存器来配置,这个特殊功能寄存器就是串行口的控制寄存器,除了SCON之外还有一个特殊功能寄存器和串口相关的就是这个PCON,电源管理控制寄存器就是实际上只用到最高位,其他的位和串行口是没有关系的。
要设定四种工作方式,必然有两个位来确定这个工作方式的设定,就是SM0和SM1这两位,这两个位有四种状态,一般的话是把这两个位设成01,这两位是在低位,顺序的往往前走的,SM2这个位是一个多机控制位,主要是用来做多机通信的,这个很少用到,要做主从通信的时候,一般也不会专门用这个位来作为多机通信,一般是借助于上位机的应用层通讯协议来确定不同的从机,给他分配不同的从机地址,然后靠软件层的协议来解决,不同的同机不是用这种方式,这位平常不用就直接把它清0就可以了,REN主要是允许接收位,就是说是不是允许当前这个单片机的串行口接收数据,如果要想允许接收,就要把它至一,如果不允许接收,只是做发送就把它清0,一般会把它至成1,在发送也要接收,所以一般是把它设成一。
低四位确定好了接下来就是高四位,高四位当中的TB8和RB8,它主要是用在方式二和方式三当中,而方式二和方式三基本上很少使用,所以大家也不用管他,感兴趣的可以自己去看一下,实际上发送数据的第九位在软件当中可以规定它的作用,这个主要和SM2结合的来用,当然了它也可以作为奇偶校验的时候,发送这个奇偶校验位,这两个位平时不用也可以直接把它清0,接下来的两位标志位,一个是发送中断标志位,一个是接收中断标志位,要想发送一帧数据把数据写到SBUF当中,有发送中断标志位他至1来决定他发送完了就是接收中断,接收完了会自动的硬件至1,在串行发送的时候,是在发送停止位开始的时候内部的硬件会使他至1,这个时刻是在发送停止位的时候开始发送停止位,它就会使这位自动的硬件至1向CBA去申请中断,或者查询这个标志位,在中断服务程序当中,必须软件把它清0。
这个和定时计数器当中的那个中断标志位TF0和TF1不一样,那个是进到中断服务函数当中会硬件自动清0,但是串行口这个标志位它不能硬件自动清0,必须要靠软件清0,无论是使用查询方式还是中断方式,都要把这个标志未查询到他为1之后,或者中断触发之后,一定要把它去清0,至于接收中断标志位它是指在接收到停止位的中间时刻,发送一帧数据的时候,最后一个是发送的是停止位,串行通信的时候在接收的时候,他在接收到停止位的中间时刻,会使RI这个位自动的硬件至1向CPU申请中断,可以通过查询或者说中断的方式来处理接收的数据,实际上就是把它读走,一定要在软件当中把它清0,它不会自动的硬件清0,中断的串行口的中断这两个标志位比较特殊,它不能够硬件自动清0,和外部中断的中断标志位和定时计数器的中断标志位不同,他们在中断服务函数里面,一旦进入之后硬件它会自动把它清0,但是串行口它硬件上不会自动清0,必须软件把它清0。
相关文章