我在AT89C52中编的程序是: #include <intrins.h> #include <reg51.h> sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P0_5=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3_3=P3^3; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7; int i; unsigned char Chh[8],Chl[8]; /*系统初始化*/ void SystemInit(void) { TCON=0x05;//外部中断下降沿触发 TMOD=0x21;//Timer1方式2,Timer0方式1 TH1=0xFD;//波特率19200 TR1=1; SCON=0x50;//串行通讯方式1,允许接收 PCON=0x80;//SMOD=1 IE=0x90; } /**********发送一帧数据*********/ void SerialSendBytes(void) { unsigned char j; for(j=0;j<8;j++) { TI=0; SBUF=0x10; do {}while(TI==0);//等待TI为1后才开始下个数据的传送 TI=0; SBUF=0x01; do {}while(TI==0);//等待TI为1后才开始下个数据的传送 } TI=0; }
void Main(void) { unsigned char ByteR; SystemInit(); while(1) { if (RI) { RI=0; ByteR=SBUF; if(ByteR==0xFF) { SerialSendBytes(); RI=0; } } } } 我用串口助手调试过程中,设置了波特率19200,按一定周期十六进制发送FF,接受的十六进制不是10 01 10 01 10 01 10 01 10 01 10 01 10 01 10 01,而是一大堆fd 00 df 等等什么的乱码! 请问一下大侠是我的程序编的有问题吗?还是AT89C52硬件电路有问题?谢谢 |