zoukankan      html  css  js  c++  java
  • [转]MSP430另一种UART实现

      1 #include "msp430g2553.h"
      2 
      3 typedef unsigned char uchar;
      4 typedef unsigned int  uint;
      5 
      6 #define LED     BIT0
      7 #define TXD     BIT1                            // TXD on P1.1
      8 #define RXD    BIT2                             // RXD on P1.2
      9 #define POUT    P1OUT
     10 
     11 #define BITTIME_1b       13*4    //1bit宽度
     12 #define BITTIME_1b5      13*6    //1.5bit宽度
     13 
     14 uchar   bitcnt;
     15 uint    uart_buf;
     16 int    Send_flag;
     17 
     18 uchar  *str=" Hello EEWorld!  \r";
     19 
     20 void FaultRoutine(void)
     21  {
     22    while(1);                                 // 异常挂起
     23  }
     24 
     25 void ConfigClocks(void)
     26  {
     27  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
     28    FaultRoutine();                            // If calibration data is erased
     29                                              // run FaultRoutine()
     30   BCSCTL1 = CALBC1_1MHZ;                     // Set range
     31   DCOCTL = CALDCO_1MHZ;                      // Set DCO step + modulation
     32   BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO
     33   IFG1 &= ~OFIFG;                           // Clear OSCFault flag
     34   BCSCTL2 = 0;                               // MCLK = DCO = SMCLK
     35  }
     36 
     37 void ConfigPins(void)
     38  {
     39   P1DIR |= TXD+LED;
     40   P1DIR &= ~RXD;                    // P1.3 input, other outputs
     41   P1OUT |= TXD;                                  // clear output pins
     42 
     43  }
     44 
     45 
     46 //发送一个字节
     47 void send_char(uchar tchar)
     48 {
     49   TACTL = TACLR + TASSEL_2 + ID_3;              //选择SMCLK时钟;清TAR
     50   CCR0 = BITTIME_1b5;                    //crr0定时间隔为1bit时间宽度
     51   CCTL0 |= CCIE;                        //打开CCR0中断
     52   bitcnt = 10;                           //待发送的位数
     53   uart_buf = 0x0100;                     //8+N+1
     54   uart_buf |= tchar;                  //stop bit and start bit;
     55   uart_buf <<=1;
     56   Send_flag = 0;
     57   TACTL |= MC_1;                        //Start TA, UP mode.
     58   _BIS_SR(GIE);
     59   while(!Send_flag);                   //wait until send complete
     60   Send_flag = 1;
     61 }
     62 
     63 //发送一个字符串
     64 void send_String(uchar *tstr)
     65 {
     66   while(*tstr)
     67     send_char(*tstr++);
     68 }
     69 
     70 
     71 void send_IRQ(void)
     72 {
     73   if(bitcnt>0)
     74   {
     75     if(uart_buf & 0x01)
     76       POUT |= TXD;
     77     else
     78       POUT &= ~TXD;
     79     uart_buf >>= 1;
     80     bitcnt--;
     81   }
     82   else
     83   {
     84     TACTL &= ~MC_3;                    //Close the TA when a Byte send over.   ??
     85     CCTL0 &= ~CCIE;                    //关闭CCR0中断
     86     Send_flag = 1;
     87   }
     88 
     89 }
     90 
     91 
     92 
     93 void main( void )
     94 {
     95   // Stop watchdog timer to prevent time out reset
     96   uint i;
     97 
     98 
     99 
    100   WDTCTL = WDTPW + WDTHOLD;
    101   ConfigClocks();
    102   ConfigPins();
    103 
    104 
    105   while(1)
    106   {
    107    send_String(str);
    108 
    109    for(i=50000;i>0;i--);
    110    for(i=50000;i>0;i--);
    111    for(i=50000;i>0;i--);
    112    for(i=50000;i>0;i--);
    113    POUT ^= LED; // 翻转LED
    114   }
    115 }
    116 
    117 // Timer A0 interrupt service routine
    118 #pragma vector=TIMER0_A0_VECTOR
    119 __interrupt void Timer_A (void)
    120 {
    121 
    122 
    123    send_IRQ();
    124 }
  • 相关阅读:
    Fedora 12/Debian 以root登录图形界面
    贡献一个简单的日志类
    "没有 pthread_create 的手册页条目"解决办法
    OpenBSD 下架设vsftpd
    NetSnmp初步(一):让我们的程序提供snmp服务
    linux socket接收、发送小工具(支持tcp、udp包(组播)的发送接收)
    NetSnmp初步(二):发送Notification
    netbeans添加现有源文件时自动更新Makefile依赖关系
    Fedora Core12的防火墙会过滤掉部分IP数据包,在开发调试时建议关闭防火墙
    NetSnmp初步(三):接收控制命令:实现SNMP的SET命令
  • 原文地址:https://www.cnblogs.com/sky1991/p/2645566.html
Copyright © 2011-2022 走看看