當前位置:首頁 » 編程語言 » 單片機c語言中斷0計數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

單片機c語言中斷0計數

發布時間: 2023-06-11 08:51:06

⑴ 單片機c語言,設計一個計數器,中斷一下,數碼管顯示加1

定義一個數組存放0-9的字型碼
code unsigned char led[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}; //0-9
unsigned char i=0;
int0() interrupt 0 //外部中斷0
{
i++;
if(i==10)i=0;
P1=led[i];
}
void main(void)// 主程序
{
IT0=1; //外中斷跳變產生中斷
EX0=1;
EA=1; //打開總中斷
while(1) //主程序循環
{
;
}
}

這樣可以一個數碼管0-9循環顯示。
多位數碼管的話,有點麻煩。
見你另一個問題。

⑵ 單片機中斷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;
}
}
}

⑶ 單片機用C語言編寫中斷的範例

#include
sbit
csb_sat=
p1^0;
//定義超聲波發生腳
void
delay(void)
//延時25微秒,12t晶元用12m誤差
0us
{
unsigned
char
a;
for(a=11;a>0;a--);
}
void
csb_fs(int
dat)
{while(dat--){csb_sat=1;delay();csb_sat=0;delay();}}
//發射
void
main()
{
ea=1;
while(1)
{
csb_fs(10);
delay();delay();delay();delay();delay();delay();delay();delay();delay();
ie=0x83;
//int0允許中斷
while(ie);
p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();
}
}
void
int0_chuankou(void)
interrupt
0
using
1
//外部int0中斷子程序
{
ie=0;//禁止int0中斷
}

⑷ c語言怎麼編寫單片機的中斷

外部中斷(INT0):
I0(void)
interrupt
0//interrupt
0用於外部中斷INT0
{//中斷執行的內容}
定時器/計數器中斷(T0):
T0(void)
interrupt
1//interrupt
1用於定時器/計數器T0
{//中斷執行的內容}
外部中斷(INT1):
I1(void)
interrupt
2//interrupt
2用於外部中斷INT1
{//中斷執行的內容}
定時器/計數器中斷(T1):
T1(void)
interrupt
3//interrupt
3用於定時器/計數器T1
{//中斷執行的內容}

⑸ 單片機c語言,設計一個計數器,中斷一次,數碼管數字從0起加1, 4位的數碼管

我直接拿一個現成的例子吧。這個是用定時器中斷的,你可以改成外部中斷。這是8位的數碼管,對4位稍加修改就行了。
#include <reg52.h> //包括一個52標准內核的頭文件
#include<intrins.h>
/****************************聲明函數*****************************/
void x8led(unsigned long ddd);
void delay882us(void);
/*****************************定義IO******************************/
sbit P20=P2^0;
sbit P21=P2^1;
sbit S16=P3^0;
sbit S15=P3^1;
sbit S14=P3^2;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
bit f=0;//位變數
/***************************定時器2中斷**************************/
timer2() interrupt 5
{
static unsigned char t;
TF2=0;
t++;
if(t==30) //T2的預置值0x1000,溢出30次就是1秒鍾,晶振22118400HZ
{
t=0;
f=1;//每次長時間的溢出,就置一個標記,以便主程序處理
}
}
/*****************************數碼管掃描**************************/
void x8led(unsigned long ddd)
{
unsigned char q,r=0;
unsigned char l[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
//0-9的欄位碼
unsigned char xx[8]={0,0,0,0,0,0,0,0};
unsigned char y[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
xx[0]=ddd%10;
xx[2]=ddd/10%10;
xx[1]=ddd/100%10;
xx[3]=ddd/1000%10;
xx[4]=ddd/10000%10;
xx[6]=ddd/100000%10;
xx[5]=ddd/1000000%10;
xx[7]=ddd/10000000;//求出八位數,分別放在八個變數中
for(q=0;q<8;) //循環掃描
{
q++;
r++;
if(r==8)r=0;
P1=y[r];
P21=1;
delay882us();
P21=0;
P20=1;
P1=l[xx[r]];
delay882us();
P1=0xff;
P20=0;
}
}
/*******************************延時882us*************************/
void delay882us(void)
{
unsigned char i;
for(i=0;i<255;i++)
{
_nop_();
}
}
/*****************************主程序******************************/
void main(void)
{
unsigned long a=0;
RCAP2H =0x10; //賦T2的預置值0x1000,溢出30次就是1秒鍾
RCAP2L =0x00;
TR2=1; //啟動定時器
ET2=1; //打開定時器2中斷
EA=1; //打開總中斷
while(1)
{
if(f)//發現標記進入處理
{
f=0;//清除標記
a++;
if(a>99999999)a=0;
}
x8led(a);//將a的值送到數碼管顯示
}
}

⑹ 單片機定時器中斷問題(c語言)

我把你現在給出的這個程序的分析和調試了一下,並且我在裡面加入了一些代碼使能能夠通過串口輸出來觀察數據,,一開始是進入到xian1()中的,,就是你的顯示為0的這個函數中的,然後當nDataToDisplay<200這個條件不滿足的時候,程序就開始進入xian()中,也就是你的顯示為9999的函數中,,,,然後又循環到一開始的狀態。
就函數已經在你指定的地方調用了,,,,如果有問題,,就要檢查你的顯示函數和相應硬體連接了。

⑺ 單片機c語言中的中斷問題

1.void(中斷函數返回類型(空型)) Time1 (中斷函數名)(void(參數類型) interrupt 3 (中斷號)
2: 中斷條件發生時執行中斷,比如void Time1(void) interrupt 3 是定時器1定時時間到發生中斷,中斷函數放在那裡無所謂
3:void PxInt0(void) interrupt 0 中斷名為PxInt0的0號中斷
void PxInt1(void) interrupt 2 中斷名為PxInt1的2號中斷
void time0_int(void) interrupt 1 中斷名為time0_int的1號中斷
void time1_int(void) interrupt 3 中斷名為time1_int的3號中斷
4:中斷的代碼是你想中斷執行的工作,中斷的代碼是根據任務,需要你自己寫的

⑻ 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函數前聲明,當單片機檢測到中斷所需的信號時,它會自動立即停止正在進行的工作進入中斷函數。