回首頁   上一頁   通用輸出入控制    異常向量與外部中斷控制   計時器控制

 串列埠UART控制    串列埠SPI控制    串列埠I2C控制    RTC控制控制    FLASH記憶體控制    uCOS-II系統程式

UART串列埠發射實習    UART串列埠內定函數發射實習     串列接收中斷實習

UART1串列埠傳輸實習   

/***************UART串列埠發射範例*****************************************
*檔名︰UART1.C
*功能︰串列埠發射資料,發射字串時LED1發亮。
*模擬:開啟UART0視窗,單步執行,觀察UART0視窗內暫存器的變化
* 開啟Serial#1視窗,快速執行,會不斷顯示字串"嵌入式Hello World"。
*操作:在電腦使用超級終端機,設定傳輸格式115200bps,接收UART0的資料,
* 會不斷顯示字串。
****************************************************************************/
#include "LPC2106.h"
/****************************************************************************
* 名稱︰UART0_SendByte()
* 功能︰UART0發射位元組資料,並等待發射完畢。
* 進入參數︰data 要發射的資料
****************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data; // 發射一個byte資料
while( (U0LSR & TEMT)==0 ); // 若TEMT=0,等待資料發射完畢
}
/****************************************************************************
* 名稱︰UART0_SendStr()
* 功能︰UART0發射元串
* 進入參數︰srt 要發射的字元串的指標
****************************************************************************/
void UART0_SendStr(uint8 const *str)
{
while(1)
{
if( *str == '\0' ) break; // 若字串結束,則跳出迴圈
UART0_SendByte(*str++); // 發射一個byte資料
}
}
/****************************************************************************
* 名稱︰main()
* 功能︰UART0發射字元串"嵌入式Hello World!"
****************************************************************************/
void main(void)
{
uint8 const SEND_STRING[] = "嵌入式Hello World!\n\r"; //顯示字串,跳行與歸位控制
UART0_Init(); // 初始化UART0
IODIR=LED1; // 設定LED1為輸出
while(1)
{
IOCLR = LED1; // LED1=0
UART0_SendStr(SEND_STRING); //發射字串
IOSET = LED1; // LED1=1
Delay_ms(500); //延時
}
}

/***************UART串列埠內定函數發射範例****************************
*檔名︰UART2.C
*功能︰使用內定函數,串列埠發射資料,發射字串時LED1發亮。
*模擬:開啟UART0視窗,單步執行,觀察UART0視窗內暫存器的變化
* 開啟Serial#1視窗,快速執行,會不斷顯示字串"嵌入式Hello World"。
*操作:在電腦使用超級終端機,設定傳輸格式115200bps,接收UART0的資料,
* 會不斷顯示字串。
**********************************************************************/
#include "LPC2106.H"
#include <stdio.h> // 內定標準IO函數
#define CR 0x0D // 跳行控制字元
/*//*****************************************************************
* 名稱︰putchar (int ch)
* 功能︰UART0發射字元資料,並等待發射完畢。
* 進入參數︰ch 要發射的資料
*********************************************************************/
int putchar (int ch)
{
if (ch == '\n') // 若字元資料為\n則跳行控制
{
while ((U0LSR & THRE)==0); // 若THRE=0,等待發射保持暫存器(U0THR)已空
U0THR = CR; // 發射跳行控制字元
}
while ((U0LSR & THRE)==0); // 若THRE=0,等待發射保持暫存器(U0THR)已空
return (U0THR = ch); // 發射字元字元資料
}
/********************************************************************
* 名稱︰main()
* 功能︰UART0發射字元串"嵌入式Hello World!"
*********************************************************************/
int main(void)
{
UART0_Init (); // 初始化UART0
while(1)
{
printf("嵌入式Hello World!\n\r"); // 發射字串函數
Delay_ms(100);
}
}

/**************************串列接收中斷範例***********************
*檔名︰UART3.C
*功能︰使用UART0接收電腦資料,在電腦輸入數字,會顯示在LED。
*模擬:開啟GPIO及Serial#1視窗,快速執行,在Serial#1視窗中輸入0~9,會在
* GPIO視窗顯示按鍵的數字。
*操作:在電腦使用超級終端機,設定傳輸格式115200bps,在視窗內按鍵0~F,
* 會令UART0產生接收中斷,在目標板上LED顯示同樣的數字。
********************************************************************/
#include "LPC2106.h"
uint8 rcv_buf[8]; // UART0資料接收緩衝區
uint8 rcv_new; // 接收新資料旗標
/******************************************************************
* 名稱︰IRQ_UART0()
* 功能︰串列埠UART0接收中斷,接收到資料在LED顯示。
********************************************************************/
void IRQ_UART0(void) __irq
{
IOCLR = LED4+LED3+LED2+LED1; // 令LED輸出0000
IOSET=(U0RBR-'0')<<10; // 接收到字元資料轉為數字在LED顯示
VICVectAddr = 0x00; // 中斷處理結束
}
/***********************************************************************
* 名稱︰main()
* 功能︰初始化UART,並等待接收到UART資料。
**************************************************************************/
void main(void)
{
IODIR =IOCLR = LED4+LED3+LED2+LED1; // 設定LED為輸出0
UART0_Init(); // 初始化UART0
U0FCR = 0x01; /* 致能FIFO,並設定觸發點為1byte
bit0=1, FIFO致能
bit7-6=00:定義Rx FIFO接收到1byte後,產生中斷*/
U0IER =RevEn; // 允許RBR中斷,即接收中斷

VICIntSelect = 0x00000000; // 設定所有通道為IRQ中斷
VICVectCntl0 = CntlUART0; // UART0中斷通道分發到IRQ slot 0,優先等級最高
VICVectAddr0 = (int)IRQ_UART0; // 設定UART0向量位址
VICIntEnable = IntUART0; // 致能UART0中斷
while(1); // 等待接收中斷
}

/***************UART1串列埠傳輸範例**********************************
*檔名︰UART4.C
*功能︰使用內定標準IO函數由UART1串列發射計數值,並等待串列接收按鍵
*模擬:開啟UART1視窗,單步執行,觀察UART1視窗內暫存器的變化
* 開啟Serial#2視窗,快速執行,會不斷顯示字串"count =0000~9999",
* 並等待串列接收按鍵。
*操作:在電腦使用超級終端機,設定傳輸格式115200bps,接收UART0的資料,
* 會不斷顯示字串。並在視窗內按鍵,串列發射到目標板。
*********************************************************************/
#include "LPC2106.H"
#include "stdio.h" // 加入內定標準IO函數
int main (void)
{
uint16 count=1234; // 計數初值
UART1_Init(); // UART1啟始程式
while (1)
{
printf ("printf count =%5d \n",count); // 發射字串"count = 0000~9999"
printf ("putchar count = "); // 發射字串"count = "
putchar(count % 10000/1000 +'0'); // 發射千位數字元
putchar(count % 1000/100 +'0'); // 發射百位數字元
putchar(count % 100/10 +'0'); // 發射十位數字元
putchar(count % 10 +'0'); // 發射個位數字元
putchar('\n'); putchar('\n'); // 送出跳行控制
count++; if(count>9999) count=0; // 遞加0000~9999

printf ("place any key ="); // 發射字串"place any key ="
getchar(); // 等待按鍵
putchar('\n'); putchar('\n'); // 送出跳行控制
}
}