|
5黑幣
這個(gè)程序一開(kāi)始是運(yùn)行之后數(shù)碼管只能加到01,之前也發(fā)了一貼關(guān)于這個(gè)函數(shù)錯(cuò)誤問(wèn)題,后來(lái)自己瞎琢磨,感覺(jué)沒(méi)啥問(wèn)題,最開(kāi)始我設(shè)置的T1定時(shí)器初始值是(65536-50000)只能加到01,現(xiàn)在初始值改到(65536-500)數(shù)碼管可以加到99了,但是加一次的時(shí)間很長(zhǎng),正好看到書(shū)上有關(guān)于外部輸入計(jì)數(shù)脈沖的頻率有限定,且計(jì)數(shù)一次兩個(gè)機(jī)器周期才能檢測(cè)到一次,晶振頻率是12MHz,那么最高就是500KHz,我這個(gè)脈沖65.036ms出現(xiàn),頻率大約為15Hz,并沒(méi)有超出范圍啊,難道是占空比的問(wèn)題?需要保持高電平大于一個(gè)機(jī)器周期?求大佬解決一下,如果真的是占空比的問(wèn)題,加_nop_(),是不是就可以了?
- #include<reg52.h>
- #define uchar unsigned char
- #define unit unsigned int
- uchar num,num2;
- unit count;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- sbit IS=P3^4;
- sbit led0=P1^0;
- sbit dula=P2^6;
- sbit wela=P2^7;
- /*************************
- 延遲函數(shù)
- **************************/
- void delayms(unit ms)
- {
- unit i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /*************************
- 初始化函數(shù)
- *************************/
- void init()
- {
- TMOD=0x15;
- EA=1;
- ET0=1;
- ET1=1;
- TR0=1;
- TR1=1;
- TH0=0xff;
- TL0=0xff;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- }
- /*************************
- 數(shù)碼管顯示函數(shù)
- *************************/
- void display(uchar shi,uchar ge)
- {
- P0=0x00;
- dula=1;
- dula=0;
- P0=table[shi];
- dula=1;
- dula=0;
- P0=0xfe;
- wela=1;
- wela=0;
- delayms(5);
- P0=0x00;
- dula=1;
- dula=0;
- P0=table[ge];
- dula=1;
- dula=0;
- P0=0xfd;
- wela=1;
- wela=0;
- delayms(5);
- }
- /**************************
- 主函數(shù)
- **************************/
- void main()
- {
- init();
- while(1)
- {
- IS=led0;
- display(num/10,num%10);
-
- }
- }
- /***************************
- 定時(shí)器中斷函數(shù)
- ***************************/
- void ser()interrupt 1
- {
- num++;
- TH0=0xff;
- TL0=0xff;
- }
- void ser1()interrupt 3
- {
- TH1=(65536-500)/256;
- TL1=(65536-500)%256;
- num2++;
- if(num2==10)
- {
- led0=~led0;
- }
- }
復(fù)制代碼
|
|