我想问一下再给程序中定时器/计数器T0到底是执行的定时功能还是计数功能。当发射超声波时开始计数接收到超声波后停止计数,要按这样说的话应该是定时功能吧。可是当ECHo端接收到一个信号后它会输出一个持续的高电平,可这时候定时器/计数器T0已经停止计数了,但ECHo端输出了一个持续的高电平就是超声波测传播时间,是不是该程序没有用到该高电平,如果用到的话应该就是计数功能了吧,有点迷求大佬解释一下。
- #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);
-
- }
-
- }
复制代码
|