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

📄 main.c

📁 1个检测波形的小程序。可以测量波形的长度
💻 C
字号:
#include <stdio.h>
#include <reg51.h>

sbit LED = P1^0;
sbit INT0_PIN = P3^2;
unsigned short Tlow,Thigh;
unsigned short Tlow1,Thigh1;
char Tactive=0;

unsigned short timer0_value(void)
{
	if(TF0)return 0xFFFF;
	return TH0*256+TL0;
}

void timer0_reset(void)
{
	TF0 = TH0 = TL0 = 0x00;
}

void int0_irq(void) interrupt 0 // 0:INT0 1:TIMER0 2:INT1 3:TIMER1 4:SERIAL
{
	EX0 = 0;		// disable int0 interrupt
	TR0 = 0;		// stop timer0
	Thigh = timer0_value();
	Tlow1 = Tlow;
	Thigh1 = Thigh;
	Tactive = 1;
	timer0_reset();
	TR0 = 1;		// start timer0
	while(1)
	{
		if(INT0_PIN)break;
		if(TF0)break;
	}
	TR0 = 0;		// stop timer0
	Tlow = timer0_value();
	timer0_reset();
	TR0 = 1;		// start timer0
	EX0 = 1;		// enable int0 interrupt
}

void int0_init(void)
{
	IT0 =1;		// mode: high to low interrupt
	EX0 =1;		// enable int0 interrupt
}

void timer0_init(void)
{
	TMOD = (TMOD&0xF0)|0x01;
	TF0  = 0;
	TR0  = 1;
}

void uart_init(void)
{
	ES = 0;			// Disable Serial Interrupt
	SCON = 0x50;	// Mode2,N,8,1
	PCON = 0x80;	// double baurdate
	TH1 = 0xFF;		// baudrate:57600@11.0592M
	TL1 = 0xFF;
	TMOD= (TMOD&0x0F)|0x20;
	TR1 = 1;		// Timer1 Start
	TI = 0;
}

void uart_write(unsigned char ch)
{
	SBUF=ch;
	while(!TI);
	TI=0;
}

void main(void)
{
	int0_init();
	timer0_init();
	uart_init();
	EA =1;
	while(1)
	{
		if(Tactive)
		{
			Tactive=0;
			uart_write(Tlow1/256);
			uart_write(Tlow1%256);
			uart_write(Thigh1/256);
			uart_write(Thigh1%256);
		}
	}
}

⌨️ 快捷键说明

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