|
本帖最后由 51黑fan 于 2016-1-31 02:25 編輯
D4~D0為波特率設(shè)置:
波特率 | 指數(shù)值 | 小數(shù)部分
| 2400 | 6 | 59
| 4800 | 7 | 59
| 9600 | 8 | 59
| 14400 | 8 | 216
| 19200 | 9 | 59
| 28800 | 9 | 216
| 38400 | 10 | 59
| 57600 | 10 | 216
| 76800 | 11 | 59
| 115200 | 11 | 216
| 230400 | 12 | 216
|
本次實(shí)驗將會學(xué)習(xí)如果使用串口實(shí)現(xiàn)與PC機(jī)的通訊。試驗中需要PC機(jī)與開發(fā)板之間使用USB-RS232線連接。
本次實(shí)驗所學(xué)習(xí)到的寄存器:
CLKCONCMD:時鐘頻率控制寄存器。
D7 | D6 | D5~D3 | D2~D0 | 32KHZ時間振蕩器選擇 | 系統(tǒng)時鐘選擇 | 定時器輸出標(biāo)記 | 系統(tǒng)主時鐘選擇 |
D7位為32KHZ時間振蕩器選擇,,0為32KRC震蕩,1為32K晶振。默認(rèn)為1。
D6位為系統(tǒng)時鐘選擇。0為32M晶振,1為16M RC震蕩。當(dāng)D7位為0時D6必須為1。
D5~D3為定時器輸出標(biāo)記。000為32MHZ,001為16MHZ,010為8MHZ,011為4MHZ,100為2MHZ,101為 1MHZ,110為500KHZ,111為250KHZ。默認(rèn)為001。需要注意的是:當(dāng)D6為1時,定時器頻率最高可采用頻率為16MHZ。
D2~D0:系統(tǒng)主時鐘選擇:000為32MHZ,001為16MHZ,010為8MHZ,011為4MHZ,100為2MHZ,101為1MHZ,110為500KHZ,111為250KHZ。當(dāng)D6為1時,系統(tǒng)主時鐘最高可采用頻率為16MHZ。
CLKCONSTA:時間頻率狀態(tài)寄存器。
D7 | D6 | D5~D3 | D2~D0 | 當(dāng)前32KHZ時間振蕩器 | 當(dāng)前系統(tǒng)時鐘 | 當(dāng)前定時器輸出標(biāo)記 | 當(dāng)前系統(tǒng)主時鐘 |
D7位為當(dāng)前32KHZ時間振蕩器頻率。0為32KRC震蕩,1為32K晶振。
D6位為當(dāng)前系統(tǒng)時鐘選擇。0為32M晶振,1為16M RC震蕩。
D5~D3為當(dāng)前定時器輸出標(biāo)記。000為32MHZ,001為16MHZ,010為8MHZ,011為4MHZ,100為2MHZ,101為 1MHZ,110為500KHZ,111為250KHZ。
D2~D0為當(dāng)前系統(tǒng)主時鐘。000為32MHZ,001為16MHZ,010為8MHZ,011為4MHZ,100為2MHZ,101為1MHZ,110為500KHZ,111為250KHZ。
U0CSR:USART0控制與狀態(tài);
D7
| D6
| D5
| D4
| D3
| D2
| D1
| D0
| 模式選擇
| 接收器使能
| SPI主/從模式
| 幀錯誤狀態(tài)
| 奇偶錯誤狀態(tài)
| 接受狀態(tài)
| 傳送狀態(tài)
| 收發(fā)主動狀態(tài)
|
D7為工作模式選擇,0為SPI模式,1為USART模式
D6為UART接收器使能,0為禁用接收器,1為接收器使能。
D5為SPI主/從模式選擇,0為SPI主模式,1為SPI從模式。
D4為幀錯誤檢測狀態(tài),0為無錯誤,1為出現(xiàn)出錯。
D3為奇偶錯誤檢測,0為無錯誤出現(xiàn),1為出現(xiàn)奇偶校驗錯誤。
D2為字節(jié)接收狀態(tài),0為沒有收到字節(jié),1為準(zhǔn)備好接收字節(jié)。
D1為字節(jié)傳送狀態(tài),0為字節(jié)沒有被傳送,1為寫到數(shù)據(jù)緩沖區(qū)的字節(jié)已經(jīng)被發(fā)送。
D0為USART接收/傳送主動狀態(tài),0為USART空閑,1為USART忙碌。
U0GCR:USART0通用控制寄存器;
D7 | D6 | D5 | D4~D0 | SPI時鐘極性 | SPI時鐘相位 | 傳送位順序 | 波特率指數(shù)值 |
D7為SPI時鐘極性:0為負(fù)時鐘極性,1為正時鐘極性;
D6為SPI時鐘相位:
D5為傳送為順序:0為最低有效位先傳送,1為最高有效位先傳送。
D4~D0為波特率設(shè)置:
波特率 | 指數(shù)值 | 小數(shù)部分
| 2400 | 6 | 59
| 4800 | 7 | 59
| 9600 | 8 | 59
| 14400 | 8 | 216
| 19200 | 9 | 59
| 28800 | 9 | 216
| 38400 | 10 | 59
| 57600 | 10 | 216
| 76800 | 11 | 59
| 115200 | 11 | 216
| 230400 | 12 | 216
|
U0BAUD:波特率控制小數(shù)部分。(取值參考上表)
源代碼:
- #include <ioCC2530.h>
- #include <string.h>
- #define uint unsigned int
- #define uchar unsigned char
- //定義控制燈的端口
- #define RLED P1_0
- #define GLED P1_1
- //函數(shù)聲明
- void Delay(uint);
- void initUARTSEND(void);
- void UartTX_Send_String(char *Data,int len);
- char Txdata[25]="FEIBIT Electronics";
- void Delay(uint n)
- {
- uint i;
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- }
- void initUARTSEND(void)
- {
- CLKCONCMD &= ~0x40; //設(shè)置系統(tǒng)時鐘源為32MHZ晶振
- while(CLKCONSTA & 0x40); //等待晶振穩(wěn)定
- CLKCONCMD &= ~0x47; //設(shè)置系統(tǒng)主時鐘頻率為32MHZ
-
-
- PERCFG = 0x00; //位置1 P0口
- P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口
- P2DIR &= ~0XC0; //P0優(yōu)先作為UART0
- U0CSR |= 0x80; //UART方式
- U0GCR |= 9;
- U0BAUD |= 59; //波特率設(shè)為19200
- UTX0IF = 0; //UART0 TX中斷標(biāo)志初始置位0
- }
- void UartTX_Send_String(char *Data,int len)
- {
- int j;
- for(j=0;j<len;j++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
- }
- void main(void)
- {
- uchar i;
- P1DIR = 0x03; //P1控制LED
- RLED = 1;
- GLED = 0; //關(guān)LED
- initUARTSEND();
- UartTX_Send_String(Txdata,25); //FEIBIT Electronics
- for(i=0;i<30;i++)Txdata[i]=' ';
- strcpy(Txdata," www.torrancerestoration.com "); //將UART0 TX test賦給Txdata;
- while(1)
- {
- UartTX_Send_String(Txdata,sizeof(" www.torrancerestoration.com ")); //串口發(fā)送數(shù)據(jù)
- Delay(50000); //延時
- GLED=!GLED; //標(biāo)志發(fā)送狀態(tài)
- Delay(50000);
- Delay(50000);
- }
- }
復(fù)制代碼
實(shí)驗總結(jié):
波特率的設(shè)置方法:
波特率由U0GCR中的低5位和U0BAUD決定,例如:
U0GCR |= 9;
U0BAUD |= 59;
以上代碼將波特率設(shè)為19200。
|
|