2648|2

219

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

RS485通讯问题 [复制链接]

我想用485做两单片机间的通讯,程序运行不通,诚有力者指点一下,谢谢!(RB1为485收发转换端口)代码如下:
接收代码:
#include
__CONFIG(0x3531);
#define nop  asm("NOP")  
unsigned char flag=0;
unsigned char  reveive[8];
//=========================延时1MS函数=======================================
void delay(unsigned int n)
{
   unsigned int i,j;
   for(i=0;i       for(j=0;j<110;j++);
}

//==========================串口设置===============================
void instuart(void)  
{
     TRISB = 0xC0;
     TRISC = 0x80;
     TXSTA=0x04;    //B100  SYNC=0;BRGH=1 异步高速方式传输8bit数据
         RCSTA=0x80;    //SPEN=1;允许同步串行口工
         SPBRG=0x25;    //将传输的波特率设置为9600
         PIR1=0x00;
     RCIF=0;
     PIE1=PIE1|0x20;  
     CREN=1;        //允许接收数据
     TXEN=1;        //允许发送数据
}
//=======================485接收中断=============================
void interrupt LOW_ISR()
{
   unsigned int i=0;
   RCIF=0;
   reveive=RCREG;
   i++;
   if(i==8)
   {
     flag=1;    //可以放数据的解析函数在里面
   }

}

//=======================接收主函数===================================
main()
{
  instuart();
  RB1=1;
  INTCON=0xC0;
  while(1)
   {
     if(flag==1)
      {
         flag=0;
         nop;
         nop;
      }
   }
}
发送代码:
#include
__CONFIG(0x3531);
#define nop  asm("NOP")
bank1 unsigned char txsubf[8]={0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04}; //串口发送缓存,可以改变缓存个数
//=========================延时1MS函数=======================================
void delay(unsigned int n)
{
   unsigned int i,j;
   for(i=0;i       for(j=0;j<110;j++);
}
//==========================串口设置===============================
void instuart(void)  
{
     TRISB = 0xc0;
     TRISC = 0x80;
     TXSTA=0x04;    //B100  SYNC=0;BRGH=1 异步高速方式传输8bit数据
         RCSTA=0x80;    //SPEN=1;允许同步串行口工
         SPBRG=0x25;    //将传输的波特率设置为9600
         PIR1=0x00;
     RCIF=0;
     PIE1=PIE1|0x20;  
     CREN=1;        //允许接收数据
     TXEN=1;        //允许发送数据
}

//=======================发送主程序===============================
void main()
{
    unsigned int i;
    instuart();   //串口设置
    RB1=0;               //485芯片选择
    INTCON=INTCON|0x00;  //不允许总中断和外围中断
    while(1)
     {
       for(i=0;i<8;i++)
         {
            TXREG=txsubf;
            delay(1);
         }
     }
}
望大家指点,谢谢!
此帖出自单片机论坛

最新回复

怎么会把技术文章发在聊聊笑笑板块呢!  详情 回复 发表于 2011-7-6 14:47
点赞 关注
 

回复
举报

219

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
怎么什么都沉啊?真郁闷
此帖出自单片机论坛
 
 

回复

6066

帖子

90

TA的资源

裸片初长成(初级)

板凳
 
原帖由 烟雨 于 2011-7-6 14:45 发表 怎么什么都沉啊?真郁闷


怎么会把技术文章发在聊聊笑笑板块呢!
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表