亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uart.c

?? 《MSP430單片機常用模塊與綜合系統實例精講》整書的源代碼有30個
?? C
字號:
#include <msp430x14x.h>
#include "uart.h"
#include "flash.h"

//定義串口操作變量
// 串口 1 的接收標志
char nRev_UART1;			
// 串口 1 的發送緩沖區
char UART1_TX_BUF[60];	
// 串口 1 的接收緩沖區	
char UART1_RX_BUF[100];	
int nSend_TX1;
int nTX1_Len;
char nRX1_Len;
char nRX1_Len_temp;
char nTX1_Flag;
int nRes_UART1;
int program = 0;
int complete = 0;
unsigned int *pWriteAddr;

#define ADDRESS     0x1100
#define SEG_SIZE    512;

void Init_UART1(void)
{
    //將寄存器的內容清零
    U1CTL = 0X00;	
    //數據位為8bit
    U1CTL += CHAR;			
    
    //將寄存器的內容清零
    U1TCTL = 0X00;	
    //波特率發生器選擇SMCLK
    U1TCTL += SSEL1;			
    
    //波特率為57600
    UBR0_1 = 0X8B;			
    UBR1_1 = 0X00;
    //調整寄存器
    UMCTL_1 = 0X00;			

    //使能UART1的TXD和RXD
    ME2 |= UTXE1 + URXE1; 
    //使能UART1的RX中斷
    IE2 |= URXIE1;	
    //使能UART1的TX中斷
    IE2 |= UTXIE1;			
    
    //設置P3.6為UART1的TXD
    P3SEL |= BIT6;	
    //設置P3.7為UART1的RXD
    P3SEL |= BIT7;			
    
    //P3.6為輸出管腳
    P3DIR |= BIT6;			
    return;
}
void Init_Port(void)
{
    //將所有的管腳在初始化的時候設置為輸入方式
    P3DIR = 0;

    //將所有的管腳設置為一般I/O口
    P3SEL = 0;
    return;
}
void Init_CLK(void)
{
    unsigned int i;
    //將寄存器的內容清零
    //XT2震蕩器開啟
    //LFTX1工作在低頻模式
    //ACLK的分頻因子為1
    BCSCTL1 = 0X00;	
					
    do 
    {
	IFG1 &= ~OFIFG;                       // 清除OSCFault標志
	for (i = 0x20; i > 0; i--);                
    }
    while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1   
					
    BCSCTL2 = 0X00;			//將寄存器的內容清零
    BCSCTL2 += SELM1;		//MCLK的時鐘源為TX2CLK,分頻因子為1
    BCSCTL2 += SELS;		//SMCLK的時鐘源為TX2CLK,分頻因子為1
}
///////////////////////////////////////
// 處理來自串口 1 的接收中斷
#if __VER__ < 200
    interrupt [UART1RX_VECTOR] void UART1_RX_ISR(void)
#else
    #pragma vector=UART1RX_VECTOR
    __interrupt void UART1_RX_ISR(void)
#endif
{
    if(program == 0)
    {
        //處理命令
        //接收來自的數據  
        UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	    
        nRX1_Len_temp += 1;        
        if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
        {
    	    nRX1_Len = nRX1_Len_temp;
    	    nRev_UART1 = 1;
    	    nRX1_Len_temp = 0;
        }
    }
    else if(program == 1)
    {
        //處理數據傳輸
        //接收來自的數據  
        UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;	    
        nRX1_Len_temp += 1;        
        if(UART1_RX_BUF[nRX1_Len_temp - 1] == 13)
        {
            //數據傳輸完成
    	    nRX1_Len = nRX1_Len_temp;
    	    nRev_UART1 = 1;
    	    nRX1_Len_temp = 0;
            complete = 1;
        }
        else if(nRX1_Len_temp >= 100)
        {
            //數據傳輸未完成
            nRX1_Len = nRX1_Len_temp;
    	    nRev_UART1 = 1;
    	    nRX1_Len_temp = 0;
            complete = 0;
        }
    }
    
}
///////////////////////////////////////
// 處理來自串口 1 的發送中斷
#if __VER__ < 200
    interrupt [UART1TX_VECTOR] void UART1_TX_ISR(void)
#else
    #pragma vector=UART1TX_VECTOR
    __interrupt void UART1_TX_ISR(void)
#endif
{
    if(nTX1_Len != 0)
    {
        // 表示緩沖區里的數據沒有發送完
    	nTX1_Flag = 0;			
    	
    	TXBUF1 = UART1_TX_BUF[nSend_TX1];
    	nSend_TX1 += 1;
    	
    	if(nSend_TX1 >= nTX1_Len)
    	{
    	    nSend_TX1 = 0;
    	    nTX1_Len = 0;
    	    nTX1_Flag = 1;
    	}
    }
}
void main(void)
{
    int i;    
    unsigned int *pAddr;
    int nRes = 0;
    
    char UART1_RX_Temp[100];

    // 關閉看門狗
    WDTCTL = WDTPW + WDTHOLD;   
    
    nRev_UART1 = 0;
    nSend_TX1 = 0;
    // 關閉中斷
    _DINT();
	
    // 初始化時鐘
    Init_CLK();
    // 初始化端口
    Init_Port();
    // 初始化串口1
    Init_UART1();

    program = 0;
    pWriteAddr = (unsigned int*)ADDRESS;
    // 打開中斷
    _EINT();
 	
    // 進入處理循環
    for(;;)
    {
    	if(nRev_UART1 == 1)
    	{
    	    nRev_UART1 = 0;
	    // 將接收到的數據拷貝到臨時緩沖區
	    for(i = 0;i < nRX1_Len;i++) 
            {
		UART1_RX_Temp[i] = UART1_RX_BUF[i];
            }
            
            //處理寫數據
            if(program == 1)
            {
                //寫入數據
                for(i = 0;i < nRX1_Len;i++)
                {
                    FLASH_wb((pWriteAddr + i),UART1_RX_Temp[i]);
                }                
                //移動地址
                pWriteAddr += nRX1_Len;
                
                //判斷數據傳輸是否完成
                if(complete == 1)
                {
                    //發送響應結果
                    UART1_TX_BUF[0] = 'O';
    	    	    UART1_TX_BUF[1] = 'K';
    	    	    UART1_TX_BUF[2] = 13;
    	    	    nTX1_Len = 3;
		    // 設置中斷標志,進入發送中斷程序
		    IFG2 |= UTXIFG1;		
    		    nRX1_Len = 0;
                    program = 0;
                }                
                continue;
            }
	    nRes = ProcessCMD(UART1_RX_Temp,nRX1_Len);
	    switch(nRes)
	    {
                case 0:
                {
		    UART1_TX_BUF[0] = 'O';
    	    	    UART1_TX_BUF[1] = 'K';
    	    	    UART1_TX_BUF[2] = 13;
    	    	    nTX1_Len = 3;
		    // 設置中斷標志,進入發送中斷程序
		    IFG2 |= UTXIFG1;		
    		    nRX1_Len = 0;
		    break;
                }
		case 1:
                {
                    //擦除FLASH里面的數據
                    unsigned int count = ADDRESS;
                    pAddr = (unsigned int*)ADDRESS;
                    //擦除數據
                    while(count < 0xffff)
                    {
                        FLASH_clr(pAddr);
                        pAddr += SEG_SIZE;
                        count += SEG_SIZE;
                    }
                    
                    //發送響應結果
		    UART1_TX_BUF[0] = 'O';
    	    	    UART1_TX_BUF[1] = 'K';
    	    	    UART1_TX_BUF[2] = 13;
    	    	    nTX1_Len = 3;
		    // 設置中斷標志,進入發送中斷程序
		    IFG2 |= UTXIFG1;		
    		    nRX1_Len = 0;
		    break;
                }
		case 2:
                {
                    //設置成編程狀態,下面接收來自的數據
		    program = 1;
                    pWriteAddr = (unsigned int*)ADDRESS;
                    
                    //發送響應結果
    	    	    UART1_TX_BUF[0] = 'O';
    	    	    UART1_TX_BUF[1] = 'K';
    	    	    UART1_TX_BUF[2] = 13;
    	    	    nTX1_Len = 3;
		    // 設置中斷標志,進入發送中斷程序
		    IFG2 |= UTXIFG1;		
    		    nRX1_Len = 0;
		    break;
                }
		case -1:
                {
		    UART1_TX_BUF[0] = 'E';
    	    	    UART1_TX_BUF[1] = 'R';
		    UART1_TX_BUF[2] = 'R';
    	    	    UART1_TX_BUF[3] = 'O';
		    UART1_TX_BUF[4] = 'R';
    	    	    UART1_TX_BUF[5] = 13;
    	    	    nTX1_Len = 6;
		    // 設置中斷標志,進入發送中斷程序
		    IFG2 |= UTXIFG1;		
    		    nRX1_Len = 0;
		    break;
                }
	    }//switch

	}//if(nRev_UART1 == 1)
    }//for(;;)
}
int ProcessCMD(char pBuf[],int nLen)
{
    int nTemp = -1;
    
    if(nLen == 3) 
    {
        if((pBuf[0] == 'A') && (pBuf[1] == 'T'))
        {
            nTemp = 0;
        }
    }
    
    if (nLen >= 4)
    {
	if((pBuf[0] == 'F') && (pBuf[1] == 'M') 
	    && (pBuf[2] == 'T')) 
        {
	    nTemp = 1;
        }
	if((pBuf[0] == '+') && (pBuf[1] == '+') 
	    && (pBuf[2] == '+')) 
        {
	    nTemp = 2;
        }
    }
    
    return nTemp;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情欧美一区二区| 国产伦精品一区二区三区在线观看 | 成人黄色在线看| 久久亚洲精品小早川怜子| 激情久久久久久久久久久久久久久久| 亚洲va欧美va人人爽| 91精品国产麻豆| 紧缚捆绑精品一区二区| 亚洲欧美激情小说另类| 欧美综合亚洲图片综合区| 亚洲成人777| 日韩二区在线观看| 国产日韩欧美高清| 欧美日免费三级在线| 成人免费视频视频在线观看免费| 一个色在线综合| 精品99一区二区三区| 在线观看成人小视频| 欧美精品高清视频| 成人综合婷婷国产精品久久免费| 国产成人aaa| 久久国产精品区| 亚洲高清免费视频| 亚洲三级在线看| 久久精品夜色噜噜亚洲a∨| 欧美老年两性高潮| 日韩精品一区二区三区视频播放| 狠狠久久亚洲欧美| 国产欧美日韩精品一区| 亚洲国产精品一区二区久久恐怖片| 99精品久久99久久久久| 中文字幕av一区二区三区| 国产精品久久久久久久久快鸭 | 国产91精品入口| av在线不卡电影| 国产乱子伦视频一区二区三区| 午夜久久久久久久久| 中文字幕一区三区| 精品少妇一区二区三区免费观看 | 日韩中文字幕91| 国产精品美女久久久久久久久 | 大胆亚洲人体视频| 97国产精品videossex| 欧美一区午夜精品| 最好看的中文字幕久久| 国产一区中文字幕| 欧美日韩极品在线观看一区| 91丨九色丨黑人外教| 国产精品123| 99国产一区二区三精品乱码| 91麻豆精品国产91| 欧美精品色综合| 国产精品全国免费观看高清| 天天射综合影视| 91蝌蚪国产九色| 欧美在线一区二区三区| 国产蜜臀97一区二区三区| 日本亚洲视频在线| 色噜噜狠狠色综合欧洲selulu | 国产欧美中文在线| 日本一区中文字幕| 精品视频在线免费观看| 亚洲天堂精品视频| 91玉足脚交白嫩脚丫在线播放| 精品国产91亚洲一区二区三区婷婷| 亚洲国产成人av网| 在线观看亚洲精品| 尤物在线观看一区| 日韩成人精品在线观看| 欧美亚洲综合一区| 精品国产精品网麻豆系列| 五月综合激情网| 欧美日韩不卡在线| 亚洲h在线观看| 欧美久久久久久久久| 亚洲一级二级在线| 亚洲欧美激情在线| 香蕉成人啪国产精品视频综合网 | 欧美一区三区二区| 午夜一区二区三区视频| 欧美日韩精品一区二区天天拍小说 | 26uuu亚洲| 国产麻豆日韩欧美久久| 国产三级欧美三级日产三级99 | 欧美亚洲一区二区在线观看| 亚洲精品久久7777| 欧美日韩1区2区| 麻豆成人91精品二区三区| 国产不卡在线视频| 国产精品免费人成网站| 成人av一区二区三区| 亚洲精品久久久久久国产精华液| 色成年激情久久综合| 婷婷国产在线综合| wwwwxxxxx欧美| 色综合久久久久综合体桃花网| 欧美日韩国产精选| 麻豆精品在线观看| 中文字幕国产精品一区二区| 日本韩国一区二区三区| 日韩精品免费专区| 中文字幕成人网| 欧美日韩国产一二三| 久久99精品网久久| 亚洲精品国产a| 日韩你懂的在线观看| 国产99久久久精品| 亚洲一区二区三区免费视频| 亚洲精品一区二区三区影院| 91美女视频网站| 久久精品国产在热久久| 亚洲欧洲av色图| 日韩女优av电影| 在线观看视频一区二区| 激情综合五月天| 亚洲韩国一区二区三区| 2023国产精品自拍| 精品视频在线免费| 99re这里只有精品首页| 麻豆精品蜜桃视频网站| 亚洲激情自拍偷拍| 中文字幕精品在线不卡| 日韩一区二区电影| 久久99精品久久久| 一区二区三区免费看视频| 国产亚洲一二三区| 日韩一级欧美一级| 在线看不卡av| eeuss鲁一区二区三区| 国内精品写真在线观看 | 欧美一激情一区二区三区| 成年人网站91| 国产成人精品免费| 麻豆91在线观看| 日韩电影在线免费观看| 亚洲伦在线观看| 国产精品丝袜91| 久久九九国产精品| 欧美成人三级在线| 56国语精品自产拍在线观看| 97久久超碰国产精品电影| 国产成人av电影在线| 国内偷窥港台综合视频在线播放| 丝袜国产日韩另类美女| 亚洲一区二区三区美女| 亚洲在线观看免费视频| 亚洲精品一二三| 亚洲欧美偷拍另类a∨色屁股| 国产日本亚洲高清| 国产亚洲综合av| 国产精品麻豆视频| 国产精品短视频| 亚洲精品videosex极品| 亚洲综合男人的天堂| 尤物视频一区二区| 婷婷综合另类小说色区| 日日噜噜夜夜狠狠视频欧美人| 亚洲第一狼人社区| 免费人成在线不卡| 亚洲视频一区在线观看| 国产精品网站在线| 国产精品乱码久久久久久| 亚洲欧洲日韩在线| 亚洲精品国产高清久久伦理二区| 亚洲国产一区在线观看| 美国欧美日韩国产在线播放| 精品一区二区三区香蕉蜜桃| 国产精品一区二区免费不卡 | 午夜在线电影亚洲一区| 日韩国产欧美一区二区三区| 久久av中文字幕片| 懂色av噜噜一区二区三区av| 91一区二区在线观看| 9191久久久久久久久久久| 欧美精品一区二区三区一线天视频| 久久这里只有精品首页| 亚洲人成伊人成综合网小说| 亚洲一二三四在线观看| 久久99九九99精品| 91影视在线播放| 日韩精品中文字幕一区 | 奇米影视在线99精品| 国产成人免费视频网站| 在线观看日韩高清av| 日韩一级视频免费观看在线| 亚洲国产成人午夜在线一区| 午夜精品福利视频网站| 国产麻豆精品theporn| 精品视频在线免费看| 日本一区二区三级电影在线观看| 亚洲精品免费看| 国产高清成人在线| 欧美一区二视频| 亚洲日韩欧美一区二区在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 懂色av一区二区三区免费看| 欧美一区三区二区| 伊人色综合久久天天人手人婷| 精品一区二区三区蜜桃| 欧美色网站导航|