main.c

来自「1个检测波形的小程序。可以测量波形的长度」· C语言 代码 · 共 94 行

C
94
字号
#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 + =
减小字号Ctrl + -
显示快捷键?