打印
[疑难问答]

我串口程序把我搞死了

[复制链接]
552|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feiqi1|  楼主 | 2016-11-13 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我目地是比如输入123456789 返回123456789 就是输入什么返回什么。我使用ISIS仿真 程序没有问题,把程序烧入单片机就不行 我拿了3快51单片机的开发板来测试就是不行,人都急死了,最基本的都出问题实在没有办法玩下再学。找不到问题点。希望大家帮帮我。或者把我程序烧你们51里面去实际测试看看。我想知道到底是我程序还是我设备哪里出问题了,按理不可能三台开发板都出问题
#include <reg52.h>
#define uint unsigned int
int a;
uint flag;
void uart_init();
void main()
{
    uart_init();
    while(1)
    {
        if(flag==1) // 如果收到数据
        {
            ES=0; //关闭串口中断
            flag=0; //标志位清零
            SBUF=a; //将收到的数据发送至缓冲区
            while(!TI); //等待数据发送结束
            TI=0; // 将发送结束标志清零
            ES=1; // 使能串口中断
        }
    }
}
void serial() interrupt 4   // 串口中断服务函数
{
    a=SBUF; // 读出接收到的数据
    RI=0; // 清零接收标志位
    flag=1; //标志位
}
void uart_init()
{
    TMOD=0x20; // 设置定时器1 为方式2
    TH1=0xfd;  //装入初值 11.0592
    TL1=0xfd;
    TR1=1; //启动定时器1
    SM0=0;
    SM1=1; //设置串口为方式1
    REN=1;  // 接受使能
    EA=1; // 打开总中断开关
    ES=1; // 打开串口中断开关
沙发
androidbus| | 2016-11-13 22:17 | 只看该作者
这样是不是两边在无限循环?

使用特权

评论回复
板凳
litengg| | 2016-11-13 22:19 | 只看该作者
看看程序就知道一直在收发了

使用特权

评论回复
地板
qiangweii| | 2016-11-13 22:24 | 只看该作者
void serial() interrupt 4   // 串口中断服务函数 {      a=SBUF; // 读出接收到的数据     RI=0; // 清零接收标志位      flag=1; //标志位 }

使用特权

评论回复
5
shashaa| | 2016-11-13 22:26 | 只看该作者
一直在收发的...原因是當接收到第一個字組,啟動串列傳輸字組。

使用特权

评论回复
6
xia00| | 2016-11-13 22:30 | 只看该作者
當傳輸字組完成後又產生中斷的條件,又中斷...因此程式進入無窮循環...

使用特权

评论回复
7
hfdy01| | 2016-11-13 22:33 | 只看该作者
首先說明串列中斷函數的特性:當 TI=1 或 RI=1 時皆會進入中斷服務函數 一直在收發的原因在於:發送完成也會產生中斷 在中斷服務函數加個判斷 void serial() interrupt 4

使用特权

评论回复
8
CallReceiver| | 2016-11-13 22:38 | 只看该作者
用示波器或逻辑分析仪检测串口信号波形是否正常即可。

使用特权

评论回复
9
boy1990| | 2016-11-13 22:40 | 只看该作者
硬件串口有问题的话试试软件模拟串口,适用于任何型号的单片机。

使用特权

评论回复
10
sourceInsight| | 2016-11-13 22:55 | 只看该作者
一直在收發的原因在於:發送完成也會產生中斷
在中斷服務函數加個判斷

使用特权

评论回复
11
sourceInsight| | 2016-11-13 22:55 | 只看该作者
四个字-----继续努力!
目前国家越来越重视科技方面人才了,这是实现中国梦的重要根基!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

1616

帖子

1

粉丝