定時器計數(shù)器綜合實驗
P1接8個LED燈,P3.7接1個LED燈,點動開關(guān)接P3.2 (INT0),負跳變產(chǎn)生中斷,P3.3 (INT1)用低電平觸發(fā)中斷。系統(tǒng)時鐘6M。
編寫程序?qū)崿F(xiàn)如下功能:
① 主程序9只LED燈上電全滅。
② INT0中斷程序?qū)崿F(xiàn):按一次啟動定時器T0,再按一次停止。停止后恢復(fù)到上電狀態(tài)。
③ INT1中斷程序?qū)崿F(xiàn):按一次啟動定時器T1,再按一次停止。停止后恢復(fù)到上電狀態(tài)。
④ 定時器T0實現(xiàn):P3.7所接1個LED燈亮滅閃爍,亮滅時間各為1S。
⑤ 計數(shù)器T1實現(xiàn):記錄由T1口所輸入脈沖個數(shù),以二進制形式在P1口連接的8只LED燈上顯示出來。
(提示:低電平觸發(fā)及時恢復(fù)高電平,以免中斷重入)
程序如下:
代碼:
- #include<reg51.h>
- #include<intrins.h>
- sbit p3_7=P3^7;
- char t;
- char k=0;
- void main()
- {
- TMOD=0x51;
- EA=1;
- EX0=1;
- EX1=1;
- ET0=1;
- ET1=1;
- IT0=1;
- IT1=1;
- TR0=0;
- TR1=0;
- TL0=(65536-15536)%256;
- TH0=(65536-15536)/256;
- TL1=0;
- TH1=0;
- p3_7=0;
- P1=0;
- while(1);
- }
- void key0()interrupt 0
- {
- TR0=!TR0;
- if(TR0==0)
- {
- TR1=0;
- k=0;
- P1=0;
- p3_7=0;
- }
- }
- void time0()interrupt 1
- {
- TL0=(65536-15536)%256;
- TH0=(65536-15536)/256;
- t++;
- if(t==10)
- {
- p3_7=!p3_7;
- t=0;
- }
- }
- void key1()interrupt 2
- {
- TR1=!TR1;
- TH1=0xff;
- TL1=0xff;
- if(TR1==0)
- {
- TR0=0;
- k=0;
- P1=0;
- p3_7=0;
- }
- }
- void time1()interrupt 3
- {
- TH1=0xff;
- TL1=0xff;
- k++;
- P1=k;
- }