这个例程是
开发板自带的,功能是PC向
单片机发数据,单片机再反馈。里面P0口是我为了直观显示单片机向PC机返回数据加上去的,但我发现发字符串时返回没问题,但如果返回单个字符或数字则返回出问题,有时甚至只接受没返回(用的是串口调试助手)
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar ch; //用于存放串口接收到的数据
bit read_flag= 0 ; //取数标志位
//初始化串口
void init_com( void )
{
SCON = 0x50; // 设定
通信方式为方式1,允许接收,相当于REN = 1; SM1 = 1;
PCON = 0x00; //SMOD=0,该语句可去掉
IE |= 0x90 ; //打开串口中断, 相当于 EA = 1;ES = 1;
//以下4句设置T1
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=0xE6; //定时器0赋初值,TH1=(256 - (12000000 / (32 * 12 * 1200)))=230;
TL1=0xE6; //TL1=(256 - (12000000 / (32 * 12 * 1200)))=230;
TR1 = 1; //启动T1
}
//串口中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ; //此步必不可少,因为硬件不能将其置0
ch=SBUF; //从SBUF中取出数据
read_flag= 1 ; //就置位取数标志
}
}
//串口发送函数
void send_char( unsigned char ch1)
{
SBUF=ch1+1; //将待发数据放到SBUF
while (
ti== 0); //等待TI=1(表示帧发送结束)发送
TI= 0 ; //此步必不可少,因为硬件不能将其置0
}
//主函数
void main(void)
{
P0=0x0f;// ------------------
init_com( ) ;
while(1)
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
P0=~P0; // ----------
send_char(ch); //将读到的数从串口发出
}
}
一周热门 更多>