各位大侠们!
1. 串口通信TI=1时,还可以继续进行串口通信发送功能吗?
2. 认为1不能发送,假设开始ES=0,它还会进入中断服务程序吗?
3. 课本中说ES=0,关闭了中断串口中断入口,实验中发现,下面程序可以正常运行!注释语句添不添加都无所谓!这究竟是为什么啊 !
ES=0;
flag=0;
send(fog);
while(!TI);
// TI=0; 这里我注释了
send(dat);
while(!TI);
// TI=0; 这里我注释了,不参与编译
ES=1;
void series() interrupt 4
{
if(RI==1)
{
dat=SBUF;
RI=0;
flag=1;
}
if(TI==1)
TI=0;
}
1. 首先TI标志在发送8位有效数据后会 硬件 置1, 在软件清0。非硬件清0.
2. 今天继续试验后,ES=0的确可以关闭 中断函数入口。
3. 现只有一种可能 , 当硬件置 发送标志 TI=1 后,无论TI为0,1,SBUF仍可以继续发送数据!!
4. 该程序段解释如下, 当ES=0后,关闭中断函数,现在程序发送fog数据,然后TI=1,没有清零,继续发送dat数据,没有清零,这时ES=1,开了中断函数入口,好,TI=1进入中断,中断内清零TI,函数勉强的运行起来了。
1 TI=1的时候,如果串口中断又打开的话,会一直进行中断的。你的series() interrupt 4里面已经有TI=0了,前面的TI=0就不用了。TI不清零也是可以发数据的,TI为1只是表示一帧数据的发送完毕,用来判断的。如果不清零,无法判断下一个数据是否发送完毕。如果在第一个数据没法送完毕再继续发送下一个数据,就会乱掉。
2 ES为0就关闭了串口中断,不会进入串口中断程序的
3 ES关了只能发不能收了吧