找回密码
 立即注册

QQ登录

只需一步,快速开始

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

自学单片机,遇到难题,求大神帮忙

[复制链接]
跳转到指定楼层
楼主
ID:55957 发表于 2013-10-15 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编了一个单片机接收的小程序,但每次都要将串口调试助手的串口开关一次,才能发送新的数据,程序如下:
#include<reg52.h>
void main ()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
   
}
}
void  wer()  interrupt  4
{
RI=0;
  P1=SBUF;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:230901 发表于 2017-9-8 17:11 | 只看该作者
中断应该是这样:先接受数据接受完了再情接收标志   P1 = SBUF;RI = 0;而不是你现在这样

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:230901 发表于 2017-9-8 17:13 | 只看该作者
先接收完数据在清接收标志位    P1= SBUF;  RI=0;

评分

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

查看全部评分

回复

使用道具 举报

地板
ID:232171 发表于 2017-9-9 23:54 | 只看该作者
慢慢研究 以后自然会懂得 主要是 坚持
回复

使用道具 举报

5#
ID:232171 发表于 2017-9-9 23:55 | 只看该作者
格式放好看点呀 慢慢来 不急那点时间
回复

使用道具 举报

6#
ID:213173 发表于 2017-9-10 06:51 | 只看该作者
P1=SBUF;这里的中文分号要改为英文分号。

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:219181 发表于 2017-9-11 01:05 | 只看该作者
wulin 发表于 2017-9-10 06:51
P1=SBUF;这里的中文分号要改为英文分号。

其实这个影响不大吧,只要一编译就能发现了。。。。
回复

使用道具 举报

8#
ID:219181 发表于 2017-9-11 01:11 | 只看该作者
本帖最后由 sinho 于 2017-9-11 01:55 编辑

#include<reg52.h>
unsigned char A;
void main ()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
    if (A == 1)
    {        A =0;
        P1 = SBUF;
    }
}
}
void  wer()  interrupt  4
{
  if (RI == 1)
  {
       RI = 0;
       A = 1;
   }
}

你试试这样可不可以?我加了个变量A,我也是刚开始学单片机的,之前做了个类似的程序 :在串口助手给单片机发送数据,单片机原样发回。

评分

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

查看全部评分

回复

使用道具 举报

9#
ID:219181 发表于 2017-9-11 01:14 | 只看该作者
想飞的猪1 发表于 2017-9-8 17:11
中断应该是这样:先接受数据接受完了再情接收标志   P1 = SBUF;RI = 0;而不是你现在这样

这个应该没影响的吧,我也是先清零再给数据,而且能实现效果

评分

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

查看全部评分

回复

使用道具 举报

10#
ID:230901 发表于 2020-9-26 14:31 | 只看该作者
sinho 发表于 2017-9-11 01:14
这个应该没影响的吧,我也是先清零再给数据,而且能实现效果

你把主函数的while(1) {    }  写成while(1);
回复

使用道具 举报

11#
ID:337139 发表于 2020-9-26 15:46 | 只看该作者
先定义一个接收变量:
unsigned char Temp_data=0;
sbit  Flag_Rxdata=0;
void main ()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
    if (Flag_Rxdata)
    {   Flag_Rxdata=0;
        P1 = Temp_data;
    }
}
}
将中断改写一下:
void  wer()  interrupt  4
{
  if (RI)
  {
       RI = 0;  
       Temp_data = SBUF;
       Flag_Rxdata=1;
   }
}
这样子去调试一下。
回复

使用道具 举报

12#
ID:822755 发表于 2020-9-26 19:53 | 只看该作者
可能只是你用的串口助手的问题,如果是用usb转串口线,那更可能是转换线的问题。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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