久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6555|回復: 2
打印 上一主題 下一主題
收起左側

msp430單片機定時器模擬串口

[復制鏈接]
跳轉到指定樓層
樓主
ID:110653 發表于 2016-3-30 19:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
     不知道怎么的,我的開發板沒有定串口,所以只好想法子看怎么才能實現定時器的功能,網上一搜還真的可以,所以分享給大家。我用的是msp430g2231.

部分源碼預覽(完整版本請下載附件)
  1. #include <msp430G2231.h>
  2. #include "uart.h"

  3. static uchar   bitcnt=0;
  4. static uint   uart_buf;

  5. static uchar  RXData0;  //用來存儲接收的8位數據
  6. static uchar   RXBitCnt0;//接收數據位數
  7. uchar  rx_sign=0;

  8. volatile int Send_flag=0;

  9. void FaultRoutine(void)
  10. {
  11.    while(1);// 異常掛起
  12. }
  13. void ConfigClocks()
  14. {
  15.    uint i;
  16.   for(i = 0; i < 0xFFFF; i++){};
  17.   _BIS_SR(OSCOFF);
  18.   if(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0xff)
  19.   {
  20.     while(1);
  21.   }
  22.   BCSCTL1 = CALBC1_1MHZ;// Set range
  23.   DCOCTL = CALDCO_1MHZ;  // Set DCO step + modulation
  24.   BCSCTL2 |=SELM_0+DIVS_0+DIVM_0;;              // MCLK = DCO = SMCLK=1MHZ         
  25. }
  26. void ConfigPins()
  27. {
  28.   P1DIR |= TXD+LED+BIT6;
  29.   P1SEL |=RXD;
  30.   P1DIR &= ~RXD;                                        // P1.2 input, other outputs
  31.   
  32.   P1OUT |= TXD;                                                      // clear output pins
  33.   P1OUT &=~LED;
  34. }

  35. //----------發送一個字節------------------------------------------//
  36. void send_char(uchar tchar)
  37. {
  38.   TACTL = TACLR + TASSEL_2; //清零計數器 選擇SMCLK時鐘
  39.   CCR0 = BITTIME_1b;   //crr0定時間隔為1bit時間寬度
  40.   CCTL0 |= CCIE;      //打開CCR0中斷
  41.   bitcnt = 10;     //待發送的位數,1位開始位,8位數據位,1位停止位
  42.   uart_buf = 0x0100;   //stop bit 停止位
  43.   uart_buf |= tchar;  //data bit 數據位
  44.   uart_buf <<=1;//start bit.開始位
  45.   Send_flag = 0;
  46.   TACTL |= MC_1; //Start TA, Timer A mode control: 1 - Up to CCR0
  47.   _BIS_SR(GIE);
  48.   while(!Send_flag); //wait until send complete
  49.   Send_flag = 1;
  50. }
  51. //---------------------------------------------------------------------//

  52. void RXReady(void)
  53. {
  54. // RXBitCnt0=0x08;//初始化接收數據計數器
  55.   TACTL=TASSEL_2+MC_2+TACLR;//SMCLK  連續記數模式  清零計數器
  56.   TACCTL1=CM_2+CAP+SCS+CCIE+CCIS_0;
  57.   //下降沿捕獲  同步捕獲源  捕獲模式  捕獲中斷使能  捕獲輸入為CCI1A
  58.   _EINT();
  59. }

  60. // Timer A0 interrupt service routine
  61. #pragma vector=TIMERA0_VECTOR
  62. __interrupt void Timer_A0 (void) //串口發送程序處理過程,位操作
  63. {
  64.    if(bitcnt>0)
  65.   {
  66.     if(uart_buf & 0x01)
  67.       POUT |= TXD;//發送數據1
  68.     else
  69.       POUT &= ~TXD;//發送數據0
  70.     uart_buf >>= 1;
  71.     bitcnt--;
  72.   }
  73.    else
  74.   {
  75.     POUT|=TXD;//默認狀態置高
  76.     TACTL &= ~MC_3; //Close the TA when a Byte send over. 00 停止模式
  77.     CCTL0 &= ~CCIE; //關閉CCR0中斷
  78.     Send_flag = 1;
  79.   }
  80. }
  81. //---------------------------------------------------------------------//

  82. #pragma vector=TIMERA1_VECTOR
  83. __interrupt void Timer_A1 (void)  //接收串口數據處理過程,利用串口協議的時間間隔來進行。
  84. {
  85.                P1OUT ^= LED;
  86.                TACCR1+=BITTIME_1b;//增加一位定時間隔
  87.               if(TACCTL1&CAP) //判斷是否為捕獲模式
  88.              {
  89.                   RXBitCnt0=0;
  90.               }
  91.              switch(RXBitCnt0)
  92.              {
  93.                 case 0:   //為捕獲模式
  94.                           RXData0=0;//清空緩沖區
  95.                           TACCR1+=BITTIME_1b5;
  96.                           TACCTL1&=~CAP;//改為比較模式
  97.                           RXBitCnt0++;
  98.                           break;   
  99.                 case 9:  //比較模式改為捕獲模式
  100.                           TACCTL1|=CAP;
  101.                           rx_sign=1; //作為接收完畢的信號
  102.                           break;
  103.                 default://1~8 有效數據位
  104.                       RXData0=RXData0>>1;//右移一位,等待下一個數據進來
  105.                       if(TACCTL1&SCCI)RXData0|=0x80;//輸入為1
  106.                       RXBitCnt0++;
  107.                       break;
  108.                }
  109. }
復制代碼

全部源碼下載:
msp430G2231_uart.rar (45.71 KB, 下載次數: 53)
msp430g2452.pdf (266.87 KB, 下載次數: 22)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:117823 發表于 2016-6-4 02:08 來自手機 | 只看該作者
定時器模擬串口可行,但波特率要設置低點穩定些
回復

使用道具 舉報

板凳
ID:166714 發表于 2017-2-26 13:09 | 只看該作者
非常感謝,但是我怎么下載不了啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91在线中文字幕 | 久久久av| 久久天天躁狠狠躁夜夜躁2014 | 三级成人在线观看 | 精品日韩 | 在线观看av网站 | 亚洲精彩视频在线观看 | 天天夜碰日日摸日日澡 | 亚洲精品一区二三区不卡 | 羞羞色视频 | 自拍视频网站 | 超碰97人人人人人蜜桃 | 国产婷婷精品av在线 | 国产在线观看一区二区三区 | 中文字幕一区二区三区日韩精品 | 亚洲高清在线 | 亚洲性视频 | www.青青草 | 精品国产99| 亚洲国产精品久久久久秋霞不卡 | 日韩在线欧美 | 免费观看成人鲁鲁鲁鲁鲁视频 | 久久国产精品精品 | 日本高清中文字幕 | 欧美日韩精选 | 亚洲一区二区三区免费在线 | 性大毛片视频 | 欧美一级在线观看 | 97日韩精品 | 日产久久 | 国产探花在线精品一区二区 | www..99re| 亚洲欧美精品国产一级在线 | 久草在线视频中文 | 国产在线中文字幕 | 日本视频中文字幕 | 国产精品99一区二区 | 人人做人人澡人人爽欧美 | 亚洲欧美在线视频 | 成人免费黄色片 | 91麻豆精品国产91久久久久久 |