找回密码
 立即注册

QQ登录

只需一步,快速开始

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

程序为什么调不通?

[复制链接]
跳转到指定楼层
楼主
ID:135676 发表于 2016-8-31 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,a;

//uchar code table[]="I get " //此句若加上,程序为什么调不通????、
void main()
{

        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        while(1)
                {
               
                        if(flag==1)
                                {
                                        ES=0;
                                        flag=0;
//                                        for (i=0;i<6;i++)
                                        SBUF='1';//28;       
                                        while(!TI);       
                                        TI=0;
                                        SBUF='2';//28;       
                                        while(!TI);       
                                        TI=0;
                                        SBUF='3';//28;       
                                        while(!TI);       
                                        TI=0;
                                        ES=1;
                                }
                }
}

void ser() interrupt 4
{
        RI=0;
//        P1=SBUF;
        a=SBUF;
        flag=1;
}

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

使用道具 举报

沙发
ID:135676 发表于 2016-8-31 11:31 | 只看该作者
#include<reg52.h>
#define uchar unsigned char
//#define uint unsigned int
uchar flag,a,b,i;

uchar code table[]="I get ";
void main()
{

        TMOD=0x20;//设置定时器1为工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
    while(1)
        {
                if(flag==1) //如果有数据则进入这个语句
                {
                        ES=0; //进入发送数据时先关闭串行中断
                        for(i=0;i<6;i++)
                        {
                                SBUF=table[i];
                                while(!TI)
                                TI=0;
                        }                                                  
                SBUF=a; //将数据原样发回
                while(!TI); //等待数据发完
                TI=0; //关闭发送中断
                ES=1; //退出前再打开串行中断
                flag=0;
                                }
                }

}

void ser() interrupt 4
{
        RI=0;
//        P1=SBUF;
        a=SBUF;
        flag=1;
}


感谢,已调试通过。
回复

使用道具 举报

板凳
ID:137261 发表于 2016-8-31 11:45 | 只看该作者
0.0代码都没看完
回复

使用道具 举报

地板
ID:138044 发表于 2016-8-31 14:02 | 只看该作者
              SBUF=a; //将数据原样发回
                 while(!TI); //等待数据发完
                 TI=0; //关闭发送中断
a没有赋值的地方,其值应是随机的,这几句是啥意思?
回复

使用道具 举报

5#
ID:135676 发表于 2016-8-31 15:18 | 只看该作者
                                               
前面SBUF已接受了数据table【i】               
SBUF=a; //将数据原样发回 串口接受寄存器收到数据后发送数据给a;
                while(!TI); //等待数据发完,TI!=0是程序在循环
                TI=0; //关闭串口中断服务程序
                ES=1; //退出前再打开串行中断
                flag=0;
回复

使用道具 举报

6#
ID:138065 发表于 2016-8-31 16:02 | 只看该作者
再仔细看一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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