3458|2

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教下atmega126的485通讯端口设置 [复制链接]

max485的RO接PD2,DI接PD3,RE和DE接PD1,代码如下:

 

#define CRYSTAL2 14745600

#define BAUD3 9600                //485波特率采用9600bps
#define BAUD_SETTING3 (unsigned char)((unsigned long)CRYSTAL2/(16*(unsigned long)BAUD3)-1)
#define BAUD_H3 (unsigned char)(BAUD_SETTING3>>8)
#define BAUD_L3 (unsigned char)BAUD_SETTING3

 

unsigned char inbox[80]; //收件

unsigned char outbox[80]; //发件

 

void uart1_init(void)
{
  UCSR1B=0x00;
  UCSR1A=0x00;   
 UCSR1C=0x06; //无校验,8位数据位,1位停止位
 UBRR1L= BAUD_L3;
 UBRR1H= BAUD_H3;
 UCSR1B=0x98; //发送接收使能,接收中断使能

}

 

void usart1_out(unsigned char n)
{
 unsigned char i=0;
  DDRD&=0XFB; //PD2 置为输入,PD3置为输出

  DDRD|=0X08;
 DDRD|=(1<<1);   //PD1输出
 PORTD|=(1<<1); //PD1输出高电平
 

 while(i<n )//一共发送amount个数据
  {
   while(!(UCSR1A&0x20));
   UDR1=outbox[i++];  
   delay_nus(1000);
  }   
  PORTD&=0xfd;//PD1输出低电平
}

 

#pragma interrupt_handler uart1_rx_isr: 31
void uart1_rx_isr(void)            //接收中断

  while(!(UCSR1A & 0x80));

  inbox[cnt++]=UDR1;

}

 

void main(void){

   uart1_init();

   outbox[0]=0xf0;
    outbox[1]=0xf0;
    outbox[2]=0xa1;
    outbox[3]=0xb2;
    usart1_out(4);

}

//atmega单片机接了个485的角度传感器,命令时f0f0,地址是a1b2,这段代码运行后收不到传感器的数据,因为没有测试调试工具,不知道错在哪里,请高手们指点下。

最新回复

楼主,你用两台单片机对着测一下呀。  详情 回复 发表于 2012-5-10 20:52
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
补充下,上面只是部分摘出来的关键代码,其他的太多就不贴了,免得眼花。
 
 

回复

132

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
楼主,你用两台单片机对着测一下呀。
 
个人签名无线网络摄像机 ,高清网络摄像机,网络视频监控
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表