搜索
bottom↓
回复: 2

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

[复制链接]

出0入55汤圆

发表于 2012-5-8 16:47:20 | 显示全部楼层 |阅读模式
用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. */
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入17汤圆

发表于 2012-5-8 16:55:01 | 显示全部楼层
你不会用它的配置向导吗?

出0入55汤圆

 楼主| 发表于 2012-5-8 17:15:53 | 显示全部楼层
DOER 发表于 2012-5-8 16:55
你不会用它的配置向导吗?

还真不会用。
看datasheet,320和340其他的都差不多。可是就是波特率那里不一样。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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