欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
msp430單片機定時器模擬串口
[打印本頁]
作者:
hubaba
時間:
2016-3-30 19:00
標題:
msp430單片機定時器模擬串口
不知道怎么的,我的開發板沒有定串口,所以只好想法子看怎么才能實現定時器的功能,網上一搜還真的可以,所以分享給大家。我用的是msp430g2231.
部分源碼預覽(完整版本請下載附件)
#include <msp430G2231.h>
#include "uart.h"
static uchar bitcnt=0;
static uint uart_buf;
static uchar RXData0; //用來存儲接收的8位數據
static uchar RXBitCnt0;//接收數據位數
uchar rx_sign=0;
volatile int Send_flag=0;
void FaultRoutine(void)
{
while(1);// 異常掛起
}
void ConfigClocks()
{
uint i;
for(i = 0; i < 0xFFFF; i++){};
_BIS_SR(OSCOFF);
if(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0xff)
{
while(1);
}
BCSCTL1 = CALBC1_1MHZ;// Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
BCSCTL2 |=SELM_0+DIVS_0+DIVM_0;; // MCLK = DCO = SMCLK=1MHZ
}
void ConfigPins()
{
P1DIR |= TXD+LED+BIT6;
P1SEL |=RXD;
P1DIR &= ~RXD; // P1.2 input, other outputs
P1OUT |= TXD; // clear output pins
P1OUT &=~LED;
}
//----------發送一個字節------------------------------------------//
void send_char(uchar tchar)
{
TACTL = TACLR + TASSEL_2; //清零計數器 選擇SMCLK時鐘
CCR0 = BITTIME_1b; //crr0定時間隔為1bit時間寬度
CCTL0 |= CCIE; //打開CCR0中斷
bitcnt = 10; //待發送的位數,1位開始位,8位數據位,1位停止位
uart_buf = 0x0100; //stop bit 停止位
uart_buf |= tchar; //data bit 數據位
uart_buf <<=1;//start bit.開始位
Send_flag = 0;
TACTL |= MC_1; //Start TA, Timer A mode control: 1 - Up to CCR0
_BIS_SR(GIE);
while(!Send_flag); //wait until send complete
Send_flag = 1;
}
//---------------------------------------------------------------------//
void RXReady(void)
{
// RXBitCnt0=0x08;//初始化接收數據計數器
TACTL=TASSEL_2+MC_2+TACLR;//SMCLK 連續記數模式 清零計數器
TACCTL1=CM_2+CAP+SCS+CCIE+CCIS_0;
//下降沿捕獲 同步捕獲源 捕獲模式 捕獲中斷使能 捕獲輸入為CCI1A
_EINT();
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void) //串口發送程序處理過程,位操作
{
if(bitcnt>0)
{
if(uart_buf & 0x01)
POUT |= TXD;//發送數據1
else
POUT &= ~TXD;//發送數據0
uart_buf >>= 1;
bitcnt--;
}
else
{
POUT|=TXD;//默認狀態置高
TACTL &= ~MC_3; //Close the TA when a Byte send over. 00 停止模式
CCTL0 &= ~CCIE; //關閉CCR0中斷
Send_flag = 1;
}
}
//---------------------------------------------------------------------//
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1 (void) //接收串口數據處理過程,利用串口協議的時間間隔來進行。
{
P1OUT ^= LED;
TACCR1+=BITTIME_1b;//增加一位定時間隔
if(TACCTL1&CAP) //判斷是否為捕獲模式
{
RXBitCnt0=0;
}
switch(RXBitCnt0)
{
case 0: //為捕獲模式
RXData0=0;//清空緩沖區
TACCR1+=BITTIME_1b5;
TACCTL1&=~CAP;//改為比較模式
RXBitCnt0++;
break;
case 9: //比較模式改為捕獲模式
TACCTL1|=CAP;
rx_sign=1; //作為接收完畢的信號
break;
default://1~8 有效數據位
RXData0=RXData0>>1;//右移一位,等待下一個數據進來
if(TACCTL1&SCCI)RXData0|=0x80;//輸入為1
RXBitCnt0++;
break;
}
}
復制代碼
全部源碼下載:
msp430G2231_uart.rar
(45.71 KB, 下載次數: 53)
2016-3-30 18:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
msp430g2452.pdf
(266.87 KB, 下載次數: 22)
2016-3-30 18:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei電控2112311
時間:
2016-6-4 02:08
定時器模擬串口可行,但波特率要設置低點穩定些
作者:
guichenyang
時間:
2017-2-26 13:09
非常感謝,但是我怎么下載不了啊
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1