单片机串口数据发送,为什么要用到定时器? 为什么设初值?

来自:    更新日期:早些时候
为什么要给单片机的定时器赋初值?~

给单片机的定时器赋初值是为了取得准确的自己需要的定时时间,
比如你数0--255要256秒,你赋个初值155,你就从156开始数了,数到255只用100秒
端口取反就更好理解了,比如现在的端口为高电平1,取反后就是低电平0了,实现的功能吗,就要看具体用法了,比如我在在点亮led时,让端口定时取反,那么led就在亮灭变化了

串口通信方式1和方式3,要用T1来控制波特率。

T1,使用定时方式2,其初始值,和晶振频率、波特率、SMOD的关系式如下:
T1初值 = 256 - fosc * (SMOD + 1) / (384 * 波特率)

--我不明白波特率跟这个定时器的关系。麻烦你详细一点!

这个关系,是由硬件决定的,只有搞微电子的,才能弄明白。
软件人员,编程的时候,会用这个公式即可,也没有必要弄明白这个。

基本上,也没有几个人,能够弄明白集成电路内部,究竟是怎么处理的。
其它的很多人,好像是很明白,其实都是在瞎编理由,包括写书的那些人。

1.定时器来确时发送和发送执行每一位的时间,一般是9600b/s,这样通讯时间确定了,别的接口也按照这个时间9600b/s量段,来接收数据,这样才不会错,如果不一致,那就会错.
2用定时器可以设置任意波特率,也可以不用定时器,但波特率是死的,不灵活.
3 设置初值,是为了设置各种波特率的,一般我们根据公式,来确定一个波特率,反算出定时器初值的.得到这个值,赋到定时器寄存器里,开始计时,到达数值溢出,定时器就中断了,从初值到溢出的这段时间就是我们要的波特率函数时间. 这样也就确定了每一位的发送和接收时间单位值.

51单片机的波特率是以定时器1的溢出率来计算的,定时器溢出32/16次的时间,即为串口传输1位的时间,通过改变定时器的初值,就改变了定时器的溢出率,也就改变了波特率。
具体波特率的计算公式:baud = fosc/32/12/(256-th1)*(2SMOD)
fosc是晶振频率,th1是定时器1的重装值,即你说的初值,SMOD是PCON的最高位,表示是否波特率加倍,SMOD=1,则2的1次方为2,波特率加倍,SMOD=0,则2的0次方为1,波特率不加倍。


单片机串口数据发送,为什么要用到定时器? 为什么设初值?视频

相关评论:
  • 19388761483单片机怎样通过串口向计算机发送数据
    杨赖虎单片机怎样通过串口向计算机发送数据:单片机可以实现与计算机的发送和接收。首先,要正确配置单片机的串口,包括波特率、使用时钟源、COM口、数据位位数、奇偶校验位、停止位位数等,同时要保证计算机的配置和单片机的一致。然后,把要发送的数据送到发送缓存,只能一个字节一个字节的发送。启动单片机发送,就...

  • 19388761483单片机串口有什么用
    杨赖虎还可以通过PC机串口发送数据给单片机,用来控制单片机的工作状态等等。和PC机通信应该是应用最广泛的。二、和其他串口设备通信:单片机一般充当控制器的角色,通过串口发送一定格式的数据来控制与之相连设备的动作,同时设备也会反馈回来一些自己的状态信息给单片机,供单片机进行判断,做出相应的控制。问题五:...

  • 19388761483单片机串口简单问题 为什么要所中断要全部关掉??
    杨赖虎我觉得是这样子的,关闭中断是为了避免更高优先级的中断信号抢占MCU的资源,因为你所设置的串口通讯模式必须保证上位机、下位机时序一致,如果这时候中断,则会时序混乱,通讯错误,很多单总线的IC工作时也要关闭中断就是为了避免更改优先级中断导致时序混乱问题。并不是你不关中断就一定不能正常工作,这...

  • 19388761483用单片机的硬串口发送数据是不是必须要用中断
    杨赖虎可以要可以不要 发送和接收都可以不通过中断来完成也可以通过中断来完成 还有不要把tpm(定时器)中断和sci(串口)中断混为一谈 看看他们的中断向量表就知道了

  • 1938876148351单片机在设定串口传输时,初始化时为什么要把TI置一。程序如下:_百度...
    杨赖虎令TI = 1;,表示发送完毕。这一语句,可以启动串口中断,在中断里面,可以继续发送下一个字符。当中断函数中,没有编写“继续发送”的程序段时,这个置一,就没有用了,可以删除。

  • 19388761483为什么用串口通信需要用延时?
    杨赖虎这种SPI通信程序,是每发送一位加了一个延时,主要是考虑SPI通信的速度问题,因为是用单片机引脚模拟的SPI通信,如果单片机的晶振频率较高,速度快,可能会造成通信错误。所以,为了保证通信可靠,可适当加一些延时。如果频率不太高,不加延时也可以通信正常,就不加,并不是必须的。

  • 19388761483关于51单片机的串口通信,为什么要用rs232电平
    杨赖虎将0~5V电平转换为±10V电平,从而实现电平匹配;然后,数据接口只用到了数据发送与接收2个端口,还有数据的请求发送与允许发送,共4个端口,MAX232CPF还有其他一些外围电路接口,但比较简单,都是些电容接口,从而实现单片机与RS232接口的通信。我这儿还有RS232通信接口的相关资料,需要的话我可以给你。

  • 1938876148351单片机与vb通过串口通信,单片机为什么只能发送0至255的数?然后怎么...
    杨赖虎发送大数,你只能多次发送,一次只能发送一帧,而串口发送的一帧可能是7、8、9位,由你设置而定。

  • 19388761483单片机通过串口发送0x00,为什么串口接收后显示为80呢
    杨赖虎这是晶振的误差造成的,校准波特率后才能正常通信。波特率9600所对应的应该是11.0592MHz的晶振,如果是12M就会出现这个问题,我在protues仿真中把晶振频率改为11.0592M后,正常通信,没有出现错误了!这应该能帮到你!

  • 19388761483STC单片机串口通信为什么上电后会多发出一串字节,后面的数据就一切正...
    杨赖虎出现这种情况估计是你的单片机直接连到写入器上了,由编程器直接供电,而单片机程序启动阶段没有加延时。写入器连接到USB口会有一个初始化过程,串口有数据输出,被单片机误接收了。解决方法:1、单片机程序启动阶段加1到2秒延时,躲过初始化数据。2、单片机串口实行队列接收,只有整个队列符合特征才发送。

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网