学习嵌入式和单片机有没有必要,价值体现在哪

学习嵌入式和单片机有没有必要,价值体现在哪

最近几年,“软件为王”这一句话被广泛传播,大家普遍认为软件知识的价值远远大于硬件,潜移默化觉得学习软件,从事软件方向会更容易找到更高收入、更有前途的工作。单片机和嵌入式一般会被归为“硬件”方向,被人“嫌弃”,加上嵌入式和单片机的学习难度较大,学习周期比较长,往往觉得很“煎熬”,以至于越来越多的人放弃这条路,很负责任的跟大家说有这种想法是不正确的,嵌入式和单片机并不是大家所知道的纯“硬件”类方向,它们是硬件和软件的紧密结合在一起的。

单片机的串行口的话,实际上它主要是有这么几个电路来构成的,内部总线,发送寄存器SBUF,发送缓冲器,接收缓冲器等,99H指的是特殊功能寄存器,就是内部ROM当中80H到FFH当中的特殊功能寄存器区,51单片机使用了其中的21个,其中有一个就是SBUF,它的地址就是在99H这个地址,实际上它在物理上是两个独立的寄存器,发送缓冲器主要是做数据发送的,接收缓冲器主要是做数据接收的,除了这两个特殊功能寄存器之外,它还包括发送的控制器,还有就是接收的控制器,以及一些移位寄存器,还有一些中断和控制的一些电路。

如果要想往外发送一串数据,或者说发送一帧数据,比如要发送一个0X88或者发送一个88H,通过内部总线把数据88H写到SBUF当中,它实际上是两个独立的SBUF,但是这个独立的SBUF占用同一个地址,实际上它是靠指令来区分的,直接写指令的时候访问就是串行发送的一个寄存器,如果执行的是读指令,访问就是串行的接收寄存器,所以要想把88H发送出去,自己做测试的时候,可以把TSD和RSD做一个短节,自发自收只要把88H写到SBUF当中,也就是把这个值赋给SBUF,寄存器就像P0口或者是P3口这种一样,把0X88直接赋给他,把数据写给SBUF,数据写给他之后发送控制器包括门电路就会首先把这个数据转成串行的,然后给他加一个起始位0,一个停止位1,可以加一个奇偶校验位,然后组成了一帧数据,靠发送控制器就可以一位一位的把它通过TSD发送出去。

时钟系统可以控制它的波特率,这样就可以控制一位一位的传输的时间,4800的波特率一位发送占用的时间是1/4800秒,按照这个波特率就可以去一位一位的发送出去,出现在TXT这根线上,在内部电路当中是0和1一旦出现引脚上,0就会变成低电平,1就会变成高电平,变成了0V和5V,把它短接一根一根的出现,总线空闲的时候是高电平,一旦发现它是低电平就代表起始位来了就可以去接收了,接收电路来控制可以把这个数据一位一位的移进这个移位寄存器,按照波特率一位一位的进来,进来之后每一个字节就会把它存放到SBUF中,需要知道它发送的是不是0F88,可以把SBUF当中的内容把它读出来,想读寄存器就把这个寄存器赋给他,一位一位接收的时候进入SBUF当中的时候实际上已经把这个起始位和停止位已经去掉了,这里面就是存着八位的数据,这些东西都是由单片机的硬件帮我们去完成,所以编程的时候实际上只要配置好了串行口的功能,那就很方便的来完成串行的通信,也就是发送和接收。

要想使用串行通信接口肯定要对他进行一个初始化的配置,51单片机它的接收器具有双缓冲的结构,他实际上有两个接收缓冲器,代表从这个接收缓冲器读出的前一个已经收到的这个四节数据之前便能接收第二个字节,就是刚才发的这一段数据他可以存到这个寄存器里面,这个数据如果说还没有读走,下一帧数据又来了,他还有一个双缓冲,如果把这一帧的数据也保存起来,这个时候就要及时的把这一帧数据读走,如果不走他就会把这帧的数据给覆盖掉,在做串行口监控的时候,数据实际上是到了SBUF当中,提供一些标志位去查询,或者说用中断的方式来知道发送完了或者是接收完了,要想发送一串数据的话,发送这一帧数据接下来还要再发送一帧数据,只是把这个数据写到SBUF当中,单片机设计的时候也给大家一个提示R标志位,就是接收标志位,一旦接收完一帧数据的时候,这个R标志位会自动一,可以用查询或者中断的方式,这样就知道一帧数据接收完了,抓紧时间把这个数据读出去,可以做一个接收缓冲区,比如开辟一个缓冲区,也就是开辟一个数组,可以把这个数据接一个就存过去,然后在把这一串数据都接收完之后再去处理,也可以边接收边处理,是由不同的处理机制,把这一串数据都接收完了,然后再去具体的去处理,要根据具体的应用可以去编写不同的程序。

对单片机感兴趣的可以查看往期分享内容希望能帮助大家在学习单片机的路上少走一些弯路想要入门单片机可以持续关注创为单片机编程回复“带我学习”查看更多内容分享

猜你喜欢

转载自blog.csdn.net/m0_66707146/article/details/123941509