微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口波特率9600可以,4800为什么不行呢?

串口波特率9600可以,4800为什么不行呢?

时间:10-02 整理:3721RD 点击:

问题1:波特率设置为9600可以,置低cj1,单片机发出数据,改为4800后,单片机不能发出数据了,为什么呀?
问题2:在发出的数据中,总是丢失最后一位,搞不明白呀?
求帮助
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define water_h 1
#define water_l 0
#define length_buf 7
sbit sp=P1^5;
sbit cj1=P3^4;
sbit cj2=P3^5;
uchar a,flag;
uint n1,n2;
uchar *p_rxd;
uchar *p_txd;
uchar count;
uchar i=0;
uchar txd_buf[length_buf];
uchar rxd_buf[length_buf];
void int_int(void);
void delayms();
void delayus();
void txd();
void txd_rxd();
void main()
{
        int_int();
        cj1=1;
        while(1)
        {
                if(cj1==0)
                {
                        delayms();
                        delayms();
                        txd();
                }
         }
}

void int_int(void)
{
        TMOD=0x20;
        TH1=0xFD;(改为0xFA后就不行呢)
        TL1=0xFD;
        TR1=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        REN=1;
}
void delayms()
{
        uint i,j;
        for(i=100;i>0;i--)
        {
                for(j=112;j>0;j--);
        }
}
void delayus()
{
        uint a=10;
        while(a--);
}
void txd()
{
        uchar nu;
//        p_txd=txd_buf;
        txd_buf[0]=0x7b;
        txd_buf[1]=0x00;
        txd_buf[2]=0x01;
        txd_buf[3]=0x00;
        txd_buf[4]=0x00;
        txd_buf[5]=0x00;
        txd_buf[6]=0x7b;    (而且输出的这一位怎么老是丢失呢)
         for(nu=0;nu<7;nu++)
        {
                SBUF=txd_buf[nu];
                delayus();
                while(!TI);
                TI=0;        
        }
        
}
void txd_rxd()
{
        uchar num;
        for(num=0;num<length_buf;num++)
        {
                SBUF=txd_buf[num];
                while(!TI);
                TI=0;        
        }
}
void exr() interrupt 4
{
        RI=0;
        rxd_buf[i++]=SBUF;
        RI=1;
        ES=1;
        flag=1;        
}
而且


会不会是波特率误差造成的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top