#include #include
本文引用地址:https://www.eepw.com.cn/article/201611/315388.htm#define uchar unsigned char
#define uint unsigned int
//sbit BEEP = P1; // P1接8个LED
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中断标志位RI没有被置“1” 当接收完毕时,中断标志RI被置1
; //等待,直至接收完毕(RI=1)
RI=0; //为了接收下一帧数据,需将RI清0
dat=SBUF; //将接收缓冲器中的数据存于dat
return dat;
}
void main (void)
{
int i =0;
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2
TMOD|= 0x20; //定时器1工作方式2
// PCON|= 0x80; //波特率提高一倍
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无(11.0592)
TH1 = 0xFD;// //baud /* 波特率9600、数据位8、停止位1。效验位无 (11.0592M)
TL1 = 0xFD;
TR1 = 1; //开启定时器1
//ES = 1; //开串口中断 是否开串口中断和开总中断不影响。
//EA = 1; // 开总中断
// IE = 0x0;
REN=1; //允许接收
while(1)
{
P1=Receive(); //将接收到的数据送P2口显示
}
}
c51串口接收并发送数据程序
2007年11月02日 下午 10:00
#include #defineBUFFERLEGTH 10 //----------------------------------------------------------------- void UART_init();//串口初始化函数 void COM_send(void);//串口发送函数 char str[20]="hellorn"; //------------------------------------------------------------------- void main(void) { unsigned char i; UART_init();//初始化串口 for(i = 0;i < 10 ;i++) { COM_send();//首先发送一次数据作为测试用 }; while(1); } //------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函数名称: UART_init()串口初始化函数 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s //串口接收中断允许,发送中断禁止 //-------------------------------------------------------------------------------------------------- void UART_init() { //初始化串行口和波特率发生器 SCON =0x50;//选择串口工作方式1,打开接收允许 TMOD =0x20;//定时器1工作在方式2,定时器0工作在方式1 TH1 =0xfA;//实现波特率9600(系统时钟11.0592MHZ) PCON = 0x80; TR1 =1;//启动定时器T1 ET1 =0; ES=1;//允许串行口中断 PS=1;//设计串行口中断优先级 EA =1;//单片机中断允许 } //------------------------------------------------------------ void COM_send(void) { unsigned char point = 0; for(point=0;point< 20;point++)//连续发送二十位数据//把缓存区的数据都发送到串口 { SBUF=str[point]; while(!TI); TI=0; } } //-------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- // 函数名称: com_interrup()串口接收中断处理函数 // 函数功能: 接收包括起始位S在内的十位数据到数据缓冲区 //-------------------------------------------------------------------------------------------------- void com_interrupt(void) interrupt 4 using 3 { unsigned char RECEIVR_buffer; if(RI)//处理接收中断 { RI=0;//清除中断标志位 RECEIVR_buffer=SBUF;//接收串口数据
if (RECEIVR_buffer == s) { SCON =0x40;//接收不允许 COM_send();//发送数据 SCON =0x50;//接收允许 } }
|
评论