欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機外部中斷的電平觸發和邊沿觸發程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年12月04日   【字體:

折騰了一上午,沒有人帶只能自己摸索了........
接法:JP10接J12;JP8接JP16;P3^2接GND;P2^0接LED;


只有打開全局開關,其它各位的開關才可以開啟。
所有開關賦值為1則開,賦值為0則關。
位序號
D0
D1
D2
D3
D4
D5
D6
D7
說明
外部中斷0
定時/計數0
外部中斷1
定時/計數1
串行口中斷
定時/計數2
(52單片機)
無效位
全局中斷位
位符號(寫程序時直接引用)
EX0
ET0
EX1
ET1
ES
ET2
--
EA
位地址
A8H
A9H
AAH
ABH
ACH
ADH
--
AFH

EA:總允許位
ES:串口中斷允許位
ET1:定時計數器1中斷允許位
EX1:外部中斷1中斷允許位
ET0:定時計數器0中斷允許位
EX0:外部中斷0中斷允許位

52單片機中的6個中斷源和單片機端口的關系:
1外部中斷0的中斷申請線INT0就是P3口的P3.2口線
2外部中斷1的中斷申請線INT1就是P3口的P3.3口線
3計數器0的外部計數輸入端為單片機P3口的P3.4口線(定時器0為內部中斷)
4計數器1的外部計數輸入端為單片機P3口的P3.5口線(定時器1為內部中斷)
5串行口中斷(分為串行口接受中斷RXD即單片機P3口的P3.0口線;串行口發送中斷TXD即單片機P3口的P3.1口線
6計數器2的外部計數輸入端為單片機P1口的P1.0口線 (定時器2為內部中斷)


 

 TCON
TCON(Timer Control Register)定時器/計數器控制寄存器
TCON在特殊功能寄存器中,字節地址為88H,由于有位地址,十分便于進行位操作。
TCON的作用是控制定時器的啟、停,標志定時器溢出和中斷情況。
TCON的格式如下圖所示。其中,TF1,TR1,TF0和TR0位用于定時器/計數器;IE1,IT1,IE0和IT0位用于中斷系統。
各位定義如下:
TF1:定時器1溢出標志位。當定時器1計滿溢出時,由硬件使TF1置“1”,并且申請中斷。進入中斷服務程序后,由硬件自動清“0”,在查詢方式下用軟件清“0”。
TR1:定時器1運行控制位。由軟件清“0”關閉定時器1。當GATE=1,且INT1為高電平時,TR1置“1”啟動定時器1;當GATE=0,TR1置“1”啟動定時器1。
TF0:定時器0溢出標志。其功能及操作情況同TF1。
TR0:定時器0運行控制位。其功能及操作情況同TR1。
IE1:外部中斷1請求標志位。
IT1:外部中斷1觸發方式選擇位。當IT1=0,為低電平觸發方式;當IT1=1,為下降沿觸發方式。
IE0:外部中斷0請求標志位。
IT0:外部中斷0觸發方式選擇位。 當IT0=0,為低電平觸發方式;當IT0=1,為下降沿觸發方式。
TCON中低4位與中斷有關。由于TCON是可以位尋址的,因而如果只清溢出或啟動定時器工作,可以用位操作命令。例如:執行“CLR TF0”后則清定時器0的溢出;執行“SETB TR1”后可啟動定時器1開始工作(當然前面還要設置方式定)。
 code:


//電平觸發
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P2^0;
uchar num;
uchar wnum=0x00;
uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段選,選擇要顯示的數字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位數碼管   
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
P1=wnum;
EA=1;//打開中斷總開關
EX0=1;//打開外部中斷0,P3.2選通
IT0=0;//選擇電平觸發方式
while(1)
{
for(num=0;num<10;num++)
{
P0=dbit[num];
delay(500);
}
}
}
void duan() interrupt 0
{
D1=1;
delay(500);
D1=0;
delay(500); 
}

 

//邊沿觸發方式
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P2^0;
uchar num;
uchar wnum=0x00;
uchar code dbit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段選,選擇要顯示的數字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位數碼管   
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=0;y<113;y++)
{
}
}
}
void main()
{
P1=wnum;
EA=1;//打開中斷總開關
EX0=1;//打開外部中斷0,P3.2選通
IT0=1;//選擇邊沿觸發方式
while(1)
{
for(num=0;num<10;num++)
{
P0=dbit[num];
delay(500);
}
}
}
void duan() interrupt 0
{
D1=1;
delay(500);
D1=0;
delay(500); 
}

 

關閉窗口

相關文章