标题: 请教各位一个单片机串口TI置位问题,还望各位能给解惑 [打印本页]

作者: zcwjzwd    时间: 2020-8-10 23:20
标题: 请教各位一个单片机串口TI置位问题,还望各位能给解惑
/*************** 装载串口发送缓冲 *******************************/

void TX1_write2buff(u8 dat)
{

        TX1_Buffer[COM1.TX_write] = dat;        
        if(++COM1.TX_write >= COM_TX1_Lenth)        COM1.TX_write = 0;

        if(COM1.B_TX_busy == 0)                //空闲
        {  
                COM1.B_TX_busy = 1;                //标志忙
                TI = 1;                                        //触发发送中断
        }
这是STC串口库函数的装载串口发送缓冲 ,这里为什么要用软件把TI置位,TI不是硬件置位吗?如果再把缓存里的数据给SBUF,数据发送完后硬件是不是又一次把TI置位呢?



作者: csmyldl    时间: 2020-8-11 10:36
没有哪一个资料说明了TI是硬件置位,只有TF0 TF1 IE0 IE1可以硬件置位
作者: 1692483014    时间: 2020-8-11 12:08
TI = 1;
这里用法错误,这个是发送完成中断状态位,只能由硬件置位,软件复位,你这里进行软件置位,是错误的操作。
作者: sdxrly    时间: 2020-8-11 13:28
这是串口在中断里发送数据,TI=1起动串口中断,配合串口中断代码看
作者: zcwjzwd    时间: 2020-8-11 22:45
csmyldl 发表于 2020-8-11 10:36
没有哪一个资料说明了TI是硬件置位,只有TF0 TF1 IE0 IE1可以硬件置位

stc官方资料上有说明,停止位开始发送时由内部硬件置位即TI=1,响应中断后必须由软件清零。
TI是不是硬件和软件都可以置位?
作者: zcwjzwd    时间: 2020-8-11 22:47
1692483014 发表于 2020-8-11 12:08
TI = 1;
这里用法错误,这个是发送完成中断状态位,只能由硬件置位,软件复位,你这里进行软件置位,是错 ...

这是STC官方库函数的资料,看了之后也有疑惑。
作者: zcwjzwd    时间: 2020-8-11 22:51
sdxrly 发表于 2020-8-11 13:28
这是串口在中断里发送数据,TI=1起动串口中断,配合串口中断代码看

if(TI)
        {
                TI = 0;
                if(COM1.TX_read != COM1.TX_write)
                {
                         SBUF = TX1_Buffer[COM1.TX_read];
                        if(++COM1.TX_read >= COM_TX1_Lenth)                COM1.TX_read = 0;
                }
                else        COM1.B_TX_busy = 0;
        }
中断函数里面没有这个函数,TI可以用软件置位吗?
作者: wulin    时间: 2020-8-12 06:26
TI既可以由硬件置位也可以由软件置位,但只能由软件复位。软件置位的目的只是为了发生一次串口中断,其作用要看串口中断代码。不可妄议,误人误己。
作者: sdxrly    时间: 2020-8-12 07:50
zcwjzwd 发表于 2020-8-11 22:51
if(TI)
        {
                TI = 0;

TI可以用软件置位




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1