㈠ 單片機c語言中斷
查詢傳送方式查詢方式的過程為: 查詢—等待—數據傳送。直接存儲器存取(DMA)方式。在下述兩種情況下可考慮採用DMA 方式:外設和存儲器之間有大量的數據需要傳送, 如磁碟驅動器中的大量數據需快速送到微機系統的RAM 中;外部設備的工作速度很高。同其他計算機系統一樣, 單片機系統還有另一種非常重要的數據輸入/ 輸出方式———中斷方式。中斷的概念中斷優先順序:中斷系統中有兩個不可定址的「優先順序生效」觸發器, 一個指出CPU 是否正在執行高優先順序的中斷服務程序, 另一個指出CPU 是否正在執行低優先順序中斷服務程序。二級中斷嵌套當CPU 正在處理一個中斷請求時, 又出現了另一個優先順序比它高的中斷請求, 這時,CPU 就暫時中止執行對原來優先順序較低的中斷源的服務程序, 保護當前斷點, 轉去響應優先順序更高的中斷請求, 並為其服務。中斷處理的大致流程 中斷響應條件1有中斷源發出中斷請求;2中斷總允許位EA = 1 , 即CPU 開中斷;3申請中斷的中斷源的中斷允許位為1 , 即中斷沒有被屏蔽;4無同級或更高級中斷正在被服務;5當前的指令周期已經結束;6若現行指令為RETI 或者是訪問IE 或IP 指令, 則該指令以及緊接著的另一條指令已執行完。 </SPAN></SPAN>
㈡ 單片機C語言中斷函數的定義形式是怎樣的
形式如下:
void 中斷名(void) inerrupt 中斷號 using 工作寄存器組
比如外部中斷0
void ext0(void) interrupt 0 using 1 //後面的using 1可以省略,預設為0
定時器1
void t1isr() interrupt 3
單片機內部結構
1、CPU
它的名字沒有尺汪改,還是稱為CPU(Central Processing Unit)。它是單片機的核心部件,包括運算器和控制器。
運算器既是算術邏輯單元ALU(Arithmetic logic Unit),其功能是進行算術運算和邏輯運算。
控制器一般由指令寄存器、指令解碼器、時序電路和控制電路組成。其迅睜作用是完成取指令、將指令解碼形成各種微操作並執行指令,同時控制計算機的各個部件有條不紊地工作。
2、單片機內部結構之一ROM
「硬碟」,改了名字,稱為程序存儲器,也叫只畝困歲讀存儲器。用ROM(Read only memery)表示。其作用和計算機的硬碟差不多,用來存放用戶編寫的程序。特點是:掉電後不會丟失數據(程序)。
㈢ 鍗曠墖鏈哄備綍鐢ㄤ腑鏂鍒囨崲紼嬪簭錛屽氨鏄鎴戠幇鍦ㄧ敤鍗曠墖鏈哄疄鐜板姛鑳紸鍜孊錛岀敤涓鏂浣滀負AB紼嬪簭鐨勫垏鎹錛岀敤C璇璦瑕佹
棣栧厛瀹氫箟鍏ㄥ矓鍙橀噺int_num=0;
灝嗕互涓嬩唬鐮佹斁鍏ヤ腑鏂鏈嶅姟鍑芥暟錛
void INT_X(void) interrupt X
{
switch(int_num) //鍒ゆ柇浠誨姟浠g爜
{
case 0;//浠誨姟A
//榪欓噷濉浠誨姟A紼嬪簭孌
break;
case 1;//浠誨姟B
//榪欓噷濉浠誨姟A紼嬪簭孌
break;
default:
break;
}
int_num++;
if(int_num>1)int_num=0;
}
㈣ 單片機中斷C語言
#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9
ucharscanled;
ucharflag=0;
uchardisdat[6];
voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
uchari;
for(i=0;i<6;i++)
disdat[i]=10;
}
voidext0()interrupt0
{
flag=1;
}
voidext1()interrupt2
{
flag=2;
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
uchari,j;
TMOD=0x10;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
scanled=0;
dischg();
while(1)
{
i=0;
switch(flag)
{
case1:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[5]=disdat[4];
disdat[4]=disdat[3];
disdat[3]=disdat[2];
disdat[2]=disdat[1];
disdat[1]=disdat[0];
disdat[0]=i;
delay(200);
}
dischg();
flag=0;
break;
case2:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[0]=disdat[1];
disdat[1]=disdat[2];
disdat[2]=disdat[3];
disdat[3]=disdat[4];
disdat[4]=disdat[5];
disdat[5]=i;
delay(200);
}
dischg();
flag=0;
break;
default:break;
}
}
}
㈤ 51單片機c語言編程中產生中斷的條件是什麼
三個:
1.總中斷使能位EA=1
2.相應中斷使能 (ET0、EX0……) 打開
3.中斷源:外部中斷引腳的電平觸發、定時器溢出……
oid PxInt0(void) interrupt 0 //定義外部中斷0
void PxInt1(void) interrupt 2 //定義外部中斷1
void time0_int(void) interrupt 1 //定義定時器0
void time1_int(void) interrupt 3 //定義定時器1
這里為什麼是 0 1 2 3的順序呢~?其實是單片機內部默認的,順序依次是:
0 外部中斷0
1 定時/計數器0
2 外部中斷1
3 定時/計數器1
4 串列口中斷
這個是沒有什麼理由的,記住就行,以後要定義一個中斷的時候,定義的是哪一個,就在後面加上它的序號就行了,比如void PxInt0(void) interrupt 0 表示外部中斷0,就在後面加上interrupt 0.
逐詞解釋的話。。。如:void PxInt0(void) interrupt 0
void的意思是沒有返回值,Pxint0(void)是你定義的函數名,interrupt表示你定義的是中斷函數,0表示你定義的是外部中斷0
後面的依此類推。
另外,中斷函數不需要在main函數前聲明,當單片機檢測到中斷所需的信號時,它會自動立即停止正在進行的工作進入中斷函數。