找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2457|回复: 6
收起左侧

单片机与PC上位机串行口通信调不通

[复制链接]
ID:243437 发表于 2017-11-6 16:04 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define  uchar  unsigned  char
#define  uint  unsigned  int
#define  zxmaddr  P0
#define  zwmaddr  P2
unsigned  char  flag,a,i;
uchar  code  table[]="The  date  is";/*共阴极数码管字形码,共阳极数码管取反即可*/

uchar  code  zixing[]={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5E,0x79,0x71};/*共阴极数码管字形码,共阳极数码管取反即可*/
uchar  code  ziwei[]={  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void  init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void  disp(void)
{
zwmaddr=~ziwei[7];
zxmaddr=~zixing[a&0x0f];
}
void  send_char(unsigned  char  txd)
{
SBUF=txd;
while(!TI);
TI=0;
}
void  main()
{
init();
while(1)
{
disp();
if(flag==1)
{
ES=0;
send_char(a);
ES=1;
flag=0;
}
}
}
void  ser()  interrupt  4
{
RI=0;
a=SBUF;
flag=1;
}



这个程序对这个图为什么不行呢?求指教
QQ截图20171106155922.png
回复

使用道具 举报

ID:111634 发表于 2017-11-6 21:14 | 显示全部楼层
本帖最后由 zl2168 于 2017-11-6 21:15 编辑

介绍你一个虚拟仿真案例
单片机与PC机虚拟串行通信
实验16 与PC机虚拟串行通信.rar (151.41 KB, 下载次数: 14)
回复

使用道具 举报

ID:213173 发表于 2017-11-7 08:47 | 显示全部楼层
程序毛病不是语法问题,是语句次序问题。flag=0;要放在ES=0;与ES=1;之间,否在会丢帧。因为中断一旦打开,很可能不是执行flag=0;,而是先响应中断,再返回执行flag=0;,这样就丢了一帧。改后如下:
void  main()
{
        init();
        while(1)
        {
                disp();
                if(flag==1)
                {
                        ES=0;
                        send_char(a);
                        flag=0;
                        ES=1;
                }
        }
}
回复

使用道具 举报

ID:243437 发表于 2017-11-22 14:43 | 显示全部楼层
zl2168 发表于 2017-11-6 21:14
介绍你一个虚拟仿真案例
单片机与PC机虚拟串行通信
先Proteus仿真一下,确认有效。以上摘自张志良编著《8 ...

谢谢
回复

使用道具 举报

ID:243437 发表于 2017-11-22 14:43 | 显示全部楼层
wulin 发表于 2017-11-7 08:47
程序毛病不是语法问题,是语句次序问题。flag=0;要放在ES=0;与ES=1;之间,否在会丢帧。因为中断一旦打开, ...

谢谢
回复

使用道具 举报

ID:243437 发表于 2017-11-22 15:10 | 显示全部楼层
zl2168 发表于 2017-11-6 21:14
介绍你一个虚拟仿真案例
单片机与PC机虚拟串行通信
先Proteus仿真一下,确认有效。以上摘自张志良编著《8 ...

谢谢
回复

使用道具 举报

ID:243437 发表于 2017-11-22 15:11 | 显示全部楼层
wulin 发表于 2017-11-7 08:47
程序毛病不是语法问题,是语句次序问题。flag=0;要放在ES=0;与ES=1;之间,否在会丢帧。因为中断一旦打开, ...

谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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