用C8051F320怎么样初始化才能使串口波特率为9600?

2020-02-05 09:27发布

用C8051F320怎么样初始化才能使串口波特率为9600?
下面代码,串口输出的波特率貌似不对。错在哪?(感觉不对是因为用同样的设置,F340串口输出的波形宽度大概是F320的1/4)
  1. #include"c8051F320.h"
  2. #include "RS485.h"

  3. sbit RELAY0 = P0^2;
  4. sbit RELAY1 = P0^3;
  5. sbit RELAY2 = P0^7;

  6. /*
  7. ================================================================================
  8. Function name : Clock_Init( )
  9. Description   : Initialize the system and USB clock
  10. Input         : None
  11. Output        : None
  12. ================================================================================
  13. */
  14. void Clock_Init( void )
  15. {
  16.         unsigned int i;
  17.         if( ( CLKMUL & ( 1<<5 ) ) ) return;
  18.         CLKMUL = 0;
  19.         CLKMUL |= ( 1<<7 );
  20.         for( i = 0; i < 250; i ++ );
  21.         CLKMUL |= 0xC0;
  22.         for( i = 0; i < 250; i ++ );
  23.         while( !( CLKMUL & ( 1<<5 ) ) );
  24.         CLKSEL = ( 2<<0 );
  25. }

  26. /*
  27. ================================================================================
  28. Function name : GPIO_Init( )
  29. Description   : Initial the GPIOs and the crossbar
  30. Input         : None
  31. Output        : None
  32. ================================================================================
  33. */
  34. void GPIO_Init( void )
  35. {
  36.         P0MDOUT |= 0xdc;
  37.         P1MDOUT |= 0x00;
  38.         P2MDOUT |= 0xff;
  39.         XBR1 |= ( 1<<6 );
  40.         XBR0 |= ( 1<<0 );
  41. }

  42. /*
  43. ================================================================================
  44. * Name        : SystermInit( )
  45. * Description : Initialize the Systerm
  46. * Input       : None
  47. * Output      : None
  48. * Note        : None
  49. ================================================================================
  50. */
  51. void SystermInit(void)
  52. {
  53.         RELAY0 = 0;
  54.         RELAY1 = 0;
  55.         RELAY2 = 0;

  56.         UART0_Init();

  57.         UART_SendStatue(0xa0,0x55);
  58. }

  59. /*
  60. ================================================================================
  61. =================================The main entry=================================
  62. ================================================================================
  63. */

  64. int main( void )
  65. {
  66.     GPIO_Init();
  67.         Clock_Init();                   //Config the clock
  68.         SystermInit();

  69.         while( 1 )
  70.         {
  71.                 P2 = ~P2;
  72.         }
  73.         return 0;
  74. }
  75. /*
  76. ================================================================================
  77. ====================================End of file=================================
  78. ================================================================================
  79. */
复制代码

  1. #include "C8051F320.h"
  2. #include "RS485.h"


  3. /*
  4. ================================================================================
  5. * Name        : Timer1_Init( )
  6. * Description : Initialize the timer1 for baudrate
  7. * Input       : None
  8. * Output      : None
  9. * Note        : None
  10. ================================================================================
  11. *///9600
  12. void Timer1_Init( void )
  13. {
  14.     TH1 = 0x30;
  15.     TL1 = 0x30;
  16.     TCON &= 0x3f;
  17.     TMOD &= 0x0F;
  18.     TMOD |= ( 2<<4 );
  19.     CKCON |= 0x00 | ( 0<<3 );
  20.         TCON |= ( 1<<6 );
  21. }
  22. /*
  23. ================================================================================
  24. * Name        : UART0_Init( )
  25. * Description : Initialize the UART0, baudrate
  26. * Input       : None
  27. * Output      : None
  28. * Note        : None
  29. ================================================================================
  30. */
  31. void UART0_Init( void )
  32. {
  33.         RD485 = 1;
  34.     SCON0 = (1<<4)|(1<<5)|(1<<7); //(SCON0):S0MODE - MCE0 REN0 TB80 RB80 TI0 RI0
  35.         IE |= ( 1<<4 );
  36.         P0MDOUT |= ( 1<<4 );
  37.     Timer1_Init( );
  38. }

  39. void UART_SendChar(unsigned char ch)
  40. {
  41.         SBUF0 = ch;
  42.         while(!TI0);
  43.         TI0 = 0;
  44. }

  45. void UART_SendStatue(unsigned char addr,unsigned char dat)
  46. {
  47.         //Send Address
  48.         RD485 = 0;
  49.         TB80 = 1;
  50.         UART_SendChar(addr);
  51.         //Send Data
  52.         TB80 = 0;
  53.         UART_SendChar(dat);
  54.         RD485 = 1;
  55. }
  56. /*
  57. void UART0_ISR( void ) interrupt 4
  58. {
  59.     unsigned char i;
  60.     if( SCON0 & ( 1<<1 ) )
  61.     {
  62.         //TX ok
  63.         SCON0 &= ~( 1<<1 );

  64.     }
  65.     else if( SCON0 & ( 1<<0 ) )
  66.     {
  67.         //RX ok
  68.         SCON0 &= ~( 1<<0 );
  69.         i = SBUF0;
  70.                 SBUF0 = i;
  71.     }
  72. }
  73. */
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。