51串口通信

2019-03-24 19:23发布

  各位大侠们!          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;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
ddllxxrr
1楼-- · 2019-03-24 21:55
1. 串口通信TI=1时,还可以继续进行串口通信发送功能吗?
这只是个判断标志,你若不判断,应能发,那就是胡乱发了,没章法。这个是硬件清零吧。
       2. 认为1不能发送,假设开始ES=0,它还会进入中断服务程序吗?
不会进有中断啦,因为你不允许中断  


       3. 课本中说ES=0,关闭了中断串口中断入口,实验中发现,下面程序可以正常运行!注释语句添不添加都无所谓!这究竟是为什么啊 !

这不为什么,就是不是用中断发的,是你用查询方法发的,中断函数形同虚设。木有用。
lnmisay
2楼-- · 2019-03-25 03:02

 

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,函数勉强的运行起来了。

lnmisay
3楼-- · 2019-03-25 04:32
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,函数勉强的运行起来了。
j1a2s3o4n
4楼-- · 2019-03-25 04:47
 精彩回答 2  元偷偷看……
j1a2s3o4n
5楼-- · 2019-03-25 04:51
3的可能性比较大,毕竟TI只是个标志,即使TI不清0发送也应该没啥问题。
chunyang
6楼-- · 2019-03-25 09:28
TI不清不影响串口功能,但可能出错,当然,如果你严格控制时序,完全不理睬TI标志是完全可行的,只是没有那个必要,自己给自己找麻烦不是。

一周热门 更多>