[AVR单片机] 485通讯误码率高

[复制链接]
5346|7
 楼主| xmrforever 发表于 2012-10-11 13:29 | 显示全部楼层 |阅读模式
  1. //UART1 initialize
  2. // desired baud rate:9600
  3. // actual baud rate:9615 (0.2%)
  4. // char size: 8 bit
  5. // parity: Disabled
  6. void uart1_init(void)
  7. {
  8. UCSR1B = 0x00; //disable while setting baud rate
  9. UCSR1A = 0x00;
  10. UCSR1C = 0x06;
  11. UBRR1L = 0x33; //set baud rate lo
  12. UBRR1H = 0x00; //set baud rate hi
  13. UCSR1B = 0x98;
  14. Rx_485_on;
  15. }

  16. #pragma interrupt_handler uart1_rx_isr:31
  17. void uart1_rx_isr(void)
  18. {
  19. //uart has received a character in UDR
  20. Usart1_RX_Buff = UDR1 ;
  21. if (Usart1_RX_Buff=='1')
  22. {
  23. Usart0_num = (Usart0_num + 1)%2;
  24. if(Usart0_num==1)
  25. {
  26. Led_on;
  27. }
  28. else
  29. {
  30. Led_off;
  31. }
  32. }
  33. }

  34. void USART1_Transmit(uchar data)
  35. {
  36. //UCSR1B = 0x90;
  37. Tx_485_on;
  38. delay(20);
  39. //UCSR1B = 0x98;
  40. //等待数据寄存器为空
  41. while ( !( UCSR1A & (1<<UDRE1)))
  42. ;
  43. //数据放入缓存器
  44. UDR1 = data;
  45. //UCSR1B = 0x88;
  46. Rx_485_on;
  47. delay(20);
  48. //UCSR1B = 0x98;
  49. }

错误率很高,请问是什么问题?
airwill 发表于 2012-10-11 21:29 | 显示全部楼层
错误率很高, 通常有两个可能.
1. 波特率不匹配, 或者误差比较大, 也或者振荡器稳定性不好
2. 外界干扰和噪声,
 楼主| xmrforever 发表于 2012-10-15 12:08 | 显示全部楼层
1.波特率都是设置的9600,232通讯正常的
2.我用的普通的导线搅在一起,长度30cm左右,应该没有干扰
2# airwill
 楼主| xmrforever 发表于 2012-10-15 15:17 | 显示全部楼层
  1. void USART1_Transmit(uchar data)

  2. {

  3. Tx_485_on;

  4. //等待数据寄存器为空

  5. while ( !( UCSR1A & (1<<UDRE1)))

  6. ;

  7. //数据放入缓存器

  8. UDR1 = data;

  9. Rx_485_on;
  10. }
为什么把UDR1=DATA;后面的延迟去掉就正常了呢,没有无码了,请问是何因啊?
joyme 发表于 2012-10-16 18:06 | 显示全部楼层
如果发送方式随机发送的话(建议通过协议控制发送接收,即要检测到485在空闲时才发送数据),半双工的情况下TX_485_ON时无法接收发送的数据,所以这段时间发送的数据会丢失,如果这个时间刚好将发送的数据中途截断,就会产生误码。
 楼主| xmrforever 发表于 2012-10-17 11:54 | 显示全部楼层
如果发送方式随机发送的话(建议通过协议控制发送接收,即要检测到485在空闲时才发送数据),半双工的情况下TX_485_ON时无法接收发送的数据,所以这段时间发送的数据会丢失,如果这个时间刚好将发送的数据中途截断, ...
joyme 发表于 2012-10-16 18:06

我只是把发送后的延迟去掉就不会误码了,并没有发送接收同时进行
joyme 发表于 2012-10-18 10:06 | 显示全部楼层
你还是没有理解,发送方不知道接收方当前状态,你延时了,发送方很容易在延时过程中发送数据了,这样不就会误码吗
电#工 发表于 2015-8-15 09:19 | 显示全部楼层
joyme 发表于 2012-10-18 10:06
你还是没有理解,发送方不知道接收方当前状态,你延时了,发送方很容易在延时过程中发送数据了,这样不就会 ...

请问,你的意思是不是延时过程中会误发送,就是说虽然我没发送,但是处于发送状态就会发乱码呀?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:忍一忍就过去了

27

主题

177

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部