- 熟悉定时/计数器的定时和计数功能;
- 掌握定时器及相关中断的初始化编程方法;
- 掌握定时及中断程序的设计方法。
。 1、初始化两个定时器一个定时 10mS,一个计数,2 个都开中断,定时时间到中断服 务程序中控制引脚将脉冲输出到另一个定时计数器的外部计数引脚,同时重新加载初 值。用于计 数的定时器的中断服务程序控制 LED 闪烁。 2、使用 2 个按键调节用于计数的定时器的初值和其中断服务程序中的重新加载的初 值 以控制 LED 闪烁的速度,一个键用于加快闪烁速度,一个键用于降低闪烁速度。
- #include<reg52.h>
- #include<intrins.h>
- sbit LED = P2^0;
- sbit MaiChong = P3^5;
- sbit KEY1 = P3^2;
- sbit KEY2 = P3^3;
- void delay(unsigned int i)
- {
- unsigned char j;
- while(i--);
- for(j = 0;j<125;j++);
- }
- void Timer1Init()
- {
- TMOD |= 0X10;
- TH1 = (65536-10000)/256;
- TL1 = (65536-10000)%256;
- EA = 1;
- ET1 = 1;
- TR1 = 1;
- }
- void Timer1ISR() interrupt 3
- {
- TH1 = (65536-10000)/256;
- TL1 = (65536-10000)%256;
- MaiChong = 0;
- _nop_();
- MaiChong = 1;
- }
- void Timer0Init()
- {
- TMOD |= 0x06;
- TH0 = 256-50;
- TL0 = 256-50;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void Timer0ISR() interrupt 1
- {
- LED = ~LED;
- }
- void Int0_INT()
- {
- EA = 1;
- EX0 = 1;
- IT0 = 1;
- }
- void Int0_ISR() interrupt 0
- {
- if(KEY1 == 0)
- {
- delay(10);
- if(KEY1 == 0)
- {
- TH0 = TH0+10;
- TL0 = TL0+10;
- if(TH0 >= 256)
- {
- TH0 = 255;
- TL0 = 255;
- }
- }
- }
- }
- void Int1_INT()
- {
- EA = 1;
- EX1 = 1;
- IT1 = 1;
- }
- void Int1_ISR() interrupt 2
- {
- if(KEY2 == 0)
- {
- delay(10);
- if(KEY2 == 0)
- {
- TH0 = TH0-10;
- TL0 = TL0-10;
- if(TH0 <= 0)
- {
- TH0 = 0;
- TL0 = 0;
- }
- }
- }
- }
- void main()
- {
- Timer1Init();
- Timer0Init();
- Int0_INT();
- Int1_INT();
- while(1);
- }
复制代码
1、实验仿真结果(截图或拍照) 2、实验结果分析(针对实验结果文字分析) 试验成功,按下上方的K1按键,LED的闪烁速度加快,按下下方的K2按键,LED的闪烁速度变慢。 在实验过程中,在第一次连接电路图的时候忘记链接了P3.5的脉冲接口导致实验一直失败。
下面的压缩包里有仿真文件和文档:
定时加计数.rar
(766.3 KB, 下载次数: 13)
|