2423|0

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430f5529 的UART模块485通讯问题 [复制链接]

我想问下我这程序有什么问题,为什么老是出错。我是想让程序每一秒发一组数据,receive_Data才4个数据,但是i==6才能发送出5个数据“0xf0 0xf1 0xf2 0xf3 0xfe”如果i==5的话又变成“0xf0 0xf1 0xf2 0xfe”了。。。用的MAX3485连接MPU,再转成RS232到电脑上的串口调试程序。如果我想接收和发送多个数据,我应该怎么配置寄存器?发送和接收多个数据是进一次中断还是进多个(数据的字节数)中断
  1. #include <msp430.h>
  2. #include "UCA0_UART.h"
  3. #include "TIMER_A0.h"

  4. void main()
  5. {
  6. WDTCTL = WDTPW + WDTHOLD;
  7. UCA0_Init();
  8. TIMERA0_Init();
  9. _EINT();

  10. while(1);

  11. }

  12. #include <msp430.h>
  13. #include "TIMER_A0.h"
  14. #include "UCA0_UART.h"


  15. /******************************
  16. 名 称:TIMERA0_Init
  17. 功 能:初始化TIMERA0寄存器操作
  18. 参 数:无
  19. 返 回:无
  20. ******************************/
  21. void TIMERA0_Init(void)
  22. {
  23. P8DIR |= BIT0;
  24. TA0CCR0 = 32768-1;
  25. TA0CTL = TASSEL_1 + MC_1 + TACLR + TAIE; // ACLK, contmode, clear TAR
  26. // enable interrupt
  27. }

  28. #pragma vector=TIMER0_A1_VECTOR
  29. __interrupt void TIMER0_A1_ISR(void)
  30. {
  31. switch(__even_in_range(TA0IV,14))
  32. {
  33. case 0: break; // No interrupt
  34. case 2: break; // CCR1 not used
  35. case 4: break; // CCR2 not used
  36. case 6: break; // reserved
  37. case 8: break; // reserved
  38. case 10: break; // reserved
  39. case 12: break; // reserved
  40. case 14: // overflow
  41. P8OUT ^= BIT0;
  42. RS485_T;
  43. UCA0IE |= UCTXIE;
  44. break;
  45. default: break;
  46. }
  47. }

  48. #include <msp430.h>
  49. #include "UCA0_UART.h"

  50. unsigned char receive_Data[4] = {0x00,0x00,0x00,0x00};
  51. unsigned char transmit_Data[4] = {0xf0,0xf1,0xf2,0xf3};

  52. unsigned char i = 0;

  53. /******************************
  54. 名 称:UCA0_Init
  55. 功 能:初始化UCA0寄存器操作,波特率9600,奇偶校验位无,数据位8位,停止位1位,
  56. 参 数:无
  57. 返 回:无
  58. ******************************/
  59. void UCA0_Init(void)
  60. {
  61. P3SEL = BIT3 + BIT4;
  62. UCA0CTL1 |= UCSWRST;
  63. UCA0CTL1 |= UCSSEL_2; // SMCLK = 1.048576MHz
  64. UCA0BR0 = 6; // 1.048576MHz 9600 N = 1.048576/(16*9600 )= 6
  65. UCA0BR1 = 0; // 1.048576MHz 9600
  66. UCA0MCTL |= UCBRS_0 + UCBRF_13 + UCOS16; // Modulation UCBRSx=1, UCBRFx=0
  67. // over sampling
  68. UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
  69. UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt


  70. RS485_OUT;
  71. RS485_R;

  72. }

  73. #pragma vector=USCI_A0_VECTOR
  74. __interrupt void USCI_A0_ISR(void)
  75. {
  76. switch(__even_in_range(UCA0IV,4))
  77. {
  78. case 0:break;
  79. case 2:
  80. case 4:
  81. while(UCA0IFG&UCTXIFG);

  82. TA0CTL &=~ TAIE;
  83. UCA0IE &=~ UCRXIE;
  84. UCA0TXBUF = transmit_Data[i++];
  85. if(i == 4)
  86. {
  87. i = 0;
  88. UCA0IFG &=~ UCTXIFG;
  89. UCA0IE &=~ UCTXIE;
  90. TA0CTL |= TAIE;
  91. RS485_R;
  92. return;
  93. }

  94. break;
  95. default: break;
  96. }
  97. }
复制代码


 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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