串口波特率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;
}
而且
会不会是波特率误差造成的?