导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:关于8051和pc通讯![c51_girl]

 *第157篇: C51编程:关于8051和pc通讯!

  
楼 主:c51_girl 2001年8月18日22:35
 C51编程:关于8051和pc通讯!
我编制了一8051向pc发送数据的通讯程序,8051串口与pc的com1通过rs232连接。8051程序
用keiluvision2编译,pc上用tubo c ,采用了函数bioscom。二者波特率均设为9600,采用
中断查询方式。两段程序均分别编译通过,并且在keil上可以看到serial#1上有正确地的输
出,但是8051向pc发送数据时,pc上没有显示,就是说pc并没有收到8051发来的数据。迷惑
不解,不知那里出了问题,请高人指点!
具体程序如下:
8051:
#include "reg52.h"
#include "string.h"
#include "highbios.h"

 
void init_rs232()
{
    SCON=0x50;
    TMOD=0x20;
    TH1=0xfb;
    TR1=1;
    TI=1;
}

tx_char(unsigned char c)
{
    while(1)
    {
        if(TI==1) break;
    }
    TI=0;
    SBUF=c;
}
    
main()
{
    while(1)
    {
    unsigned char *title0="I LOVE you!";
    init_rs232();
    do{tx_char(*title0++);}
        while(*title0!='\0');
    }
}


pc:
#include <bios.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

extern void clrscr();
extern int getch();

void receive();

main()
{
char c;
bioscom(0,0xe3,0);
clrscr();
puts("---------------------");
puts("com1 <9600 N 8 1>");
puts("---------------------");
c=getch();
receive();
}

void receive()
{
    int s;
     char c;
    while(1)
    {
        s=bioscom(3,0,0)&0x100;
        if(s)
        {
            c=bioscom(2,0,0);
            printf("%c",c);
        }
    }
}

void send(char *title)
{
    int s;
    do {
        bioscom(1,*title++,0);
        while(1)
        {
            s=bioscom(3,0,0)&0x100;
            if(s)
            {
                if(bioscom(2,0,0)==*title) break;
            }
        }
       }while(*title!='\0');
}

  
2楼:老古 2001年8月19日00:06
 你可以先用超级终端来看,先不要用自己的pc端的程序
  
3楼:逍遥派掌门人 2001年9月12日14:25
 很有问题的
 C51的串行设置里:
    TMOD=0x20;
    TH1=0xfb;
    TR1=1;
  还漏了 TL1=0xfb;
  而且还要开中断,使能串行中断: ES=1;EA=1;
  波特率的设定还要看晶振值,一定要设定对,这很重要。  
  tx_char(unsigned char c) 这段程序有问题,找本C51的书,好好看看。
  你用TC写的这段程序用了bioscom 函数,这对硬件是有要求的,可以改为直接对
端口操作。更简单的办法如下:
   你可以到瀛海威的软件下载中心,找“串口小精灵”的软件(我的作品 ^O^)和
单片机通信。只要3根线联机就可以了,前提条件是串口的接线一定要正确,可以把
RS232口的2,3脚线互换试试。
   如果无法下载,可以找我:  fsljz@yahoo.com
  
4楼:zsq553 2002年11月13日22:03
 给你一个现成的。
  
5楼:gty 2002年11月14日02:28
 用示波器检测SIO数据
用数字示波器检测SIO数据的波形,能看到有没有发生数据、根据高低电平能判读数据字
节。在软件查得头昏脑胀时,不失为一种好方法。

>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:硬件:请教斑竹。。。

[下一篇主题]:AVR单片机:如何修改avr的中断触发方式