找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串口开机发送01数据

查看数: 2995 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-11-15 09:41

正文摘要:

要求实现的功能是上电后始终发送01数据,但是单片机必须接受过才能发送,程序不长,求指点迷津。 #include <reg51.h> #define uchar unsigned char void InitUART(void) {     TMOD = 0x ...

回复

ID:252113 发表于 2017-11-21 23:11
好难
好难好难
ID:252026 发表于 2017-11-21 19:50
你用的晶振是多少啊?
ID:213173 发表于 2017-11-21 18:47
GG276192978 发表于 2017-11-15 11:34
我把你的程序烧写进去后,  结果 如下:
01 40 01 40 01 40 01 40 01 40 01 40  40  40 40............后 ...

你试试
#include <reg51.h>
void InitUART(void)
{
        TMOD=0x20;//定时器1方式2(8位重载)
        TH1=0xfd;//定时器1重载 波特率9600
        TL1=0xfd;//定时器1重载
        TR1=1;        //开定时器1
        SM0=0;        //设置串口方式1(8位UART波特率可变)
        SM1=1;        //设置串口方式1(8位UART波特率可变)
}

void SendOneByte(void)
{
    SBUF = 0x01;
    while(!TI);
    TI = 0;
}

void main(void)
{
    InitUART();
    while(1)
    {
        SendOneByte();
    }
}
ID:47286 发表于 2017-11-21 16:21
你用的是12T?波特率是多少? 你自己完整的程序发上来看看
ID:237942 发表于 2017-11-21 15:20
lucyxi 发表于 2017-11-15 20:50
数据 : 0103 0000000000000000 1f 0103 0100000000000000 11 0103 0200000000000000 03 0103 030000000000 ...

你这个  是哪里的 ? 看这数据帧也不想是协议里面的,难道是自己定义的么?
  还有那个起始位都是0103开始,应该有规律,只是没有参考数据
ID:249565 发表于 2017-11-15 20:50
数据 : 0103 0000000000000000 1f 0103 0100000000000000 11 0103 0200000000000000 03 0103 0300000000000000 0d 0103 0400000000000000 12 0103 0500000000000000 1c 0103 0600000000000000 0e 求大佬 告知 算法
ID:249790 发表于 2017-11-15 19:52
不大明白
ID:237942 发表于 2017-11-15 11:34
我把你的程序烧写进去后,  结果 如下:
01 40 01 40 01 40 01 40 01 40 01 40  40  40 40............后面一直都发送40,这是什么问题呢
ID:237942 发表于 2017-11-15 11:26
我用11.0592M的晶振,我自己把程序改了,但是在正确接收到数据之前,前面一直有几组数据帧是错误的。我查了资料说是串扰,可是我用的开发板有没有引入其他信号,怎么会有串扰这个问题呢,很纳闷求解答?  
再请教一个问题,比如说我想只发一次,这个函数一直在循环,具体我要怎么处理
ID:164602 发表于 2017-11-15 10:13
要求只发送特定的值,很简单嘛。
在你的程序中,去掉中断功能,串口中断是为了接收而准备的。
你的程序我改为这样,你试试:
#include <reg51.h>

void InitUART(void)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    TR1 = 1;
}

void SendOneByte(void)
{
    SBUF = 0x01;
    while(!TI);
    TI = 0;
}

void main(void)
{
    InitUART();
    while(1)
    {
        SendOneByte();
    }
}


我没有检验你的波特率,因为你没有告诉我硬件是怎么样的,如晶振频率等

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

Powered by 单片机教程网

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