|
我想問(wèn)一下再給程序中定時(shí)器/計(jì)數(shù)器T0到底是執(zhí)行的定時(shí)功能還是計(jì)數(shù)功能。當(dāng)發(fā)射超聲波時(shí)開(kāi)始計(jì)數(shù)接收到超聲波后停止計(jì)數(shù),要按這樣說(shuō)的話應(yīng)該是定時(shí)功能吧。可是當(dāng)ECHo端接收到一個(gè)信號(hào)后它會(huì)輸出一個(gè)持續(xù)的高電平,可這時(shí)候定時(shí)器/計(jì)數(shù)器T0已經(jīng)停止計(jì)數(shù)了,但ECHo端輸出了一個(gè)持續(xù)的高電平就是超聲波測(cè)傳播時(shí)間,是不是該程序沒(méi)有用到該高電平,如果用到的話應(yīng)該就是計(jì)數(shù)功能了吧,有點(diǎn)迷求大佬解釋一下。
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit Lcd1602_RS = P2^6;
- sbit Lcd1602_RW = P2^5;
- sbit Lcd1602_EN = P2^7;
-
- sbit Trig = P2^1;
- sbit Echo = P2^0;
- sbit beep = P2^3;
- unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
- unsigned int time=0;
- unsigned long S=0;
- bit flag =0;
- uchar disdat[4] ={0,0,0,0,};
- void delayms(uint ms)
- {
- uchar i=100,j;
- for(;ms;ms--)
- {
- while(--i)
- {
- j=10;
-
- }
- }
- }
- void Lcd1602_Write_com(uchar cmd)
- {
- Lcd1602_RS=0;
- P0=cmd;
- delayms(1);
- Lcd1602_EN =1;
- delayms(1);
- Lcd1602_EN =0;
- delayms(1);
- }
- void Lcd1602_Write_Data(uchar shu)
- {
- Lcd1602_RS=1;
- P0=shu;
- delayms(1);
- Lcd1602_EN =1;
- delayms(1);
- Lcd1602_EN =0;
- delayms(1);
- }
- void write_1602(uchar add,uchar sj)
- {
- Lcd1602_Write_com(0x80+0x40+add);
- Lcd1602_Write_Data(sj) ;
- }
- void zifuchuan(uchar *ch)
- {
- while(*ch!=0)
- Lcd1602_Write_Data(*ch++);
- delayms(5);
- } void LcdInit()
- {
- Lcd1602_EN =0;
- Lcd1602_RW =0;
- Lcd1602_Write_com(0x38);
- Lcd1602_Write_com(0x0c);
- Lcd1602_Write_com(0x06);
- Lcd1602_Write_com(0x80);
- Lcd1602_Write_com(0x01);
- zifuchuan("cejujuli") ;
- }
- void Conut(void)
- {
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- S=(time*1.7)/100;
- disdat[0]=S%1000/100;
- disdat[1]=S%1000%100/10;
- disdat[2]=S%1000%10%10;
- write_1602(1,disdat[0]+0x30);
- write_1602(2,disdat[1]+0x30);
- write_1602(3,disdat[2]+0x30);
- write_1602(5,'c');
- write_1602(6,'m');
-
-
- }
- void zd0() interrupt 1
- {
- flag=1;
- }
- void StartModule()
- {
- Trig=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- Trig=0;
- }
- void main(void)
- {
- delayms(5);
- LcdInit();
- TMOD=0x01;
- TH0=0;
- TL0=0;
- ET0=1;
- EA=1;
- beep = 0;
- delayms(150);
-
- while(1)
- {
- StartModule();
- while(!Echo);
- TR0=1;
- while(Echo);
- TR0=0 ;
-
- delayms(5);
-
- }
-
- }
復(fù)制代碼
|
|