[疑难问答] 我串口程序把我搞死了

[复制链接]
883|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; //标志位 }
shashaa 发表于 2016-11-13 22:26 | 显示全部楼层
一直在收发的...原因是當接收到第一個字組,啟動串列傳輸字組。
xia00 发表于 2016-11-13 22:30 | 显示全部楼层
當傳輸字組完成後又產生中斷的條件,又中斷...因此程式進入無窮循環...
hfdy01 发表于 2016-11-13 22:33 | 显示全部楼层
首先說明串列中斷函數的特性:當 TI=1 或 RI=1 時皆會進入中斷服務函數 一直在收發的原因在於:發送完成也會產生中斷 在中斷服務函數加個判斷 void serial() interrupt 4
CallReceiver 发表于 2016-11-13 22:38 | 显示全部楼层
用示波器或逻辑分析仪检测串口信号波形是否正常即可。
boy1990 发表于 2016-11-13 22:40 | 显示全部楼层
硬件串口有问题的话试试软件模拟串口,适用于任何型号的单片机。
sourceInsight 发表于 2016-11-13 22:55 | 显示全部楼层
一直在收發的原因在於:發送完成也會產生中斷
在中斷服務函數加個判斷
sourceInsight 发表于 2016-11-13 22:55 | 显示全部楼层
四个字-----继续努力!
目前国家越来越重视科技方面人才了,这是实现中国梦的重要根基!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

1616

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部