找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2564|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机双机串口通信,上位机接收不到数据

[复制链接]
跳转到指定楼层
楼主
ID:895926 发表于 2021-4-25 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送机程序
  1. #include <send.h>
  2. #include <adc0808.h>
  3. volatile unsigned char sending;       

  4. uchar len;



  5. void cdelay(unsigned char i)
  6. {
  7.         unsigned char j,k;
  8.         for(j=i;j>0;j--)
  9.                 for(k=90;k>0;k--);
  10. }
  11. void sendinit(void)                                //串口初始化
  12. {
  13. EA=0; //暂时关闭中断
  14. TMOD&=0x0F;  //定时器1模式控制在高4位
  15. TMOD|=0x20;    //定时器1工作在模式2,自动重装模式
  16. SCON=0x50;     //串口工作在模式1
  17. TH1=256-jingzhen/(botelv*12*16);  //计算定时器重装值
  18. TL1=256-jingzhen/(botelv*12*16);
  19. PCON|=0x80;    //串口波特率加倍
  20. ES=1;         //串行中断允许
  21. TR1=1;        //启动定时器1
  22. REN=1;        //允许接收
  23. EA=1;         //允许中断
  24. }

  25. void send(unsigned char d)                  //发送一个字节的数据,形参d即为待发送数据。
  26. {

  27. SBUF=d; //将数据写入到串口缓冲
  28. sending=1;         //设置发送标志
  29. while(sending); //等待发送完毕
  30. }

  31. void sendc(unsigned char * pd)
  32. {
  33. while((*pd)!='\0') //发送字符串,直到遇到0才结束
  34. {
  35.   send(*pd); //发送一个字符
  36.   pd++;  //移动到下一个字符
  37. }
  38. }

  39. void uart(void) interrupt 4                 //串口发送中断
  40. {
  41. if(RI)    //收到数据
  42. {
  43.   RI=0;   //清中断请求
  44. }
  45. else      //发送完一字节数据
  46. {
  47.   TI=0;
  48.   sending=0;  //清正在发送标志
  49. }
  50. }
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:895926 发表于 2021-4-25 22:16 | 只看该作者
接收机程序:
  1. #include <jieshou.h>
  2. #include <1602.h>
  3. uint m=0;
  4. uchar weight[4]={0,0,0,0};



  5. void jieshoumain(void)
  6. {
  7.     SCON=0x50;           //设定串口工作方式
  8.     PCON=0x80;           //波特率不倍增
  9.                        
  10.     TMOD=0x20;           //定时器1工作于8位自动重载模式, 用于产生波特率
  11.     EA=1;
  12.     ES = 1;              //允许串口中断
  13.     TL1=0xfd;
  14.     TH1=0xfd;             //波特率9600
  15.     TR1=1;
  16.            
  17. }
  18. /*********************************************************

  19.   串行中断服务函数

  20. *********************************************************/
  21. void  serial() interrupt 4
  22. {
  23.    ES = 0;                //关闭串行中断
  24.    RI = 0;                //清除串行接受标志位
  25.        
  26.    weight[m++]= SBUF;            //从串口缓冲区取得数据  
  27.          schar(0x04+m,4,0x30+weight[m]);
  28.         if(m==4)
  29.         {
  30.                 m=0;
  31.         }
  32.        
  33.    ES = 1;    //允许串口中断
  34. }
复制代码
回复

使用道具 举报

板凳
ID:895926 发表于 2021-4-25 22:37 | 只看该作者
有大佬来看看吗?
回复

使用道具 举报

地板
ID:275826 发表于 2021-4-26 14:08 | 只看该作者
void send(unsigned char d)                  //发送一个字节的数据,形参d即为待发送数据。
{

SBUF=d; //将数据写入到串口缓冲
sending=1;         //设置发送标志
while(sending); //等待发送完毕
}这是什么东西?
应该是
void send(unsigned char d)                  //发送一个字节的数据,形参d即为待发送数据。
{

SBUF=d; //将数据写入到串口缓冲
while(!TI);
TI=0; //等待发送完毕
}

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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