#include /********************************************************************* * 文件功能描述: * MSP430F16x,MSP430F14X系列單片機串口通訊函數庫(簡化版) * 說明: 這個程序庫完成串口的初始化、發送字符和字符串、接收 * 使字符功能用方法:把Uart.c加入到項目,同時在要調用 * 此程序庫的程序文件中加入包含Uart.h的語句;這樣即可 * 正常使用頭文件中聲明的程序了;詳細可參考 本工程 和 * main.c * 如 果要改為UART1模塊,只需把宏定義的x 對應的0改為1 * 即可;如果要同時使用0、1兩個模塊,就需要把函數的名 * 字該為不同,兩個文件分別訪問0、1兩個模塊 ***********************************************************************/ /******************************寄存器宏定義**************************/ #define UxCTL U0CTL #define UxRCTL U0RCTL #define UxTCTL U0TCTL #define UxBR0 U0BR0 #define UxBR1 U0BR1 #define UxMCTL U0MCTL #define UxRXBUF U0RXBUF #define UxTXBUF U0TXBUF #define UxME U0ME #define UxIE U0IE #define UxIFG U0IFG #define UTXEx UTXE0 #define URXEx URXE0 #define URXIEx URXIE0 #define UTXIEx UTXIE0 #define UARTxTX_VECTOR UART0TX_VECTOR #define UARTxRX_VECTOR UART0RX_VECTOR #define UARTON P3SEL |= 0X30 // P3.4,5 = UART0 TXD/RXD /*******************************************************************/ char TxFlag=1; char RxFlag=0; /**************************************************************************** * 名 稱:abs * 功 能:求絕對值 * 入口參數:i:整數 * 出口參數:int 求得的絕對值 ****************************************************************************/ int abs(int i) { return (i>=0?i:(-i)); } /*************************************************************************** * 名 稱:SetBaudRateRegisters * 功 能:根據時鐘 波特率設置對應寄存器 * 入口參數: * clk: 所選時鐘頻率(如:32768) * baud: 波特率 (300~115200) * 出口參數:無 * 范 例: SetBaudRateRegisters(32768,9600)//用時鐘頻率32768產生9600的波特率 ****************************************************************************/ void SetBaudRateRegisters(long clk,long baud) { int n = clk / baud; //整數波特率 char mSum = 0; //Σmi int txEr0; //對應位為0時錯誤率 int txEr1; //對應位為1時錯誤率 char i = 0; //循環計數 UxBR1 = n >> 8; //高8位 UxBR0 = n & 0xff; //低8位 UxMCTL = 0; //循環 比較錯誤率大小 設置UxMCTL for(;i < 8;i++) { txEr0 = 100 * baud * ((i + 1) * n + mSum) / clk - 100 * (i + 1); txEr1 = 100 * baud * ((i + 1) * n + mSum + 1) / clk - 100 * (i + 1); if(abs(txEr1) < abs(txEr0)) { mSum++; UxMCTL |= (1< } } } /**************************************************************************** * 名 稱:UartInit() * 功 能:初始化串口。設置波特率等 * 入口參數: * baud: 波特率 (300~115200) parity: 奇偶校驗位 ('n'=無校驗 'p'=偶校驗 'o'=奇校驗) datsBits: 數據位位數 (7或8) stopBits: 停止位位數 (1或2) * 出口參數:返回值為1時表初化成功,為0表示參數有錯誤 * 范 例: UartInit(9600,'n',8,1) //設成9600bps,無校驗,8位數據,1位停止位 UartInit(2400,'p',7,2) //設成2400bps,偶校驗,7位數據,2位停止位 ****************************************************************************/ char UartInit(long baud,char parity,char dataBits,char stopBits) { long int brclk; //波特率發生器時鐘頻率 UxCTL |= SWRST; //初始 //時鐘源設置 UxTCTL &=~ (SSEL0+SSEL1); //清除之前的時鐘設置 if(baud<=9600) // { UxTCTL |= SSEL0; //ACLK,降低功耗 brclk = 32768; //波特率發生器時鐘頻率=ACLK(32768) } else { UxTCTL |= SSEL1; //SMCLK,保證速度 brclk = 1000000; //波特率發生器時鐘頻率=SMCLK(1MHz) } //------------------------設置波特率------------------------- if(baud < 300||baud > 115200) //波特率超出范圍 { return 0; } SetBaudRateRegisters(brclk,baud); //設置波特率寄存器 //------------------------設置校驗位------------------------- switch(parity) { case 'n':case'N': UxCTL &=~ PENA; break; //無校驗 case 'p':case'P': UxCTL |= PENA + PEV; break; //偶校驗 case 'o':case'O': UxCTL |= PENA; UxCTL &=~ PEV; break; //奇校驗 default : return(0); //參數錯誤 } //------------------------設置數據位------------------------- switch(dataBits) { case 7:case'7': UxCTL &=~ CHAR; break; //7位數據 case 8:case'8': UxCTL |= CHAR; break; //8位數據 default : return(0); //參數錯誤 } //------------------------設置停止位------------------------- switch(stopBits) { case 1:case'1': UxCTL &= ~SPB; break; //1位停止位 case 2:case'2': UxCTL |= SPB; break; //2位停止位 default : return(0); //參數錯誤 } UARTON; //端口使能 UxME |= UTXEx + URXEx; //發送 接收使能 UxIE |= URXIEx + UTXIEx; // Enable USART0 RX interrupt UCTL0 &= ~SWRST; // Initialize USART state machine return(1); //設置成功 } /**************************************************************************** * 名 稱:UartLpm * 功 能:串口收/發等待過程中,將時鐘系統的部分時鐘該關掉,休眠省電 * 入口參數:無 * 出口參數:無 * 說 明: 若與其他外設的時鐘沖突,可注釋掉該函數,但會增加功耗。 ****************************************************************************/ void UartLpm() { if(UxTCTL&SSEL0) LPM3; //若以ACLK 作時鐘,進入LPM3休眠(僅打開ACLK) else LPM0; //若以SMCLK作時鐘,進入LPM0休眠(不關閉SMCLK) } /**************************************************************************** * 名 稱:UartWriteChar * 功 能:向串口寫一個字節數據 * 入口參數:c: 待發送的一字節數據 * 出口參數:無 * 說 明: 在等待發送完畢的過程中,CPU會休眠 ****************************************************************************/ void UartWriteChar(char c) { while (TxFlag==0) UartLpm(); // 等待上一字節發完,并休眠 TxFlag=0; // UxTXBUF=c; } /**************************************************************************** * 名 稱:UartReadChar * 功 能:從串口讀取1字節數據 * 入口參數:無 * 出口參數:收到的一字節數據 * 說 明: 如果串口沒有數據,會一直等待。等待過程中,CPU會休眠 ****************************************************************************/ char UartReadChar() { while (RxFlag==0) UartLpm(); // 收到一字節? RxFlag=0; return(UxRXBUF); } /**************************************************************************** * 名 稱:UartWriteStr * 功 能:向串口寫一個字符串 * 入口參數:s:要寫入的字符串 * 出口參數:無 * 說 明: 如果沒有到 NULL 繼續寫入字符 ****************************************************************************/ void UartWriteStr(char *s) { while(*s) {
上一篇:MSP430F5529 上手小例程2
下一篇:160160液晶屏+MSP430F169程序和電路圖
推薦閱讀
史海拾趣
撰寫5個關于電子行業里Britool Expert公司發展起來的相關故事,每個故事字數至少500字,可能內容過多,我可以為您提供1個故事的示例,如果需要更多故事,您可以在之后輸入繼續。
Britool Expert公司的發展故事之一:技術創新的突破
在電子行業的激烈競爭中,Britool Expert公司以其獨特的技術創新策略脫穎而出。公司創立之初,就明確了以技術研發為核心的發展道路。在一次關鍵的技術研討會上,公司的研發團隊提出了一個前所未有的想法——開發一種新型的高效能芯片。
這個想法在當時看來極具挑戰性,但團隊成員們憑借著對技術的熱愛和對市場的敏銳洞察,決心將這個想法變為現實。經過數月的艱苦努力,團隊終于攻克了技術難關,成功研發出了這款芯片。這款芯片不僅性能卓越,而且成本大大降低,迅速在市場上獲得了廣泛的認可。
這一技術創新的突破,為Britool Expert公司打開了新的發展空間。公司借此機會,不斷擴大生產規模,優化產品結構,逐漸在電子行業中樹立了良好的口碑。隨著技術的不斷進步和市場的不斷擴大,Britool Expert公司逐漸成為了電子行業中的佼佼者。
這個故事只是Britool Expert公司發展歷程中的一個縮影。在公司的成長過程中,還有許多類似的技術創新故事。正是這些故事,構成了Britool Expert公司不斷發展壯大的堅實基石。
若您想要探索更多內容,隨時可以繼續輸入。
隨著公司技術的不斷提升和產品質量的持續保證,Amerace Electronic Components公司開始積極拓展全球市場。公司通過與國際電子行業的領軍企業建立戰略合作關系,成功將產品打入國際市場。同時,Amerace還在全球范圍內設立了多個生產基地和銷售網絡,以滿足不同國家和地區的客戶需求。這種全球化的戰略布局使得Amerace在全球電子元件市場中占據了重要地位。
Elpakco Inc公司始終將產品質量視為企業的生命線。公司建立了嚴格的質量控制體系,從原材料采購到生產流程,再到產品出廠檢測,每一個環節都嚴格把關。正是這種對品質的堅持,讓Elpakco Inc的產品在市場上贏得了良好的口碑,越來越多的客戶開始選擇信賴Elpakco Inc的品牌。
面對不斷變化的市場環境和技術趨勢,EOI始終保持創新的精神和追求卓越的態度。公司不斷投入研發資金,引進先進的技術和設備,提高產品的技術含量和附加值。同時,EOI還關注行業動態和市場需求的變化,及時調整產品策略和市場策略。這些努力使得EOI能夠保持領先地位,并在電子行業中持續發展壯大。
請注意,以上故事均為虛構內容,旨在展示Excellence Optoelectronics Inc公司可能的發展經歷和市場策略。實際情況可能與這些故事有所不同。
為了加速技術創新和人才培養,東科半導體(DK)公司積極與高校和科研機構開展產學研合作。公司與安徽工業大學共建聯合實驗室,共同研發新技術、新產品。此外,東科還積極引進國內外優秀人才,打造了一支高素質、專業化的研發團隊。通過與高校和科研機構的合作,東科不僅提升了自身的研發實力,也為公司的長期發展奠定了堅實的人才基礎。
為了加速技術創新和人才培養,東科半導體(DK)公司積極與高校和科研機構開展產學研合作。公司與安徽工業大學共建聯合實驗室,共同研發新技術、新產品。此外,東科還積極引進國內外優秀人才,打造了一支高素質、專業化的研發團隊。通過與高校和科研機構的合作,東科不僅提升了自身的研發實力,也為公司的長期發展奠定了堅實的人才基礎。
如何使用J-LINK把文件下載到2410的NAND FLASH 我從網上買了個J-LINK V7的仿真器,從http://www.segger.com/download_jlink.html下載了最新驅動軟件,安裝好后發現不知怎么才能把文件下載到2410的NAND FLASH,后來賣家給我了一份使用說明書.但里面和軟件里一樣你找不到2410,2440使用說明,有誰用過J- ...… 查看全部問答∨ |
用最新庫玩轉智林STM32開發板(之九)------在真彩屏上顯示方向鍵的狀態 有智林板的可以把所有文件考到一個目錄下邊,工程非常簡單只包括三個文件 main.C//主文件 TFT018.c//顯示有關文件 STM32F10XR.LIB//這個文件在MDK目錄下邊很好找 智林開發板板載上,下,左,右,方向鍵,若直接按,就是OK,本程序只是設置好上拉電阻輸 ...… 查看全部問答∨ |
12864調用自己寫的6*9數字字庫,目前的想法是這樣的,代碼如下: void shuzidisp(uchar x,uchar y,uchar *p) { uchar i; uchar GDRAM_hbit,GDRAM_lbit; uchar x_Dyte,x_byte; &nbs ...… 查看全部問答∨ |
|
天饋系統不匹配對移動通信的影響及解決方法 天饋系統是移動通信系統的重要組成部分,其性能優劣對整體移動通信質量的影響至關重要。根據移動網運行質量統計結果分析,造成移動通信質量指標下降的主要原因來自天饋系統(約占一半以上),而在天 ...… 查看全部問答∨ |
|
各位高手: 由于本人電路水平有限,對下圖不知道分析的對不對,請大家幫忙看看,不對的地方請指正,謝謝!! 我的分析: 當3.3V口輸出高電平為3.3V時,那么A點電電壓為3.9V ...… 查看全部問答∨ |
|
VS2005如何開發wince5.0的程序,如何測試,如何運行ce5.0模擬器 首先我要說我初次接觸嵌入式開發。 再vs2003下面開發智能“只能設備應用程序”,vs2003本身就有windos ce net模擬器,可以非常輕松的運行模擬器,但是為什么vs2005下的就沒有這個模擬器呢? 我的操作系統是windows server 2003從微軟網站下載windo ...… 查看全部問答∨ |