找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7620|回复: 6
收起左侧

单片机串口发送数据为什么要先关串口中断?发送数据与字符串有什么区别?

[复制链接]
ID:305703 发表于 2018-5-10 10:03 | 显示全部楼层 |阅读模式
第一个是单片机串口发送数据的程序  可是为什么需要先关串口中断?发送完数据再开串口中断呢??还有!!!发送串口数据与发送字符串有什么区别呢?

单片机源码:
  1. /*----------------------------
  2. UART1 发送串口数据
  3. -----------------------------*/
  4. void UART1_SendData(uchar dat)
  5. {
  6.         ES=0;                                        //关串口中断
  7.         SBUF=dat;                           //将数据放入发送数据缓冲器中
  8.         while(TI!=1);        //等待发送成功                TI=1时表示一帧数据发送成功,要求CPU取走SBUF里的数据
  9.         TI=0;                                        //清除发送中断标志        TI必须软件清零
  10.         ES=1;                                        //开串口中断
  11. }
  12. /*----------------------------
  13. UART1 发送字符串
  14. -----------------------------*/
  15. void UART1_SendString(char *s)
  16. {
  17.         while(*s)//检测字符串结束符
  18.         {
  19.                 UART1_SendData(*s++);//发送当前字符
  20.         }
  21. }
复制代码

回复

使用道具 举报

ID:293864 发表于 2018-5-10 11:00 | 显示全部楼层
我知道的是,不需要关闭中断的,中断是为了接受数据而不是发送数据的。
发送数据和发送字符串是一样的,字符串就是数据。只是发送只能一个一个字符去发,所以发送字符串要拆开来一个一个字符发
回复

使用道具 举报

ID:213173 发表于 2018-5-10 11:27 | 显示全部楼层
1.串口发送数据时不能被接收中断干扰,所以要关闭串口接收中断。
2.串口发送程序一次只能发送一个字节,如果要发送字符串,就要反复调用发送程序,直到发送完毕。
回复

使用道具 举报

ID:326705 发表于 2018-5-10 12:07 | 显示全部楼层
关串口中断只是一种严谨的方式,其实不关你的程序应该也可以。其次字符串的发送跟字节本质上是一样的,只不过是将字符串按一个个字节连续发送而已
回复

使用道具 举报

ID:137653 发表于 2018-5-10 15:02 | 显示全部楼层
是怕发送的过程中被接收中断打断吧
回复

使用道具 举报

ID:326954 发表于 2018-5-10 16:52 | 显示全部楼层
发送串口数据是指发送一个字节,每个字符是2个字节,因此发送字符串其实是发送2*n个字节
回复

使用道具 举报

ID:123289 发表于 2018-5-10 18:37 | 显示全部楼层
不知道是哪个高手老师教一招!
我是这样做的:
1、将要发的数据统统放在一个缓冲区中,假设有N个字节。
2、打开中断
3、发一个字节,发完后就干别的事了!之后,当这个字节发完后就产生了中断。
4、在发送中断处理程序中,判断一下是否N个字节是否全发完了,未完就续发下一个字节,退出中断服务程序。
5、退出后,又干别的事了!再之后,这个字节发完后就产生了中断。
……4-5-4-5-4-5-……
自打开机初始化后,就没有关过串口中断!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表