|
|
20黑幣
小白請(qǐng)教大神們幾個(gè)51中斷的問(wèn)題,請(qǐng)指點(diǎn),謝謝!
我想利用89c51測(cè)量?jī)蓚(gè)按鍵按下先后時(shí)間間隔功能。先按啟動(dòng),再按停止然后數(shù)碼管顯示出兩者先后間隔時(shí)間,如果先按停止,不做處理。必須先按啟動(dòng),然后再按停止才能顯示時(shí)間,也就是啟動(dòng)和停止有先后順序,順序后了不處理。利用中斷1和中斷0在下降沿觸發(fā)方式和定時(shí)器0方式2去實(shí)現(xiàn),用prutues仿真,按一下啟動(dòng),再按一下停止,可以正常顯示時(shí)間。仿真時(shí)發(fā)現(xiàn)幾個(gè)問(wèn)題。
1.按一下啟動(dòng),再按一下啟動(dòng),IE1就會(huì)置1,(為什么?)再按一下停止,顯示時(shí)間,但T0不停止,仍然計(jì)時(shí),需再按一下停止,定時(shí)器T0停止,顯示時(shí)間。我想實(shí)現(xiàn)有功能是按下啟動(dòng),定時(shí)器啟動(dòng),再按啟動(dòng)沒(méi)有反應(yīng),按下停止,停止計(jì)時(shí),顯示時(shí)間,再按下停止或沒(méi)按啟動(dòng)先按停止,沒(méi)有反應(yīng)。但是現(xiàn)在如果按兩下啟動(dòng)同,必須按兩下停止才能停止定時(shí)器。
2.按一下啟動(dòng),再按一下停止,顯示時(shí)間,但再按一下停止,TE0就會(huì)置1,(為什么?)此時(shí)按一下啟動(dòng),顯示就會(huì)變成00,定時(shí)器也不啟動(dòng),再按下啟動(dòng),定時(shí)器才會(huì)啟動(dòng)。
請(qǐng)問(wèn)大神們,出現(xiàn)這種情況是什么原因,如果不改變中斷1和中斷0在下降沿觸發(fā)方式和定時(shí)器0方式2,如何解決,源文件附后,請(qǐng)大神們指點(diǎn)。
新手小白一枚,送點(diǎn)黑幣意思一下,請(qǐng)大神們不吝賜教,謝謝! 用protues仿真,所以按鍵沒(méi)有去抖,應(yīng)該不是沒(méi)去抖的問(wèn)題。
啟動(dòng)1停止2.png (55.13 KB, 下載次數(shù): 78)
下載附件
2020-6-7 10:34 上傳
啟動(dòng)1停止2啟動(dòng)1.png (57.74 KB, 下載次數(shù): 66)
下載附件
2020-6-7 10:34 上傳
啟動(dòng)2停止1.png (57.14 KB, 下載次數(shù): 57)
下載附件
2020-6-7 10:34 上傳
停止1次.png (11.01 KB, 下載次數(shù): 79)
下載附件
2020-6-7 10:34 上傳
啟動(dòng)2停止1.png (57.14 KB, 下載次數(shù): 62)
下載附件
2020-6-7 10:34 上傳
再啟動(dòng)1次.png (47.93 KB, 下載次數(shù): 74)
下載附件
2020-6-7 10:34 上傳
啟動(dòng)1停止1.png (50.89 KB, 下載次數(shù): 75)
下載附件
2020-6-7 10:31 上傳
按啟動(dòng)1次.png (48.29 KB, 下載次數(shù): 75)
下載附件
2020-6-7 10:30 上傳
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint Time=0;
- uint Time_Count=0;
- uchar Duan[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0x7f};//段碼0-9+全暗+"."
- uchar Wei[4]={0x08,0x04,0x02,0x01}; //位的控制端 (仿真)
- uchar Time_Buffer[]={0,0,0,0}; //時(shí)間緩存
- void delayms(uint x) //延時(shí)函數(shù)
- {
- uint i,j;
- for(i = x; i > 0; i --)
- for(j = 125; j > 0; j --);
- }
- void Show_Time() //數(shù)碼管動(dòng)態(tài)掃描顯示
- {
- uchar i;
- /*****************數(shù)據(jù)轉(zhuǎn)換*****************************/
-
-
- Time_Buffer[0] = Time / 1000; //千位
- Time_Buffer[1] = Time % 1000 / 100; //百位
- Time_Buffer[2] = Time % 100 /10; //十位
- Time_Buffer[3] = Time % 10; //個(gè)位
- if(Time_Buffer[0] == 0)
- {
- Time_Buffer[0] = 10;
- if(Time_Buffer[1] == 0)
- {
- Time_Buffer[1] = 10;
- }
- }
-
- for(i = 0;i < 4;i ++)
- {
- P0 = 0xFF;
- P1 = Wei[i];
- P0 = Duan[Time_Buffer[i]];
- delayms(2);
- }
- }
- /*************************************************************************
- 主函數(shù)
- **************************************************************************/
- void main()
- {
- EX1=1;
- EX0=1;
- IT0=1;//低電平有效 下降沿有效
- IT1=1;
- EA=1;
-
- TMOD=0x02; //設(shè)置為自動(dòng)重載方式
- TH0=0x9c; //設(shè)置為100us的計(jì)數(shù)
- TL0=0x9c;
- TR0=0;
- Time=1898;
- while(1)
- {
- Show_Time();
- }
- }
- void Start_ExInt1()interrupt 2
- {
- TR0=1;
- EX1=0;
- ET0=1;
- EX0=1;
- }
- void Timer_T0() interrupt 1
- {
- Time_Count++;
- EX0=1;
- if ( Time_Count==9999) //計(jì)時(shí)范圍0-9999
- {
- Time_Count=0;
- }
- }
- void Stop_Int0() interrupt 0
- {
- TR0=0;
- Time= Time_Count;
- Time_Count=0;
-
- EX1=1;
- EX0=0;
- ET0=0;
- }
復(fù)制代碼
KEY1-2.rar
(62.48 KB, 下載次數(shù): 4)
2020-6-7 10:40 上傳
點(diǎn)擊文件名下載附件
|
|