博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]MSP430另一种UART实现
阅读量:5128 次
发布时间:2019-06-13

本文共 3112 字,大约阅读时间需要 10 分钟。

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; // 翻转LED114   }115 }116 117 // Timer A0 interrupt service routine118 #pragma vector=TIMER0_A0_VECTOR119 __interrupt void Timer_A (void)120 {121 122 123    send_IRQ();124 }

转载于:https://www.cnblogs.com/sky1991/archive/2012/08/18/2645566.html

你可能感兴趣的文章
设计模式简介
查看>>
hash一致性
查看>>
Unity3D热更新
查看>>
2D多边形碰撞器优化器
查看>>
[Java多线程]-并发,并行,synchonrized同步的用法
查看>>
前端回答从输入URL到页面展示都经历了些什么
查看>>
用SAXReader解析xml文档【转】
查看>>
【转】父类引用指向子类对象
查看>>
通过winrm使用powershell远程管理服务器
查看>>
python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作
查看>>
linux的用户及权限管理详细说明
查看>>
类的变量初始化是直接使用初始化器还是放在构造函数中?
查看>>
微信推送短消息
查看>>
观《我想吃掉你的胰脏》有感
查看>>
关于CefSharp的坎坷之路
查看>>
ubuntu文件乱码
查看>>
bash学习:登陆、非登陆shell,交互、非交互shell,以及它们的startup文件
查看>>
[题目] JavaScript 练习题目(二) [20-40]
查看>>
SpringBoot非官方教程 | 第六篇:springboot整合mybatis
查看>>
alibaba之Nacos
查看>>