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

2019-07-15 19:29发布

本帖最后由 neuangel 于 2014-6-8 08:51 编辑

问题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;        
}
而且




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。