智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4131|回复: 6
打印 上一主题 下一主题

[编程类] 求助:串口出现乱码

[复制链接]

0

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
威望
245
贡献
57
兑换币
28
注册时间
2009-7-7
在线时间
27 小时
跳转到指定楼层
1#
发表于 2009-9-17 14:39:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
  1. #include <hidef.h> /* common defines and macros */
  2. #include <mc9s12xdg128.h> /* derivative information */
  3. #pragma LINK_INFO DERIVATIVE "mc9s12xdg128"
  4. #include "main.h"
复制代码
  1. void SCI0_Init(void) {
  2. byte iSend;
  3. SCI0BD = (BUS_fr/16/9600);
  4. SCI0CR2 = 0x0C;
  5. SCI0CR2_RIE = 1;
  6. fram_num = 0;
  7. fram_start = 0;
  8. for(iSend=0;iSend<16;iSend++) {
  9. SendBuffer[iSend]=0;
  10. }
  11. }
  12. void SendData(unsigned char ucChar) {
  13. while(!(SCI0SR1&0x80));
  14. SCI0DRL=ucChar;
  15. while(!(SCI0SR1&0x40));
  16. }


  17. unsigned char ReceData(void) {
  18. unsigned char result,temp;
  19. temp = SCI0SR1;
  20. if((temp&0x20)>0)
  21. result=SCI0DRL;
  22. return result;
  23. }

  24. //**************************************************************//

  25. //************************SendCommand***************************//
  26. void SendCommand(void){
  27. byte iSend,csSend = 0;
  28. for(iSend=0;iSend<16;iSend++){
  29. SendData(ReceBuffer[iSend]);
  30. csSend += ReceBuffer[iSend];
  31. ReceBuffer[iSend]=0;
  32. }
  33. SendData(csSend);
  34. }

  35. //**************************************************************//

  36. //**************************string******************************//
  37. void Start(void) {
  38. word a=0;
  39. while(start[a]==ReceBuffer[a]) a++;
  40. if(ReceBuffer[8]==0x0d){
  41. a = 0;
  42. count = 0;
  43. sec = 0;
  44. min = 0;
  45. CRGINT = 0x80;
  46. }
  47. }

  48. void Stop(void) {
  49. word b=0;
  50. while(stop[b]==ReceBuffer[b])b++;
  51. if(ReceBuffer[3]==0x73){
  52. b = 0;
  53. PORTA = 0xFF;
  54. PORTE_PE2 = 0x1;
  55. PORTE_PE3 = 0x1;
  56. setPWM0(160,0);
  57. setPWM1(160,0);
  58. setPWM2(160,0);
  59. CRGINT = 0x00;
  60. }
  61. }

  62. void Standard(void) {
  63. word c=0;
  64. while(standard[c]==ReceBuffer[c])c++;
  65. if(ReceBuffer[11]==0x0d){
  66. c=0;
  67. PTJ_PTJ7=~PTJ_PTJ7;
  68. }
  69. }

  70. void Thinner(void) {
  71. word m=0;
  72. while(thinner[m]==ReceBuffer[m])m++;
  73. if(ReceBuffer[14]==0x0d){
  74. m = 0;
  75. PTJ_PTJ6=~PTJ_PTJ6;
  76. }
  77. }

  78. void Wash(void) {
  79. word n=0;
  80. while(wash[n]==ReceBuffer[n])n++;
  81. if(ReceBuffer[3]==0x77){
  82. n = 0;
  83. PTJ=~PTJ;
  84. }
  85. }


  86. //*************************SCI0_ISR*****************************//
  87. #pragma CODE_SEG __NEAR_SEG NON_BANKED

  88. interrupt void SCI0_ISR(void) {
  89. byte iRece,receData;
  90. receData = SCI0SR1;
  91. receData = SCI0DRL;
  92. ReceBuffer[fram_num++] = receData;

  93. if(fram_num == 1){
  94. if(ReceBuffer[0] != 0x26) fram_num = 0;
  95. }
  96. else if(fram_num == 2){
  97. if(ReceBuffer[1] != 0x30) fram_num = 0;
  98. }
  99. if(fram_num == 3){
  100. if(ReceBuffer[2] != 0x31) fram_num = 0;

  101. }
  102. for(iRece = 3;iRece < 16;iRece++){
  103. if(ReceBuffer[iRece] == 0x0d){
  104. fram_num = 0;
  105. Start();
  106. Stop();
  107. Standard();
  108. Thinner();
  109. Wash();
  110. }
  111. }
  112. }



  113. #pragma CODE_SEG DEFAULT

  114. void main(void) {
  115. /* put your own code here */
  116. DisableInterrupts;

  117. PLL_Init();
  118. RTI_Init();
  119. PWM_Init();
  120. /*IOC0_Init();*/
  121. PORT_Init();
  122. SCI0_Init();

  123. count=0x00;
  124. min=0x00;
  125. sec=0x00;

  126. p = 255;
  127. counter = 0;

  128. PTT = 0x0;
  129. DDRJ=0xff; /* PTB as output */
  130. PTJ=0x00; /* LEDs off */

  131. EnableInterrupts;

  132. for(;;) {
  133. ptControl();
  134. vtControl();
  135. SendCommand();
  136. }/* wait forever */
  137. /* please make sure that you never leave this function */
  138. }

复制代码

这部分程序是要识别字符串然后动作控制输出脚,发送部分是把接收来的回发 就出现乱码,而且中间还包括正确的字符串,这样我要的动作可以实现但是有时会不受控制,不知道为什么会有乱码的?我的总线频率是40.96M的 波特率9600,大家帮帮忙给点意见吧~~~已苦恼好久

9

主题

358

帖子

42

精华

金牌会员

Rank: 6Rank: 6

积分
1296
威望
80
贡献
506
兑换币
206
注册时间
2008-9-18
在线时间
355 小时
2#
发表于 2009-9-20 13:17:36 | 只看该作者
你粘贴的这程序太长了,大家很难看懂的。串口你就看关键的波特率啊,还有初始化之类的对不对!

补充内容 (2015-4-23 09:23):
真人游戏|足球篮球|时时彩| 六合投注| 网络赚钱去SO娱乐城:顶级信用,提现百分百即时到账SO.CC


回复

使用道具 举报

1

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
QQ
威望
244
贡献
84
兑换币
10
注册时间
2009-3-5
在线时间
9 小时
3#
发表于 2009-9-20 22:54:16 | 只看该作者
说一点,不知道是不是,你自己检查一下
40.96M的频率不知道能不能调得到9600的波特率,如果调不到的话就可能会出现前面数据正确,后面的不对了
回复

使用道具 举报

0

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
威望
245
贡献
57
兑换币
28
注册时间
2009-7-7
在线时间
27 小时
4#
 楼主| 发表于 2009-9-23 16:53:50 | 只看该作者
那40.96M该调多少的波特率合适呢 我调过别的也不行
回复

使用道具 举报

0

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
356
威望
245
贡献
57
兑换币
28
注册时间
2009-7-7
在线时间
27 小时
5#
 楼主| 发表于 2009-9-23 16:53:59 | 只看该作者
那40.96M该调多少的波特率合适呢 我调过别的也不行
回复

使用道具 举报

22

主题

242

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2785

优秀会员奖章

威望
534
贡献
1925
兑换币
20
注册时间
2009-10-12
在线时间
163 小时
6#
发表于 2010-2-5 12:47:38 | 只看该作者
程序一点注释都没有可不是什么好习惯,可读性太差
回复

使用道具 举报

2

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
威望
200
贡献
40
兑换币
0
注册时间
2010-2-3
在线时间
0 小时
7#
发表于 2010-2-5 17:44:46 | 只看该作者
我的串口发数据时前8个是正确的,接着会有三个是错误的,然后后面的8个又是对的,这是为什么?
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-22 05:33 , Processed in 0.158511 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表