51微控制器 串列埠中斷

2021-09-24 17:42:17 字數 1170 閱讀 5672

在應用層方面,也就是我們把串列埠中斷用起來目前只需掌握以下幾點:

①中斷源:就是中斷的**,如定時中斷,串列埠中斷(包括傳送完成,接受完成等),dma中斷,按鍵中斷,io口輸入高低電平等等都可以當做中斷的**。

②中斷服務函式:就是有乙個中斷來了,這個中斷具體要做什麼。比如串列埠收到1幀資料,需要用變數把資料存起來,或者用來顯示到螢幕上等等。

微控制器的串列埠中斷實現分為兩步:

step1:初始化串列埠,微控制器所有的外設(串列埠,定時器,can等等)本質上為配置暫存器的值來實現不同模式的選擇,這一步其實是比較重複的工作,初學者有時間可以扣扣細節,沒時間的話,就把它想成乙個黑盒,配置幾個變數即可使用。這裡不細講了,有空可以參考以下初始化的例程來理解,沒空就只需要 修改baudrate變數來使用自己想要的波特率。

#define main_fosc		24000000l	//define main clock 即主頻

#define baudrate 500000l //define the baudrate

//12t mode: 600~115200 for 22.1184mhz, 300~57600 for 11.0592mhz

//1t mode: 7200~1382400 for 22.1184mhz, 3600~691200 for 11.0592mhz

#define brt_reload (256 - main_fosc / 16 / baudrate) //calculate the timer1 reload value ar 1t mode

void uart_init(void)

step2:串列埠中斷服務子函式

當初始化完成之後,程式則進入while(1),然後,當串列埠中斷來了,則進入中斷服務子函式,執行完之後再返回while(1)繼續執行之前做的事情。常用的串列埠中斷有傳送完成中斷(ti)和接收完成中斷(ri),當傳送完成變數ti置1,當接收完成ri置1。需要手動給變數賦值為0來接收下一次的中斷。

具體實現**如下:

//中斷服務函式可以隨便寫  但interrupt 4代表的串列埠0中斷

//這是程式的框架

void uart0_interrupt (void) interrupt 4

if(ti)//ti為1代表傳送完成中斷

}

微控制器FIFO串列埠中斷傳送資料

以51微控制器為例,直接上乾貨 define buffer size 128 typedef struct uartfifo static volatile uartfifo uart1txfifo void uart1init void void uart1putc unsigned char d...

51微控制器 中斷

一 中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5個中斷源 中斷號...

51微控制器 中斷

中斷,是微控制器的一種執行機制。標準的51微控制器有兩個控制中斷的暫存器。乙個是中斷使能暫存器,另乙個是中斷優先順序暫存器。ie 中斷使能暫存器的位分配 位址0xa8,可位定址 位7 6543 210符號 ea et2es et1ex1 et0ex0 復位值000 0000 0ie 中斷使能暫存器的...