智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1720|回复: 3
打印 上一主题 下一主题

mc9s12的sci部分

[复制链接]

2

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
101
威望
53
贡献
26
兑换币
30
注册时间
2014-1-21
在线时间
11 小时
跳转到指定楼层
1#
发表于 2014-1-21 15:49:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我刚开始写sci部分是用的mc9s12dg128。写完过后可以发送数据,但是不能接收数据。请问是为什么,我把代码贴出来吧。我发现里边rdrf一旦进入中断后就自动变为0,而且不管我怎么赋值,也不能改变sci0sr1_rdrf的值,请问谁知道是为什么呢?
  1. #include <hidef.h>      /* common defines and macros */
  2. #include "headers/uart.h"
  3. void main(void) {
  4.   UART_s8Init(Duart0, 9600);
  5.   
  6.         EnableInterrupts;

  7.   UART_s8SendByte( Duart0, 2 );
  8.    
  9.   for(;;) {
  10.   
  11.     _FEED_COP(); /* feeds the dog */
  12.    
  13.   } /* loop forever */
  14.   /* please make sure that you never leave main */
  15. }
复制代码
  1. #include "headers\uart.h"
  2. #include <mc9s12dg128.h>
  3. #pragma LINK_INFO DERIVATIVE "mc9s12dg128"

  4. #if (Duart_UART0_used)
  5. volatile static U8 u8Uart0_RxBuffer[Duart_BUFFER_SIZE_RX];
  6. volatile static U8 u8Uart0_RxB_indexin=0;
  7. volatile static U8 u8Uart0_RxB_indexout=0;
  8. volatile static U8 u8Rx_0_Error=0;
  9. #endif

  10. S8 UART_s8Init( U8 UART_Id, U32 baudrate)
  11. {
  12.         U16 ubrr_value=0;
  13. #if F_UART==8000000
  14.          switch( baudrate )
  15.          { case   2400 : ubrr_value =   207; break;
  16.            case   4800 : ubrr_value = 103; break;
  17.            case   9600 : ubrr_value =  52; break;
  18.            case  14400 : ubrr_value =  34; break;
  19.            case  19200 : ubrr_value =  25; break;
  20.            case  28800 : ubrr_value =  16; break;
  21.            case  38400 : ubrr_value =  12; break;
  22.            case  57600 : ubrr_value =   8; break;
  23.            case  76800 : ubrr_value =   6; break;
  24.            case 115200 : ubrr_value =   3; break;
  25.            case 230400 : ubrr_value =   1; break;
  26.            case 250000 : ubrr_value =   1; break;
  27.            case 500000 : ubrr_value =   0; break;
  28.            default     : return( -1 );
  29.          }
  30.         #else
  31.                 #error "F_UART non reconnu ou non defini !"
  32.   #endif
  33.                
  34. #if (Duart_UART0_used)
  35.                 if(UART_Id==Duart0)
  36.                 {
  37.                   SCI0BDH=(ubrr_value>>8) & 0xFF;
  38.       SCI0BDL=ubrr_value& 0xFF;   
  39.       SCI0CR1=0x00; // SCICR1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0
  40.       SCI0CR2=0x2C;         // enable tx et rx interrupts
  41.                 }
  42. #endif
  43.         return(0);
  44. }

  45. S8 UART_s8GetByte( U8 UART_Id )
  46. {
  47. #if (Duart_UART0_used)
  48.      if(UART_Id==Duart0)
  49.      {
  50.         if(u8Rx_0_Error==1)
  51.        {
  52.         u8Rx_0_Error=0;
  53.         return(-1); // Err Rx
  54.         }else
  55.        {
  56.         while(SCI1SR1_RDRF==0) ; //=while(!SCI1SR1_RDRF); waite until le data arrive , rdrf!=1
  57.         SCI1SR1_RDRF=1;
  58.         return SCI1DRL;
  59.         }
  60.     }
  61. #endif
  62. }
复制代码


回复

使用道具 举报

2

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
101
威望
53
贡献
26
兑换币
30
注册时间
2014-1-21
在线时间
11 小时
2#
 楼主| 发表于 2014-1-21 18:25:55 | 只看该作者
没有人回复吗,自己顶一下,任何可能的想法都好,我真的卡了很久了
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
101
威望
53
贡献
26
兑换币
30
注册时间
2014-1-21
在线时间
11 小时
3#
 楼主| 发表于 2014-1-22 15:01:53 | 只看该作者
大家都没有任何想法吗
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

注册会员

Rank: 2

积分
101
威望
53
贡献
26
兑换币
30
注册时间
2014-1-21
在线时间
11 小时
4#
 楼主| 发表于 2014-1-22 17:11:28 | 只看该作者
好吧,我已经搞定了……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 09:58 , Processed in 0.039573 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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