⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cscj_timer0._c

📁 超声测距c语言程序 利用定时器产生40khz站空比50 的方波 通过检测收到超声波的时间来测距
💻 _C
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
#pragma interrupt_handler int0:2 

uchar flag=0;
/*******************************************
函数名称: delayus
功    能: 延时指定微秒(8.31M晶振)
参    数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值  : 无
/********************************************/
void delayus(uint us)		  
{
 uint i;
 us=us*13/10;		  	 //13/10是在8.31MHz晶振下,通过反复实验得到的数值
 for( i=0;i<us;i++); 
}

/*******************************************
函数名称: delay()
功    能: 8.31MHz晶振下延时 z ms 
参    数: z
返回值  : 无
/********************************************/
void delayms(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
    for(y=1185;y>0;y--);
}
/*******************************************
函数名称: int0()
功    能: 进入中断后让发光二极管点亮 
          检测是否收到超声波 
返回值  : 无
/********************************************/
void int0()  
{
   flag=1;
}

/*******************************************
函数名称: int0_init()
功    能: 中断初始化
参    数: 无
返回值  : 无
/********************************************/
void int0_init() 
{
   DDRD&=~BIT(0); 
   PORTD|=BIT(0); //设置输出口上拉
   EICRA=0X02; 
   EIMSK=0X01;
   SREG=BIT(7);
}

/*******************************************
函数名称: timer0_init()
功    能: 定时器0初始化  配置输出40khz占空比50%的方波
参    数: 无
返回值  : 无
/********************************************/
void timer0_init()
{
   DDRB|=BIT(PB4);
   ASSR&=~BIT(3);
   TCCR0=0X19;
   OCR0=0XC7;//经示波器测试产生39.92kHZ的正弦方波
}

void main()
{
   DDRA=0XFF;
   PORTA=0X00;
   timer0_init();
   int0_init(); 
   while(1)
    {
	   if(flag==1)
	   {
	     flag=0;
	     PORTA=0X55;
		 delayms(500);
		 PORTA=0X00;
		 delayms(500);
	   }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -