打印
[STC单片机]

关于串口收发数据的问题,谢谢各位

[复制链接]
1176|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
片子是STC15W4K系列#include<STC15F2K60S2.H>
#define uint unsigned int
#define uchar unsigned char
uint temp,flag;
//uchar temp,flag;     ??????????????????????????? temple类型为uchar 和uint 对这个程序来说有影响吗?
sbit led=P2^1;

void Delay5ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 54;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}

void init()
{
        P2M0=1;
        P2M1=0;
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
//        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0xE0;                //设定定时初值
        TH1 = 0xFE;                //设定定时初值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1       
        ES=1;
        EA=1;
}

void main()
{                                                         
        init();
        while(1)
        {
                if(flag)
                {
                        flag=0;
                        ES=0;
                        SBUF=temp;
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }
}
void uart1() interrupt 4
{
        RI=0;
        temp=SBUF;
        flag=1;       
}




1. temple类型为uchar 和uint 对这个程序来说有影响吗?
2. 为什么16进制发送和接收时,AA 0A 1A都可以,但是01 02 A0是个什么情况?
小弟初学,先谢谢各位大大

1.png (53.77 KB )

1.png

2.png (53.82 KB )

2.png

相关帖子

沙发
浪浪云|  楼主 | 2016-5-17 20:58 | 只看该作者
关于P2的io口设置和LED部分请忽略,并没有影响

使用特权

评论回复
板凳
浪浪云|  楼主 | 2016-5-18 08:45 | 只看该作者
快来人啊

使用特权

评论回复
地板
ningling_21| | 2016-5-18 09:02 | 只看该作者
本来应该是有影响的,但这个场合影响有限

你的TMOD = ? 到底

你的波特率是多少?

使用特权

评论回复
5
浪浪云|  楼主 | 2016-5-18 09:39 | 只看该作者
ningling_21 发表于 2016-5-18 09:02
本来应该是有影响的,但这个场合影响有限

你的TMOD = ? 到底

TMOD那块注释与否没有什么关系,默认就是16位自动重装载,波特率9600,上面忘了写了不好意思

使用特权

评论回复
6
浪浪云|  楼主 | 2016-5-18 10:42 | 只看该作者
ningling_21 发表于 2016-5-18 09:02
本来应该是有影响的,但这个场合影响有限

你的TMOD = ? 到底

其实我真正目的是想通过读传感器的一个十六进制数据然后发送到电脑上,想着好久没用串口了,写点小程序结果就弄个这。。。。但是要是将16进制数据直接给SBUF的话,我试过也是乱七八糟的,这个该怎么解决呢?

使用特权

评论回复
7
ningling_21| | 2016-5-18 13:39 | 只看该作者
浪浪云 发表于 2016-5-18 10:42
其实我真正目的是想通过读传感器的一个十六进制数据然后发送到电脑上,想着好久没用串口了,写点小程序结 ...

如果是uchar  写一次SBUF就可以,如果是uint  需要发送2次,先发高字节,接着是低字节

使用特权

评论回复
8
ningling_21| | 2016-5-18 13:40 | 只看该作者
浪浪云 发表于 2016-5-18 10:42
其实我真正目的是想通过读传感器的一个十六进制数据然后发送到电脑上,想着好久没用串口了,写点小程序结 ...

波特率一定要设置正确,否则数据肯定不对

使用特权

评论回复
9
浪浪云|  楼主 | 2016-5-18 19:23 | 只看该作者
ningling_21 发表于 2016-5-18 13:40
波特率一定要设置正确,否则数据肯定不对

真是无语了,各种蛋疼

使用特权

评论回复
10
浪浪云|  楼主 | 2016-5-18 19:25 | 只看该作者
ningling_21 发表于 2016-5-18 13:40
波特率一定要设置正确,否则数据肯定不对

换过串口助手,重装过驱动,程序也看了好几遍,真是无语了

使用特权

评论回复
11
ningling_21| | 2016-5-19 11:18 | 只看该作者
浪浪云 发表于 2016-5-18 19:25
换过串口助手,重装过驱动,程序也看了好几遍,真是无语了

检查波特率设置定时器初值

使用特权

评论回复
12
浪浪云|  楼主 | 2016-5-20 11:11 | 只看该作者
ningling_21 发表于 2016-5-19 11:18
检查波特率设置定时器初值

事实证明,程序的确没有问题,问题在这,看图,这是买的系统板人家附带的下载说明,之前用这个板子的时候,包括串口的接受和其他的都OK,只是串口的发送是有问题,也没有太在意这个设置,因为我并没有在程序里面配置系统时钟,并且我用的不管是内部(默认)还是外部都是11.0592,还有那个上点复位延时的,万万没想到问题就出现在这里,只是一个串口打印的程序,花了3天的时间才找到是这个原因,并且我并不知道为什么要这样配置?感觉没差啊?就只是上点的一点延时吗??时钟感觉选不选都是11.0592M啊???但是不配置发送就是不行,配置就是有东西出来,真是呵呵了

111.png (41.87 KB )

111.png

使用特权

评论回复
13
ningling_21| | 2016-5-20 15:01 | 只看该作者
浪浪云 发表于 2016-5-20 11:11
事实证明,程序的确没有问题,问题在这,看图,这是买的系统板人家附带的下载说明,之前用这个板子的时候 ...

内部时钟可以设置大小(但精确度不高且易受环境影响),外部晶振稳定精度高不易受干扰

使用特权

评论回复
14
浪浪云|  楼主 | 2016-5-20 16:01 | 只看该作者
ningling_21 发表于 2016-5-20 15:01
内部时钟可以设置大小(但精确度不高且易受环境影响),外部晶振稳定精度高不易受干扰 ...

好的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

99

帖子

2

粉丝