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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6532|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

msp430單片機(jī)定時(shí)器模擬串口

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

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

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

  5. static uchar  RXData0;  //用來(lái)存儲(chǔ)接收的8位數(shù)據(jù)
  6. static uchar   RXBitCnt0;//接收數(shù)據(jù)位數(shù)
  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. //----------發(fā)送一個(gè)字節(jié)------------------------------------------//
  36. void send_char(uchar tchar)
  37. {
  38.   TACTL = TACLR + TASSEL_2; //清零計(jì)數(shù)器 選擇SMCLK時(shí)鐘
  39.   CCR0 = BITTIME_1b;   //crr0定時(shí)間隔為1bit時(shí)間寬度
  40.   CCTL0 |= CCIE;      //打開CCR0中斷
  41.   bitcnt = 10;     //待發(fā)送的位數(shù),1位開始位,8位數(shù)據(jù)位,1位停止位
  42.   uart_buf = 0x0100;   //stop bit 停止位
  43.   uart_buf |= tchar;  //data bit 數(shù)據(jù)位
  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;//初始化接收數(shù)據(jù)計(jì)數(shù)器
  55.   TACTL=TASSEL_2+MC_2+TACLR;//SMCLK  連續(xù)記數(shù)模式  清零計(jì)數(shù)器
  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) //串口發(fā)送程序處理過(guò)程,位操作
  63. {
  64.    if(bitcnt>0)
  65.   {
  66.     if(uart_buf & 0x01)
  67.       POUT |= TXD;//發(fā)送數(shù)據(jù)1
  68.     else
  69.       POUT &= ~TXD;//發(fā)送數(shù)據(jù)0
  70.     uart_buf >>= 1;
  71.     bitcnt--;
  72.   }
  73.    else
  74.   {
  75.     POUT|=TXD;//默認(rèn)狀態(tài)置高
  76.     TACTL &= ~MC_3; //Close the TA when a Byte send over. 00 停止模式
  77.     CCTL0 &= ~CCIE; //關(guān)閉CCR0中斷
  78.     Send_flag = 1;
  79.   }
  80. }
  81. //---------------------------------------------------------------------//

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

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


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

使用道具 舉報(bào)

沙發(fā)
ID:117823 發(fā)表于 2016-6-4 02:08 來(lái)自手機(jī) | 只看該作者
定時(shí)器模擬串口可行,但波特率要設(shè)置低點(diǎn)穩(wěn)定些
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品 | 九九久久久久久 | 亚洲精品亚洲人成人网 | 91久久北条麻妃一区二区三区 | 在线观看黄视频 | www.4hu影院 | 国产乱码精品一区二三赶尸艳谈 | www国产亚洲精品久久网站 | 日韩视频精品在线 | 成人久久久| 91综合在线视频 | 亚洲精品亚洲人成人网 | 精品久久久久一区二区国产 | 天堂资源视频 | 成人欧美一区二区三区在线播放 | av资源在线看 | 91免费电影| 一级片在线观看视频 | 性做久久久久久免费观看欧美 | 狠狠干天天干 | 大学生a级毛片免费视频 | 毛片免费在线 | 精品免费国产视频 | 欧美日韩黄色一级片 | 久久久久久久一区二区三区 | 日韩精品一区二区在线 | 美美女高清毛片视频免费观看 | 久久精品久久久久久 | 国内精品成人 | 国产99久久精品一区二区永久免费 | 成人av高清 | 欧美精品一区在线发布 | 国内精品久久影院 | 色婷婷综合网 | 最新一级毛片 | 国产一区二 | 国产美女自拍视频 | 日本成人毛片 | 岛国一区 | 亚洲视频www| 久久久久久久久久久一区二区 |