因为笔记本没有串口,所以我买的单片机板子用USB下载程序的(是用PL2303HX芯片),但是做串口通信总是乱码,是什么原因啊?
程序如下:
#include<reg52.h>
#include<stdio.h> //用于调用puts函数
#define FOSC 12000000 //所用的晶振
#define BAUD 9600 //波特率
unsigned char a,flag_uart,flag_on;
void init()
{ TMOD=0x20; //定时器T1 方式2
TH1=TL1=-(FOSC/BAUD/32/12);
TR1=1; //启动T1
SM0=0;
SM1=1; //串口工作方式1
REN=1; //串口允许接收数据
EA=1; //开总中断
ES=1; //开串口中断
}
void ser() interrupt 4
{ RI=0; //串口中断标志,接收完成时置1,要由软件清零
a=SBUF; //接收到的数据给a
flag_uart=1; //接收到数据的标志,在主函数中查询用
if(a==1)
flag_on=1;
else if (a==2)
flag_on=2;
else
flag_on=3;
}
void main(void)
{ init();
while(1)
{ if(flag_uart==1) //flag_uart为1中断接收到数据
{ flag_uart=0;
ES=0; //关串口中断,防止发送数据时接到数据进入中断
TI=1; //发送中断标志位,发送到停止位时置1,软件清零,因为下面的puts检查到为1时才会发送数据
switch(flag_on)
{ case 1:puts("You input 1\n");
break;
case 2:puts("You input 2\n");
break;
case 3:puts("Error\n");
break;
}
while(!TI); //等待数据发送完成,就是TI置1
TI=0; //软件清零
ES=1; //打开串口中断
}
}
}
现象如图: |