单片机实验
RS232作为标准的计算机串行接口已被广泛使用,与此同时,随着现场总线技术的飞速发展,具有实时性好、可靠性高、结构简单等优点的CAN总线在测控系统中也越来越多地被采用,但由于两者的总线结构、通信协议及传输特点各不相同,因而给不同设备之间的连接带来诸多不便。因此,如何以最简单的方式实现CAN节点与RS232串行口的通信就成为工程实践中一个不可回避的问题。
本文主要就是说at89c51接max232方法和程序,具体的我们一起来了解一下吧。
MAX232与51单片机之间的通信连接很简单,因为所谓的MAX232通信标准,就是对插件样式、信号名称和意义以及所谓的驱动器/接收器的电气模式这种硬件作出规定。一般的都是9针的接口,其中包括CD接口:数据通道接收载波的检测;RD接口:接收数据;SD接口:发送数据;ER接口:数据终端就绪;SG接口:信号用接地;DR接口:数据集就绪;RS接口:请求发送;CS接口:允许发送;CI接口:被呼表示。
用以上接口进行数据通信,还有对电平的要求。所以与51单片机进行通信连接的方式很简单,首先要解决的是电平标准,51的I/O口最大输出5V电压,而RS-232要求电压在±10V,为达到电平匹配,需用到MAX232CPF电平转换芯片,将0~5V电平转换为±10V电平,从而实现电平匹配;然后,数据接口只用到了数据发送与接收2个端口,还有数据的请求发送与允许发送,共4个端口,MAX232CPF还有其他一些外围电路接口,但比较简单,都是些电容接口,从而实现单片机与RS232接口的通信。
//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送
//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送
#include《regx52.h》
#define uchar unsigned char
#define uint unsigned int
uchar a,flag;
uchar table[]={“very good ”};
//-----------初始化定时器和串口-
void inital_timer1()
{
TMOD=0X20; //必须使用定时器1,串口使用规定
TH1=0Xfd; //定时器1,工作方式2,8位 自动重装
TL1=0Xfd; //高8位与低8位数值必须相同
TR1=1; //定时器1允许位
REN=1; //串口使能
SM0=0; //串口 工作方式设置,工作方式1
SM1=1; ES=1; //串口中断使能
EA=1; // 总中断使能
}
//----------串口中断---------
void gorpe() interrupt 4
{
RI=0; //接受中断标志位,硬件置1,必须软件置0
a=SBUF; // 特殊功能寄存器
flag=1; // 检测标志位
}
//-----接收数据,并向上位机作出反应(即发送返回数据)---
void display()
{
uchar i;
if(flag==1)
{
ES=0; //关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环
for(i=0;i《10;i++)
{
SBUF=table[i];
while(!TI); //判断是否发送完成
TI=0; //发送中断标志位
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
全部0条评论
快来发表一下你的评论吧 !