找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机 实现不了串口双向数据通信

  [复制链接]
跳转到指定楼层
楼主
这是我的程序,问题在哪里呢?
#include <reg52.h>                   
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;       
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;                               
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void send(uint num)
{       
        SBUF=num;
        while(!TI);
        RI=0;
}

void matrixkeyscan()
{        uint num;
        if(key1==0)
                delayms(100);
                {
                        if(key1==0)
                                {
                                        num=num+1;
                                        if(num==1000)
                                                {
                                                        num=0;
                                                }
                                }
                }

                if(key2==0)
                delayms(100);
                {
                        if(key2==0)
                                {
                                        num=num-1;
                                        if(num==0)
                                                {
                                                        num=1000;                                               
                                                }
                                }
                }

         send(num);
                
}


void display(uint num)
{                uint bai,shi,ge;

                bai=num/100;
                shi=num%100/10;
                ge=num%10;
               
                dula=1;
                P0=table[bai];
                dula=0;
                wela=1;
                P0=0xfe;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[shi];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delayms(1);

                dula=1;
                P0=table[ge];
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfb;
                wela=0;
                delayms(1);
       
}
void main()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        SM0=0;
        SM1=1;
        REN=1;
        EA=1;
        ES=1;
        while(1)
        {
                matrixkeyscan();
        }
}
void ser() interrupt 4
{
        uint a;
        RI=0;
        a=SBUF;
        display(a);
}


评分

参与人数 1黑币 +4 收起 理由
51小孟菜鸟 + 4 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:61876 发表于 2016-6-22 12:55 | 只看该作者
为什么不设置串口寄存器呢?
回复

使用道具 举报

板凳
ID:7485 发表于 2016-6-22 15:49 | 只看该作者
本帖最后由 ahshmj 于 2016-6-22 16:03 编辑

void send(uchar num)
{             ES=0;             //关闭串口中断
        SBUF=num;
        while(!TI);
//        RI=0;          //这一句不对
        TI=0;             //应这样.....

        ES=1;            //开....
}
回复

使用道具 举报

地板
ID:127682 发表于 2016-6-22 16:03 | 只看该作者
同意楼的想法,设置串口寄存器,这个问题就可以解决了
回复

使用道具 举报

5#
ID:7485 发表于 2016-6-22 16:04 | 只看该作者
void ser() interrupt 4
{
       if(RI==1)
         { uchar a;
        RI=0;
        a=SBUF;
        display(a);
         }
}
回复

使用道具 举报

6#
ID:127657 发表于 2016-6-22 17:17 | 只看该作者
gaozhaohong 发表于 2016-6-22 12:55
为什么不设置串口寄存器呢?

串口寄存器 上电不是默认是0吗?需要怎么设置呢?
回复

使用道具 举报

7#
ID:127657 发表于 2016-6-22 17:19 | 只看该作者
ahshmj 发表于 2016-6-22 15:49
void send(uchar num)
{             ES=0;             //关闭串口中断
        SBUF=num;

我改了,然后发现数据传的不正确,而且有时候按下键盘并没有反应。
回复

使用道具 举报

8#
ID:7485 发表于 2016-6-23 19:06 | 只看该作者
本帖最后由 ahshmj 于 2016-6-23 19:15 编辑

SCON是要设置的。楼主已经设置了。SM1=1,SM0=0,REN=1
等效于        "SCON = 0x50;         //方式1,充许接收"

      
回复

使用道具 举报

9#
ID:7485 发表于 2016-6-23 19:16 | 只看该作者
你板子上的晶振是多少的?
回复

使用道具 举报

10#
ID:101595 发表于 2016-6-25 23:39 来自手机 | 只看该作者
是不是一编译有警告,按键函数写了怎么不放到主函数,写的也有问题
回复

使用道具 举报

11#
ID:127315 发表于 2016-6-26 00:51 | 只看该作者
ahshmj 发表于 2016-6-23 19:16
你板子上的晶振是多少的?

这东西还管晶振的事吗
回复

使用道具 举报

12#
ID:111634 发表于 2016-6-26 14:58 | 只看该作者
本帖最后由 zl2168 于 2016-6-26 15:00 编辑

实例77  双机串行通信方式1


Proteus仿真一下,确认有效。
实例77 双机通信方式1.rar (40.4 KB, 下载次数: 13)


以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版

书中电路和程序设计有详细说明,程序语句条条有注解。





评分

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

查看全部评分

回复

使用道具 举报

13#
ID:111634 发表于 2016-6-26 15:00 | 只看该作者
实例78  双机串行通信方式2


Proteus仿真一下,确认有效。
实例78 双机通信方式2.rar (46.57 KB, 下载次数: 5)




以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。




回复

使用道具 举报

14#
ID:111634 发表于 2016-6-26 15:02 | 只看该作者
实例79  双机串行通信方式3


Proteus仿真一下,确认有效。
实例79 双机通信方式3.rar (45.3 KB, 下载次数: 3)




以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。




评分

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

查看全部评分

回复

使用道具 举报

15#
ID:111634 发表于 2016-6-26 15:03 | 只看该作者
实例80  带RS 232接口的双机通信


Proteus仿真一下,确认有效。
实例80 带RS232接口的双机通信.rar (45.52 KB, 下载次数: 4)




以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版


书中电路和程序设计有详细说明,程序语句条条有注解。




评分

参与人数 1黑币 +9 收起 理由
absflash + 9

查看全部评分

回复

使用道具 举报

16#
ID:111634 发表于 2016-6-26 19:44 | 只看该作者
本帖最后由 zl2168 于 2016-6-26 19:45 编辑

单片机与PC机虚拟串行通信


Proteus仿真一下,确认有效。
实验16 与PC机虚拟串行通信.rar (151.41 KB, 下载次数: 4)




以上摘自张志良编著《80C51单片机实用教程》ISBN978-7-04-044532-9,高教社出版。
书中电路和程序设计有详细说明,程序语句条条有注解。




回复

使用道具 举报

17#
ID:128204 发表于 2016-6-26 19:52 | 只看该作者
单片机与PC机虚拟串行通信

回复

使用道具 举报

18#
ID:110895 发表于 2016-6-27 06:24 | 只看该作者
EA=1;  ES=1;
顺序错了,应该是:
ES=1; EA=1;
        
回复

使用道具 举报

19#
ID:111634 发表于 2016-6-27 14:52 | 只看该作者
这个顺序无所谓。
回复

使用道具 举报

20#
ID:128297 发表于 2016-6-27 15:17 | 只看该作者
单片机与PC机虚拟串行通信
回复

使用道具 举报

21#
ID:128426 发表于 2016-6-28 14:46 | 只看该作者

同意楼的想法,设置串口寄存器,这个问题就可以解决了
回复

使用道具 举报

22#
ID:71099 发表于 2016-7-1 12:01 | 只看该作者
单片机小白。。 发表于 2016-6-22 17:19
我改了,然后发现数据传的不正确,而且有时候按下键盘并没有反应。

用状态机试一试,虽然复杂一点,不过很好用,很灵敏
回复

使用道具 举报

23#
ID:128414 发表于 2016-7-2 13:39 | 只看该作者
寄存器问题吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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