编辑: 捷安特680 | 2013-04-13 |
//固定函数声明 void int_0();
//外部中断
0 void main(){ P1=0X0FF;
EA=1;
// CPU 所有中断开(IE 最高位 MSB) EX0=1;
// INT0 中断开 IT0=0;
// INT0 低电平触发(为1则为下降沿触发) while(1){ { ;
} } //INT0 中断 由P3.2 引脚产生 void int_0() interrupt
0 using
0 { led0=0;
} 在上面的程序中,我们可以看出外部中断使用的方法,现在我们学会了使用中断 0,那么我 们现在开始学使用外部中断
1 吧. 首先我们来设置程序的要求:
1、 外部中断
0 点亮 D0,关闭 D1
2、 外部中断
1 点亮 D1,关闭 D0 我们先看看汇编语言的程序: LED0 EQU P1.0 LED1 EQU P1.1 ORG 0000H LJMP main ORG 0003H LJMP W_INT0 ORG 00013H LJMP W_INT1 www.eeworld.com.cn ORG 0100H main: SETB EA ;
CPU 所有中断开(IE 最高位 MSB) SETB EX0 ;
INT0 中断开 CLR IT0 ;
INT0 低电平触发(为1则为下降沿触发) SETB EX1 ;
INT1 中断开 CLR IT1 ;
INT1 低电平触发(为1则为下降沿触发) MOV P1, #0FFH JMP $ W_INT0: SETB LED1 ;
关闭 LED1 CLR LED0 ;
点亮 LED0 RETI W_INT0: CLR LED1 ;
点亮 LED1 SETB LED0 ;
关闭 LED0 RETI END 这是 c51 的程序: #include //重定义 I/0 引脚名称 sbit LED0=P1^0;
sbit LED1=P1^1;
//固定函数声明 void int_0();
//外部中断
0 void int_1();
//外部中断
1 void main(){ EA=1;
// CPU 所有中断开(IE 最高位 MSB) EX0=1;
// INT0 中断开 IT0=0;
// INT0 低电平触发(为1则为下降沿触发) EX1=1;
// INT1 中断开 IT1=0;
// INT1 低电平触发(为1则为下降沿触发) while(1){ { www.eeworld.com.cn ;
} } void initial(){ EA=1;
// CPU 所有中断开(IE 最高位 MSB) EX0=1;
// INT0 中断开 IT0=0;
// INT0 低电平触发(为1则为下降沿触发) EX1=1;
// INT1 中断开 IT1=0;
// INT1 低电平触发(为1则为下降沿触发) return;
} //INT0 中断 由P3.2 引脚产生 void int_0() interrupt
0 using
0 { Led1=1;
//关闭 D1 LED0=0;
//点亮 D0 } //INT1 中断 由P3.3 引脚产生 void int_1() interrupt
2 using
1 { LED0=1;
//关闭 D0 LED1=0;
//点亮 D1 } 这样,通过程序和实践,我们就可以很轻易学会了外部中断的使用方法. 第三讲 定时器的使用 关于定时器中断, 我们简单介绍一下原理就可以了, 因为具体介绍已经有很多资料都已经提 供了. 80C51 单片机内部设有两个
16 位的可编程定时器/计数器.可编程的意思是指其功能 (如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变.在定时器/计数 器中除了有两个
16 位的计数器之外, 还有两个特殊功能寄存器 (控制寄存器和方式寄存器) . 我们可以看出,16 位的定时/计数器分别由两个
8 位专用寄存器组成,即:T0 由TH0 和TL0 构成;
T1 由TH1 和TL1 构成.其访问地址依次为 8AH-8DH.每个寄存器均可单独访问.这 些寄存器是用于存放定时或计数初值的.此外,其内部还有一个
8 位的定时器方式寄存器 TMOD 和一个
8 位的定时控制寄存器 TCON.这些寄存器之间是通过内部总线和控制逻辑电路 连接起来的. TMOD 主要是用于选定定时器的工作方式;
TCON 主要是用于控制定时器的启动 www.eeworld.com.cn 停止,此外 TCON 还可以保存 T
0、T1 的溢出和中断标志.当定时器工作在计数方式时,外部 事件通过引脚 T0 (P3.4)和T1(P3.5)输入.定时计数器的原理: 当定时器/计数器为定时工作方式时, 计数器的加
1 信号由振荡器的