找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6878|回复: 7
收起左侧

51单片机串口需不需要中断的问题

[复制链接]
ID:367937 发表于 2018-9-14 13:03 | 显示全部楼层 |阅读模式
单片机串口接收发送数据时,到底需不需要引入中断,下面这个程序就是没引入中断,结果是一直在重复显示发送文本。如果我只想显示一遍呢。
  1. #include <reg51.h>

  2. typedef   unsigned char  uint8;
  3. typedef   unsigned int   uint16;

  4. uint8 Buf[]="hello world!\n";

  5. void delay(uint16 n)
  6. {
  7.         while (n--);
  8. }

  9. /*波特率为9600*/
  10. void UART_init(void)
  11. {
  12.     SCON = 0x50;        //串口方式1

  13.     TMOD = 0x20;        // 定时器使用方式2自动重载
  14.     TH1 = 0xFD;    //9600波特率对应的预设数,定时器方式2下,TH1=TL1
  15.     TL1 = 0xFD;

  16.     TR1 = 1;//开启定时器,开始产生波特率
  17. }

  18. /*发送一个字符*/
  19. void UART_send_byte(uint8 dat)
  20. {
  21.         SBUF = dat;       //把数据放到SBUF中
  22.         while (TI == 0);//未发送完毕就等待
  23.         TI = 0;    //发送完毕后,要把TI重新置0
  24. }

  25. /*发送一个字符串*/
  26. void UART_send_string(uint8 *buf)
  27. {
  28.         while (*buf != '\0')
  29.         {
  30.                 UART_send_byte(*buf++);
  31.         }
  32. }

  33. main()
  34. {
  35.         UART_init();
  36.        
  37.         while (1)
  38.         {
  39.                 UART_send_string(Buf);
  40.                 delay(20000);
  41.         }

  42. }
复制代码

回复

使用道具 举报

ID:359173 发表于 2018-9-14 13:45 | 显示全部楼层
应该需要加一个中断

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:375092 发表于 2018-9-14 13:54 | 显示全部楼层
首先,51串口需不需要中断是看你是发送还是接收,就比如你现在的这个发送程序吧,你没有写接收程序,所以就不需要中断函数,串口的发送程序一般不需要到中断函数里面,还有就是要想值显示的的只发送一次的数据那你就不能这么写,不能把发送函数写到死循环里面(也就是whi(1)这里面),直接这样写就好了UART_send_string(Buf);

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:392862 发表于 2018-9-14 14:54 | 显示全部楼层
如果需要指定间隔时间内发送,那么需要一个定时中断,然后在中断中发射
如果没有其他要求
那就看您心情了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:211052 发表于 2018-9-14 15:12 | 显示全部楼层
你这样当然会间隔一段时间重复发送,把UART_send_string(Buf);移到while(1)的前面

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2018-9-14 15:19 | 显示全部楼层
你不设置发送的前提条件当然不断循环发送。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2018-9-14 15:20 | 显示全部楼层
与中断无关
回复

使用道具 举报

ID:387733 发表于 2018-9-14 19:22 | 显示全部楼层
用不用中断要看你的系统决定,如果系统任务很简单,可以不用中断。但是不用中断的话,就要反复去查询,占用很多时间。如果系统复杂,要处理的事务很多,就不允许消耗时间用于空等,就必须用中断方式。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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