AT89S52串口程序
扫描二维码
随时随地手机看文章
/***************************************
*函数:main.c
*描述:
* 串口通讯协议标准测试:发送01234567
*时间:
*编写:
*版本:V1.0
****************************************/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define FSOC 11059200L //晶振
#define BAUD 9600 //波特率
uchar RevBuf; //保存串口接收到的数据,数据缓冲区
void SerialInit(void) //串口初始化
{
EA = 0;
SCON = 0x50; //SCON0:mode0,8-Bit,UART,Enable RXD
PCON |= 0x80; //SMOD00 =1;
TMOD = 0x20 ; //TMOD:timer1,mode2,8-bit relaod
TH1 = -(FSOC/BAUD/12/16); //set Timer1 reload value for baudrate
TL1 = -(FSOC/BAUD/12/16); //set Timer1 reload value for baudrate
TR1 =1;//start Timer1
//ES = 1; //enable UART0 interupt
EA = 1;
}
/*
//Reeive Char "串口中断方式接受数据"
//功能:接收到数据之后再发回去
void UART_INTR_SVC(void)interrupt 4 using 3
{
if(RI==1)
{
RI =0;
RevBuf =SBUF;
SBUF = RevBuf;
}
else
{
TI = 0;
}
}
*/
void main(void)
{
uchar m,n; //定义循环变量
SerialInit(); //初始化串口
//send('a');
for(m=0;m<10;m++)
{
SBUF = m+0x30;
while(TI!=1);
TI=0;
} //向电脑发送数据0123456789
SBUF = 0x0A; //换行符号的ASCII码
while(TI!=1);
TI=0;
for(n=0;n<10;n++)
{
SBUF = 0x40; //@的ASCII码
while(TI!=1);
TI=0;
}
SBUF = 0x0A;
while(TI!=1);
TI=0;
for(;;)
{
while(RI!=1);
RI=0;
RevBuf = SBUF; //查询方法接收数据
SBUF = RevBuf; //原数据发回
while(TI!=1);
TI=0;
}
}