小三止步 发表于 2012-7-30 09:52:00

哪位大神帮我解决一下PC机与单片机串口通讯问题。。

本帖最后由 小三止步 于 2012-7-30 10:14 编辑

用一块单片机加一块MAX232跟电脑进行数据的收发,用串口调试助手操作发送与接收,之前发送数据和接受数据是正常的,如果发送的数据过长,接收端就会出现乱码,请教大神这是神马原因??
代码:#include<reg52.h>
#include <absacc.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
uchar FREQ;                                                                 /*定时器计数变量*/

void main(void)
{       
// 以下是设置中断和定时器
        EA=1; PT0=1;
        ET0=1;
        IT0=1;IT1=1;
        EX0=1;EX1=1;ET2=1;
        T2CON=0x08;
        TMOD=0x21;
       
// 定时器0为产生1ms的中断,定时器1为9600bit/s 的波特率发生器
        TH0=-1000/256;
        TL0=-1000%256;
        TL1=0xfd;
        TH1=0xfd;
        SCON=0x50;
        PCON=0x80;
       
// 开定时器
        TR1=1;
        TR0=1;
        TI=1;
        while(1){}
}

// 定时器0的中断服务程序,向串口发送姿态数据。
void intsvr1(void) interrupt 1
{

// 重新装入定时器0的初值;
        TH0=-10000/256;
        TL0=-10000%256;
FREQ=FREQ+1;                                                 // 定时器T0的低四位赋值
if (FREQ==1000)                                               // 1秒判断
        {
FREQ=0;
printf("*");                                                        // 发送字符
        }
}

zuceyige 发表于 2012-7-30 10:38:29

会不会是定时器时间间隔时间太短了呢?

longwu911 发表于 2012-7-30 10:59:51

晶振是多大的?

小三止步 发表于 2012-7-30 14:16:50

longwu911 发表于 2012-7-30 10:59 static/image/common/back.gif
晶振是多大的?

晶振:11.0592MHz

小三止步 发表于 2012-7-30 14:19:19

zuceyige 发表于 2012-7-30 10:38 static/image/common/back.gif
会不会是定时器时间间隔时间太短了呢?

之前刚发送数据时是正常的,发送数据次数多的时候就会出现乱码。

qcbhsjj 发表于 2013-4-23 16:13:07

存数据的数组长度不够

lidar 发表于 2013-4-23 21:48:42

数据发送比较长的话,有可能是数据还在发送中,又重新产生中断了

跳跃的宇宙 发表于 2013-4-23 21:57:57

printf函数使用好像有误,它通过查TI是1时发送,否则就死循环等待

跳跃的宇宙 发表于 2013-4-23 21:59:53

考虑一下放在中断里使中断退不出来的影响吧

benqme 发表于 2013-4-23 22:29:17

一组数据不是只有8位吗,不用中断写就可以吧
页: [1]
查看完整版本: 哪位大神帮我解决一下PC机与单片机串口通讯问题。。