title
收藏本站
联系站长
关于本站
首页 信息发布 产品宣传 论坛交流 学习文章 技术人生 项目源码 技术资料 人才收录
 今天是: 2011年8月21日 星期 日
欢迎光临!单片机群号:154389772 25930265 71062262 21829895 64584393 26583231  
热门文章推荐


当前位置:首页>>>单片机学习文章>> STC89C52串口,485接口通讯代码
STC89C52串口,485接口通讯代码
作者:shangguanh给他留言 [原创] 字体:
发表于:
2011-05-31 10:21:12

//232通信和485通信综合程序     小罗 2011.5.25
//485的RE用89C52单片机的P1.3口控制
#include <reg52.h>
#include <stdio.h> 
#define uchar unsigned char
#define uint unsigned int
#define val 30    //字符串的长度

sbit RS485Enable = P1^3;   //485的控制端RE,IO口根据硬件电路进行选择    0: REC, 1:SEND

unsigned char flag,i;
uchar code table[]="I get ";
unsigned int buf[val];

void init()
{

 TMOD=0x20;//定时器T1使用工作方式2
 TH1=0xfd;//T1定时器装初值(高位)
 TL1=0xfd;//T1定时器装初值(低位)
 TR1=1;//开始计时
 SCON=0x50;//9600波特率,允许接收
 EA=1;//开总中断
 ES=1;//开串口中断
  
}
void ser() interrupt 4  //中断接收函数
{
 RI=0;

    while(buf[val]!="\0") //判断是否为最后一个字符
     {
    for(i=0;i<val;i++)                               
    buf[val]=SBUF;//把数据存在寄存器里
  }

 flag=1;//设置接收标识符

void main()
{
  uint io_type;
  printf("please input a io_type(1 for 232,2 for 485):\n");
  scanf("%d",&io_type);
  init();
 switch(io_type)
  {
 case 1:
   printf("Communication mode for 232");
   while(1) 
     {
    if(flag==1)//是否有中断,
   {
    ES=0;//关UART中断
    for(i=0;i<6;i++)
     {
     SBUF=table[i];
     while(!TI);
     TI=0;
     }
    while(buf[val]!="\0")
         {
        for(i=0;i<val;i++)                                  
        SBUF=buf[val];//发送数据
      }                                  
    while(!TI);
    TI=0;
    ES=1;
    flag=0;                 
    }
   }
  
  break;

 case 2:
   printf("Communication mode for 485");
   RS485Enable=0;//485允许接收
  while(1) 
  {
   if(flag==1)//是否有中断,
   {
    ES=0;//关UART中断
    RS485Enable=1; //发送数据模式
    for(i=0;i<6;i++)
    {
     SBUF=table[i];
     while(!TI);
     TI=0;
    }
     
       while(buf[val]!="\0")
        {
        for(i=0;i<val;i++)                                  
        SBUF=buf[val];//发送数据
     }
    while(!TI);
    TI=0;
    ES=1;
    RS485Enable=0;//数据发送之后将控制端切换到接收模式
    flag=0;                 
   }
  }
  break;
  default:       
  break;
 }

  }

 


(本文引自www.mcujl.com/article.asp?conID=599)


---------------------------------------------------------------------------------------------------
[打印文章] [关闭本页] [返回顶部]
本网站部分资料转自网上,如有侵权请来信告明,我们会尽快删除  | 网站地图
Copyright @ 2007-2010 深圳单片机交流网.版权所有
网站创办者:詹长亮,周发辉,李林盛
网站支持:zcl843@163.com QQ:380476830 13723787271