RS232串行通信是常见的通信方式之一,本版采用MAX232电平转换芯片使单片机的串口和计算机的串口相连进行通信。
C语言源程序:
/***************************************************************************
功能:首先LED显示串口接收的数据,然后将该数据发送给上位机
***************************************************************************/
#include <reg52.h> //52单片机头文件包含
#define uint unsigned int //定义uint 为 unsigned int 型
#define uchar unsigned char //定义uchar 为 unsigned char 型
sbit wei1=P2^0; //定义wei1 为 P2端口的0号引脚接数码管第一位
sbit wei2=P2^1; //定义wei2 为 P2端口的1号引脚接数码管第二位
uchar code table[]={0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E}; //定义共阳数码管码表
uchar idata buffer[32]; //定义一个32个字节的缓冲区
uchar l_datatemp; //定义l_datatemp用于存储新接收的数据
uchar l_data; //定义l_data用于存储显示的数据
void init (void); // 初始化函数声明
void send_char_com(uchar ch); //串口发送函数声明
void delay(uint z); //延时函数声明
void main() //入口函数
{
uchar l_data1,l_data2; //定义临时变量l_data1,l_data2用于处理临时数据
l_datatemp=0; //将l_datatemp赋值为0
l_data=0; //将l_data赋值为0
init(); //串口收发初始化
while(1) //主循环
{
if(l_data!=l_datatemp) //如果接收的数据与原来显示的数据不同,更新原来显示的数据
{
l_data=l_datatemp; //更新原来的数据
send_char_com(l_data); //向串口发送更新后的数据
}
l_data1=l_data&0xf0;//取高四位显示
l_data1=l_data1>>4;
wei1=0;
P0=table[l_data1];
delay(5);
wei1=1;
l_data2=l_data&0x0f; //取低四位显示
wei2=0;
P0=table[l_data2];
delay(5);
wei2=1;
}
}
void init(void) //串口初始化,波特率2400 方式1 8 UART
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xF3;
TL1=0xF3;
TR1=1; //启动定时器/计数器,还与GATE位状态有关
ES=1; //允许串行中断
EA=1; //总中断开
}
void send_char_com(uchar ch) //查询方式向串口发送一个字符
{
SBUF=ch;
while(TI==0);
TI=0;
}
void receive(void) interrupt 4 using3 //中断方式从串口接收字符
{
if(RI)
{
if(TI) //处理发送中断
{
TI=0;
}
RI=0;
l_datatemp=SBUF;
}
}
void delay(uint z) //延时
{
uint x,y; //定义x,y用于循环计数
for(x=z;x>0;x--) //主循环循环z次
for(y=110;y>0;y--) //子循环循环110次
}
//实验现象用串口调试助手软件向单片机发送字符09则数码管将显示09
|