- 熟悉定時/計數器的定時和計數功能;
- 掌握定時器及相關中斷的初始化編程方法;
- 掌握定時及中斷程序的設計方法。
。 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)
2020-5-22 16:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|