国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

msp430串口數(shù)據(jù)收發(fā)的討論

發(fā)布時間:2008-11-2 12:05    發(fā)布者:MSP430
在做串口通信看 沈建華編著 一書中感到書中有些控制字沒有列出,編寫程序時容易忘記寫.出現(xiàn)不必要的錯誤. ME2 IE2 IFG2 (或ME1 IE1 IFG1)下面的本程序用的是USART1.要從.H的頭文件里找上面三個特殊功能寄存器的用法. #define IE2_ (0x0001) /* Interrupt Enable 2 */ DEFC( IE2 , IE2_) #define U1IE IE2 /* UART1 Interrupt Enable Register */ #define URXIE1 (0x10) #define UTXIE1 (0x20) #define IFG2_ (0x0003) /* Interrupt Flag 2 */ DEFC( IFG2 , IFG2_) #define U1IFG IFG2 /* UART1 Interrupt Flag Register */ #define URXIFG1 (0x10) #define UTXIFG1 (0x20) #define ME2_ (0x0005) /* Module Enable 2 */ DEFC( ME2 , ME2_) #define U1ME ME2 /* UART1 Module Enable Register */ #define URXE1 (0x10) #define UTXE1 (0x20) #define USPIE1 (0x10) 430的波特率的使用很有特點.: 時鐘源可通過UTCTL<0 1>中的SSEL1 SSEL0 選擇外部時鐘 UCLK1 ACLK SMCLK SMCLK 對于波特率的計算: 比如時鐘750KHz,波特率115200,750000/115200=6.51 小數(shù)0.51*8=4.08 那么UxMCTL就可以為0xAA或者0x55(4個1均勻分布)關(guān)波特率=BRCLK/(UBR+(M7+M6+M5+M4+M3+M2+M1+M0) /8) 是反過來的運算. 本程序中用ACLK :32768HZ 32768/9600=3.4133... 那么UBR就是3 再用 0.4133*8=3.3064 取整數(shù) 3 在波特率調(diào)整控制器中UMCTL中的M7~M0 任意修改3個位并且不能緊靠在一起.同時UMCTL的值要求不能少于0x03 #include "MSP430x16x.h" void Delay(unsigned char m); void ComInit(void); unsigned char Usart_Tx_Data[30]={"You are the best ! cheer on! "}; void InitSystemClock(void) // 初始化系統(tǒng)時鐘 { unsigned char i; WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗 BCSCTL1=0x00; //Set 430 clk 開啟XT2,DOC的標稱頻率為最低 且不分頻;XT1為低速晶體(32.768K) BCSCTL2=SELM_2+SELS; //選擇MCLK SCLK的時鐘源為高速時鐘 不分頻,均為8M do { IFG1&=~OFIFG; for(i=0xff;i>0;i--); } while ((IFG1&OFIFG)!=0); //P5DIR=0XFF; //P5OUT|=BIT7; //P5IN=0X80; //P5SEL|=BIT4+BIT5+BIT6;//將MCLK SCLK ACLK分別輸出至P5.4 5 6口 } void main(void) { int i; InitSystemClock(); // 初始化系統(tǒng)時鐘 ComInit(); //InitLCD(); //P1DIR=0x00; //P1IE=0xff; _EINT(); while(1) { Delay(100); } /* while(1) { for(i=0;i<30;i++) { TXBUF1=Usart_Tx_Data; while((UTCTL1&0X01)==0); Delay(100); } } */ } void Delay(unsigned char m) { unsigned char i; while(m--) { for(i=0;i<0xff;i++); } } void ComInit(void) //串口初始化 { UCTL1|=SWRST; UCTL1 = CHAR; // 8-bit 字符 無校驗 1位停止位 UART模式 無反饋 線路空閑多機模式 /*******************波特率為1200*******************/ /* UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時鐘源(32.768K), UCLKI與UCLK極性相同 UBR01 = 0x1B; // 波特率設(shè)置寄存器 波特率為1200 UBR11 = 0x00; // // 波特率設(shè)置寄存器 UMCTL1 = 0x11; //波特率 調(diào)整寄存器 */ /**************************************/ /*******************波特率為2400*******************/ /* UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時鐘源(32.768K), UCLKI與UCLK極性相同 UBR01 = 0x0D; // 波特率設(shè)置寄存器 波特率為2400 UBR11 = 0x00; // // 波特率設(shè)置寄存器 UMCTL1 = 0x6D; //波特率 調(diào)整寄存器 */ /**************************************/ /*******************波特率為9600*******************/ UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時鐘源(32.768K), UCLKI與UCLK極性相同 UBR01 = 0x03; // 波特率設(shè)置寄存器 UBR11 = 0x00; // // 波特率設(shè)置寄存器 UMCTL1 = 0x4A; //波特率 調(diào)整寄存器 /**************************************/ /*******************波特率為19200******************* UTCTL1=SSEL0+SSEL1; //選擇SMCLK為波特率發(fā)生器時鐘源(8M), UCLKI與UCLK極性相同 UBR01 = 0xA0; // 波特率設(shè)置寄存器 8M 下波特率為19200 UBR11 = 0x01; // // 波特率設(shè)置寄存器 UMCTL1 = 0x6d; //波特率 調(diào)整寄存器 **************************************/ /*******************波特率為115200******************* UTCTL1=SSEL0+SSEL1; //選擇SMCLK為波特率發(fā)生器時鐘源(8M), UCLKI與UCLK極性相同 UBR01 = 0x45; // 波特率設(shè)置寄存器 SMCLK為8M下波特率為115200 UBR11 = 0x00; // // 波特率設(shè)置寄存器 UMCTL1 = 0x55; //波特率 調(diào)整寄存器 /**************************************/ ME2|= UTXE1 + URXE1; // 使能 USART1 TXD/RXD IE2|= URXIE1+UTXIE1; // 使能 USART1 接收和發(fā)送 中斷 UCTL1&=~SWRST; P3SEL |= BIT6+BIT7; // P3.6,7 = USART1 TXD/RXD 選擇第二功能 } #pragma vector=UART1RX_VECTOR __interrupt void OnRecieve(void) //將接收到的字符顯示到串口輸出 { while((IFG2&URXIFG1)==0); //選擇的是USART1 TXBUF1=RXBUF1; while((UTCTL1&0X01)==0); Delay(1); } //本程序包括自動發(fā)送數(shù)組里的數(shù)據(jù)或?qū)⒔邮盏降臄?shù)據(jù)再從新發(fā)回.多添加一條語句實現(xiàn)功能. while((UTCTL1&0X01)==0); 將接收到的數(shù)據(jù)發(fā)送完才能退出中斷. 少這一句 在串口調(diào)試助手中能看到TX加1 RX也加1 接收數(shù)據(jù)區(qū)卻沒有顯示. 原因就是數(shù)據(jù)沒有發(fā)送完就退出了中斷. //此程序只要修改頭文件就可運行. 其實還有很多的更為復雜的應(yīng)用.歡迎交流! ^_^ 其實在任何一種單片機先看懂官方或者網(wǎng)上的一些程序,再在這些程序基礎(chǔ)上添加自己想要實現(xiàn)的功能,這是實現(xiàn)編程的最好也是最快方式,但是,不要認為這就可以了,不但要看懂理寫程序人的意思,將程序變成適應(yīng)自己修改的程序,并完全正確.要一個學習的過程和時間.
本文地址:http://m.qingdxww.cn/thread-2871-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天色综合2 | 又粗又大的机巴好爽欧美 | 欧美有码在线观看 | 久久青草国产手机看片福利盒子 | 日本久久综合视频 | 日韩在线不卡视频 | 4hc44四虎www视频 | 日本欧美一区二区三区片 | 99国产精品热久久久久久夜夜嗨 | 国产4p精品观看 | 最新内地三级在线观看 | 久久这里只有精品国产99 | 欧美亚洲日本国产 | 久久福利国产 | 亚洲日本视频在线观看 | 四虎影永久在线高清免费 | 久久免| 在线看免费观看韩国特黄一级 | 日韩一级片播放 | 国产伦久视频免费观看 视频 | 最新国产在线播放 | 日本黄色高清网站 | 国产真实强j视频在线观看 国产真实女人一级毛片 | 精品一久久香蕉国产线看播放 | 日韩手机在线视频 | 麻豆免费永久网址入口网址 | 国产色视频在线观看免费 | 黄色片www| 亚洲日日干 | 欧美成人亚洲高清在线观看 | 97免费在线观看视频 | 国外在线观看网 | 免费看国产黄色片 | 日本人的色道免费网站 | 欧美日韩视频综合一区无弹窗 | 淫操干 | 久热99| 538精品一线 | 女人18毛片水真多国产 | 久久er精品 | 免费观看欧美成人1314色 |