折騰了一上午,沒(méi)有人帶只能自己摸索了........
接法:JP10接J12;JP8接JP16;P3^2接GND;P2^0接LED;
只有打開(kāi)全局開(kāi)關(guān),其它各位的開(kāi)關(guān)才可以開(kāi)啟。
所有開(kāi)關(guān)賦值為1則開(kāi),賦值為0則關(guān)。
|
||||||||
位序號(hào)
|
D0
|
D1
|
D2
|
D3
|
D4
|
D5
|
D6
|
D7
|
說(shuō)明
|
外部中斷0
|
定時(shí)/計(jì)數(shù)0
|
外部中斷1
|
定時(shí)/計(jì)數(shù)1
|
串行口中斷
|
定時(shí)/計(jì)數(shù)2
(52單片機(jī))
|
無(wú)效位
|
全局中斷位
|
位符號(hào)(寫(xiě)程序時(shí)直接引用)
|
EX0
|
ET0
|
EX1
|
ET1
|
ES
|
ET2
|
--
|
EA
|
位地址
|
A8H
|
A9H
|
AAH
|
ABH
|
ACH
|
ADH
|
--
|
AFH
|
EA:總允許位
ES:串口中斷允許位
ET1:定時(shí)計(jì)數(shù)器1中斷允許位
EX1:外部中斷1中斷允許位
ET0:定時(shí)計(jì)數(shù)器0中斷允許位
EX0:外部中斷0中斷允許位
52單片機(jī)中的6個(gè)中斷源和單片機(jī)端口的關(guān)系:
1外部中斷0的中斷申請(qǐng)線INT0就是P3口的P3.2口線
2外部中斷1的中斷申請(qǐng)線INT1就是P3口的P3.3口線
3計(jì)數(shù)器0的外部計(jì)數(shù)輸入端為單片機(jī)P3口的P3.4口線(定時(shí)器0為內(nèi)部中斷)
4計(jì)數(shù)器1的外部計(jì)數(shù)輸入端為單片機(jī)P3口的P3.5口線(定時(shí)器1為內(nèi)部中斷)
5串行口中斷(分為串行口接受中斷RXD即單片機(jī)P3口的P3.0口線;串行口發(fā)送中斷TXD即單片機(jī)P3口的P3.1口線
6計(jì)數(shù)器2的外部計(jì)數(shù)輸入端為單片機(jī)P1口的P1.0口線 (定時(shí)器2為內(nèi)部中斷)
TCON
TCON(Timer Control Register)定時(shí)器/計(jì)數(shù)器控制寄存器
TCON在特殊功能寄存器中,字節(jié)地址為88H,由于有位地址,十分便于進(jìn)行位操作。
TCON的作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。
TCON的格式如下圖所示。其中,TF1,TR1,TF0和TR0位用于定時(shí)器/計(jì)數(shù)器;IE1,IT1,IE0和IT0位用于中斷系統(tǒng)。
各位定義如下:
TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)滿(mǎn)溢出時(shí),由硬件使TF1置“1”,并且申請(qǐng)中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清“0”,在查詢(xún)方式下用軟件清“0”。
TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且INT1為高電平時(shí),TR1置“1”啟動(dòng)定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動(dòng)定時(shí)器1。
TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。
TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。
IE1:外部中斷1請(qǐng)求標(biāo)志位。
IT1:外部中斷1觸發(fā)方式選擇位。當(dāng)IT1=0,為低電平觸發(fā)方式;當(dāng)IT1=1,為下降沿觸發(fā)方式。
IE0:外部中斷0請(qǐng)求標(biāo)志位。
IT0:外部中斷0觸發(fā)方式選擇位。 當(dāng)IT0=0,為低電平觸發(fā)方式;當(dāng)IT0=1,為下降沿觸發(fā)方式。
TCON中低4位與中斷有關(guān)。由于TCON是可以位尋址的,因而如果只清溢出或啟動(dòng)定時(shí)器工作,可以用位操作命令。例如:執(zhí)行“CLR TF0”后則清定時(shí)器0的溢出;執(zhí)行“SETB TR1”后可啟動(dòng)定時(shí)器1開(kāi)始工作(當(dāng)然前面還要設(shè)置方式定)。
code:
//電平觸發(fā)
#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};//段選,選擇要顯示的數(shù)字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位數(shù)碼管
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;//打開(kāi)中斷總開(kāi)關(guān)
EX0=1;//打開(kāi)外部中斷0,P3.2選通
IT0=0;//選擇電平觸發(fā)方式
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);
}
//邊沿觸發(fā)方式
#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};//段選,選擇要顯示的數(shù)字
//uchar code wnum[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//八位數(shù)碼管
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;//打開(kāi)中斷總開(kāi)關(guān)
EX0=1;//打開(kāi)外部中斷0,P3.2選通
IT0=1;//選擇邊沿觸發(fā)方式
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);
}