小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 5129|回复: 0

求解除疑惑

[复制链接]
发表于 2013-9-3 23:33:54 | 显示全部楼层 |阅读模式
本帖最后由 飞SNOW 于 2013-9-3 23:40 编辑

我用一个程序测试串口通信是否正常,当用51单片机最小系统板上的USB于电脑USB的时候收发正常,但是用USB-TTL 直接接上51单片机TXD,RXD 交叉相连(89c52rc)却只能电脑只能收,发送没响应。
这是测试程序原代码,不知道什么原因。USB-TTL 我用万能表测量时3.4V  51单片机P3.0 的5.0V,是不是我的USB-TTL有问题?但是把USB-TTL 的TXD于RXD短路测试USB-TTL是正常的
/*X
*         单片机接收主机的数据,然后将数据传送到P0口, 并传回给主机;             *
*         当按下K1=P3.4 时, 单片机发送字www.XXXX.com.cn" 给主机       *                                                   *
*                                                                              *
*/   

#include <reg51.h>
#include <intrins.h>

unsigned char key_s, key_v, tmp;

char code str[] = "www.XXXX.com.cn\n";


void send_str();
bit    scan_key();
void proc_key();
void delayms(unsigned char ms);
void send_char(unsigned char txd);

sbit    K1 = P3^4;

main()
{
    TMOD = 0x20;            // 定时器1工作于8位自动重载模式, 用于产生波特率
    TH1 = 0xFD;                // 波特率9600
    TL1 = 0xFD;
   
    SCON = 0x50;            // 设定串行口工作方式
    PCON &= 0xef;            // 波特率不倍增
        
    TR1 = 1;                // 启动定时器1
    IE = 0x0;                // 禁止任何中断
   
    while(1)
    {
        if(scan_key())        // 扫描按键
        {
            delayms(10);            // 延时去抖动
            if(scan_key())            // 再次扫描
            {
                key_v = key_s;        // 保存键值
                proc_key();            // 键处理
            }
        }
        if(RI)                        // 是否有数据到来
        {
            RI = 0;
            tmp = SBUF;                // 暂存接收到的数据
            P0 = tmp;                // 数据传送到P0口
            send_char(tmp);            // 回传接收到的数据
        }        
    }
}

bit scan_key()   
// 扫描按键
{
    key_s = 0x00;
    key_s |= K1;
    return(key_s ^ key_v);   
}

void proc_key()
// 键处理
{
    if((key_v & 0x01) == 0)
    {            // K1按下
        send_str();                // 传送字串"welcome!...
    }
}

void send_char(unsigned char txd)
// 传送一个字符
{
    SBUF = txd;
    while(!TI);                // 等特数据传送
    TI = 0;                    // 清除数据传送标志
}

void send_str()
// 传送字串
{
    unsigned char i = 0;
    while(str != '\0')
    {
        SBUF = str;
        while(!TI);                // 等特数据传送
        TI = 0;                    // 清除数据传送标志
        i++;                    // 下一个字符
    }   
}

void delayms(unsigned char ms)   
// 延时子程序
{                        
    unsigned char i;
    while(ms--)
    {
        for(i = 0; i < 120; i++);
    }
}

回复

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 09:07 , Processed in 1.089565 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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