/***********************************************************************************
* 标题: RS232串口通信试验(接受与发送) *
用串口调试助手(Baud 4800、数据位8、停止位1、效验位无)做为上位机来做收发试验。
8段数码管显示传输数据
*************************************************************************************/
#include <reg52.h> //函数声名
#define uchar unsigned char
bit Flag;
unsigned int ReData,SenData;
uchar flag,serial_num;
unsigned char table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void display(uchar num);
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;
while(1)
{
if (Flag==1)
{
SBUF=SenData; //SUBF接受/发送缓冲器
while(TI==0); //等待发送结束
TI=0; //qing0
Flag=0;
}
display(serial_num);
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
serial_num=SBUF;
Flag=1;
}
}
void display(uchar num)
{
P0 = table[num%16]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
}
/*****************************************************************
* 延时程序 *
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--) //循环6000*200次
for(j = 200; j > 0; j--);
}
* 标题: RS232串口通信试验(接受与发送) *
用串口调试助手(Baud 4800、数据位8、停止位1、效验位无)做为上位机来做收发试验。
8段数码管显示传输数据
*************************************************************************************/
#include <reg52.h> //函数声名
#define uchar unsigned char
bit Flag;
unsigned int ReData,SenData;
uchar flag,serial_num;
unsigned char table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void display(uchar num);
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
// IE = 0x0;
while(1)
{
if (Flag==1)
{
SBUF=SenData; //SUBF接受/发送缓冲器
while(TI==0); //等待发送结束
TI=0; //qing0
Flag=0;
}
display(serial_num);
}
}
/****************************************************
串口中断程序
******************************************************/
void ser_int (void) interrupt 4 using 1
{
if(RI == 1) //RI接受中断标志
{
RI = 0; //清除RI接受中断标志
ReData = SBUF; //SUBF接受/发送缓冲器
SenData=ReData;
serial_num=SBUF;
Flag=1;
}
}
void display(uchar num)
{
P0 = table[num%16]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样;
}
/*****************************************************************
* 延时程序 *
*****************************************************************/
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--) //循环6000*200次
for(j = 200; j > 0; j--);
}
