找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口通信,为啥我甲机的935467传送过去变成了这样?求一个解决办法

[复制链接]
跳转到指定楼层
楼主
本帖最后由 一个用户名 于 2021-6-10 00:34 编辑


这是程序问题还是电路问题啊,求分析
甲机源码:
#include <reg51.h>  
void main()               
{
        unsigned char i;
        unsigned char send[]={9,3,5,4,6,7};
        TMOD=0x20;      
        TL1=0xf4;         
        TH1=0xf4;
        TR1=1;
        SCON=0x40;
        for(i=0;i<6;i++)
        {
                SBUF=send[ i];   
            while(TI==0);     
            TI=0;
        }  
        while(1);
}

乙机源码:
  1. #include <reg51.h>
  2. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};
  4. void disp(void);
  5. void main()
  6. {
  7.         unsigned char i;
  8.         TMOD=0x20;
  9.         TL1=0xf4;
  10.         TH1=0xf4;
  11.         TR1=1;        
  12.         SCON=0x40;
  13.         REN=1;
  14.         for(i=0;i<6;i++)
  15.         {
  16.                 while(RI==0);
  17.                 buffer[i]=SBUF;
  18.                 RI=0;        
  19.         }
  20.         for(;;) disp();
  21. }
  22. void disp()
  23. {
  24.         unsigned char w,i,j;
  25.         w=0x01;
  26.         for(i=0;i<6;i++)
  27.         {
  28.                 P1=tab[buffer[i]];
  29.                 P2=~w;
  30.                 for(j=0;j<100;j++);
  31.                 w<<=1;
  32.         }
  33. }
复制代码



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

使用道具 举报

来自 2#
ID:934867 发表于 2021-6-13 23:25 来自手机 | 只看该作者
已解决,感谢各位的指导和帮助,麻烦大家了!
回复

使用道具 举报

板凳
ID:883031 发表于 2021-6-9 09:00 | 只看该作者
乙机主程序会跑飞的
回复

使用道具 举报

地板
ID:213173 发表于 2021-6-9 17:29 | 只看该作者
其实这个问题很简单,但楼主基础太差。三言两语说不清,说多了也消化不了。串口函数和显示函数都有问题。
回复

使用道具 举报

5#
ID:934867 发表于 2021-6-9 17:42 来自手机 | 只看该作者
wulin 发表于 2021-6-9 17:29
其实这个问题很简单,但楼主基础太差。三言两语说不清,说多了也消化不了。串口函数和显示函数都有问题。

这,新手实锤,那程序怎么改啊?
回复

使用道具 举报

6#
ID:934867 发表于 2021-6-9 17:43 来自手机 | 只看该作者
cn_zhx 发表于 2021-6-9 09:00
乙机主程序会跑飞的

啊,怎么解决
回复

使用道具 举报

7#
ID:934867 发表于 2021-6-9 17:48 来自手机 | 只看该作者
求修改方案,我努力消化
回复

使用道具 举报

8#
ID:213173 发表于 2021-6-9 21:11 | 只看该作者
一个用户名 发表于 2021-6-9 17:48
求修改方案,我努力消化


给你改好了,就这么一点代码你慢慢去消化吧。


  1. #include <reg51.h>  
  2. void main()               
  3. {
  4.         unsigned char i;
  5.         unsigned char send[]={9,3,5,4,6,7};
  6.         TMOD=0x20;      
  7.         TL1=0xf4;         
  8.         TH1=0xf4;
  9.         TR1=1;
  10.         SCON=0x40;

  11.         for(i=0;i<6;i++)
  12.         {
  13.            SBUF=send[i];   
  14.            while(!TI);     
  15.            TI=0;
  16.         }  
  17.         while(1);
  18. }
复制代码
  1. #include<reg51.h>
  2. unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char buffer[6];

  4. void disp(void);

  5. void main()
  6. {
  7.         TMOD=0x20;
  8.         TL1=0xf4;
  9.         TH1=0xf4;
  10.         TR1=1;        
  11.         SCON=0x40;
  12.         REN=1;
  13.         EA=1; //开总中断
  14.         ES=1; //允许串口中断

  15.         while(1)
  16.         {
  17.                 disp();
  18.         }
  19. }

  20. void disp()
  21. {
  22.         static unsigned char i;
  23.         unsigned char j;
  24.         P2=0xff;
  25.         P1=tab[buffer[i]];
  26.         P2=~(0x01<<i);
  27.         for(j=0;j<100;j++);
  28.         i=++i%6;
  29. }

  30. void ser() interrupt 4
  31. {
  32.         static unsigned char i=0;
  33.         RI=0;
  34.         buffer[i]=SBUF;
  35.         i++;
  36.         if(i>=6)
  37.                 i=0;
  38. }
复制代码




回复

使用道具 举报

9#
ID:934867 发表于 2021-6-10 00:08 | 只看该作者
本帖最后由 一个用户名 于 2021-6-10 00:35 编辑
wulin 发表于 2021-6-9 21:11
给你改好了,就这么一点代码你慢慢去消化吧。

感谢指导,麻烦您了,还能发一下protues里的pdsprj文件吗?
我傻了,这是什么情况?
这是我pdsprj文件,代码应该没问题。 New.zip (15.72 KB, 下载次数: 5)


回复

使用道具 举报

10#
ID:934867 发表于 2021-6-10 00:13 | 只看该作者

删除

本帖最后由 一个用户名 于 2021-6-10 23:09 编辑
wulin 发表于 2021-6-9 21:11
给你改好了,就这么一点代码你慢慢去消化吧。

one.zip

19.58 KB, 下载次数: 4

回复

使用道具 举报

11#
ID:213173 发表于 2021-6-10 06:20 | 只看该作者

仿真里的两个芯片加载程序不要搞错了,另外晶振频率都要改为11059200或11.0592MHz。


回复

使用道具 举报

12#
ID:934867 发表于 2021-6-10 22:17 | 只看该作者
wulin 发表于 2021-6-10 06:20
仿真里的两个芯片加载程序不要搞错了,另外晶振频率都要改为11059200或11.0592MHz。

我用的Proteus 8.9,改了频率,还是不行。
回复

使用道具 举报

13#
ID:94031 发表于 2021-6-11 09:07 | 只看该作者
一个用户名 发表于 2021-6-10 22:17
我用的Proteus 8.9,改了频率,还是不行。

你把你的工程整个打包发出来让大家看一下。
回复

使用道具 举报

14#
ID:123289 发表于 2021-6-11 11:14 | 只看该作者
不一定是软件问题。
先学会如果调试程序。
走单步看结果先搞会,看看传来的数据是否OK?
再调试显示器:人工给个数字,看看能否正确显示。
这些都不会,暂时就不要搞单片机了。先去补课。
回复

使用道具 举报

15#
ID:934867 发表于 2021-6-11 21:33 来自手机 | 只看该作者
xuyaqi 发表于 2021-6-11 09:07
你把你的工程整个打包发出来让大家看一下。

就在9楼那个New. zip里面
回复

使用道具 举报

16#
ID:934867 发表于 2021-6-11 21:34 来自手机 | 只看该作者
yzwzfyz 发表于 2021-6-11 11:14
不一定是软件问题。
先学会如果调试程序。
走单步看结果先搞会,看看传来的数据是否OK?

好的(Д)补课去了,感觉拿了本坏教材
回复

使用道具 举报

17#
ID:94031 发表于 2021-6-12 08:07 | 只看该作者
一个用户名 发表于 2021-6-11 21:33
就在9楼那个New. zip里面

数码管应该用共阴要换。
回复

使用道具 举报

18#
ID:934867 发表于 2021-6-13 23:24 来自手机 | 只看该作者
xuyaqi 发表于 2021-6-12 08:07
数码管应该用共阴要换。

!成功了,是换成共阳!!
回复

使用道具 举报

19#
ID:390416 发表于 2021-7-6 20:29 | 只看该作者

串口1打印程序 可以打印3个十六位的变量 波特率9600 http://www.51hei.com/bbs/dpj-201660-1.html

串口发送 不需要while死等 串口接收执行软件复位 http://www.51hei.com/bbs/dpj-200927-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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