51单片机发送字节,是把一个字节写入到subf,就会把ti置1,为什么又要把ti再置回0再开ES=1呢?

51单片机发送字节,是把一个字节写入到subf,就会把ti置1,为什么又要把ti再置回0再开ES=1呢?,第1张

单片机通过串口向外发送一个字节的数据结束后,就会将TI置1,表示发送完了,如果是开中断的话,就会产生中断,在中断子程序中继续发送下一个字节。因这次已经响应了,就应该把TI清0,表示这一次的中断已响应了,如果不清0,就会再次产生中断的,一次发送引起两次或者多次中断,就错误了。所以,一次中断后必须将本次的标志位TI清0,TI是一次有效。如果是查询方式,把要发送的数据写到SUBF后就要查询TI的状态了,当TI=1,就说明这次发送结束了,也必须将TI清0,再发送下一个字节。

在中断子程序中,通常是首先就将TI清0,而中断程序结束后再开ES=1,假如这个顺序反过了,也是可以的,只要在中断子程序中将TI清0就行,至于是否将再开ES=1,要看在中断子程序中的前面关了ES=0,从中断返回后就要开ES=1。其实这一关一开,在中断子程序中没有什么必要,如果不关,也就不用再开了,虽然没有关,在响应串口中断时也不会再响应串口中断,必须从中断返回后才能再次响应的。这只是一些人的习惯了这么写,也没有关系,只要不被误导就好。

如果是单片机接收数据,当接收到一个字节后,就会将RI置1,或者引起中断,从SBUF中读出数据,或者查询RI,再读数据。通常是采用中断的方式接收数据,这样不影响单片机执行其它程序,也不至于因为等待接收数据造成死机。

中断允许寄存器 IE EA × × ES ET1 EX1 ET0 EX0 (1)EA:总中断允许开关。它是个总开关,凡是要设置中端都得先通过它。EA=1,开放所有的中断;EA=0,则所有中断都被禁止。(2)ES:串行口中断控制位。ES=1,允许中断;ES=0,禁止中断。(3)ET1:定时/计数器 1 中断控制位。ET1=1,允许中断;ET1=0,禁止中断。(4)EX1:外中断 1 中断控制位。EX1=1,允许中断;EX1=0,禁止中断。(5)ET0:定时器 0 中断控制位。ET0=1,允许中断;ET0=0,禁止中断。(6)EX0:外中断 0 中断控制位。EX0=1,允许中断;EX0=0,禁止中断。所以IE=0X88,允许定时器1中断,开总中断

一、信号不同

1、EA:访问外部程序存储器控制信号。

2、ES:串口中断允许控制位。

二、作用不同

1、EA:EA=1,CPU对所有中断开放,EA=0,CPU禁止一切中断响应。

2、ES:ES=1,允许串行口接受、发送中断。

三、效果不同

1、EA:外部中断INT0/INT1中断请求标志位,外部中断源有请求时,对应的标志位IE0/IE1由硬件置“1”,当CPU响应该中断后,又由硬件自动置“0”。

2、ES:外部中断INT0/INT1的触发方式选择位,IT0/IT1=0,对应外部中断设置为低电平触发方式,IT0/IT1=1,对应外部中断设置为边沿触发方式。

参考资料来源:百度百科-单片机

参考资料来源:百度百科-51单片机


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11891201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存