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

📄 main.c

📁 基于Keil C51编译环境的单片机程序
💻 C
字号:
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>

static unsigned char data dat[50];						//dat[50] is used to store sampling values
static unsigned char ind; 								//index var

void initial_RAM ();									//initializing RAM function
//void initial_timer (int pTMOD,pTH0,pTL0,pTH1,pTL1);		//initializing timer function, parameters defined as names
void initial_COM ();
void start_sampling ();
void start_transport ();
int main()
{
	initial_RAM();										//initializing RAM

	EA = 1;												//enable global interrupt

	//initial other varibles
	ind = 0;

	initial_COM();

	//start_sampling();
	
	while(1);
}

//initializing RAM
void initial_RAM ()
{
	for (ind = 1; ind < 50; ind++)
	{
		dat[ind] = 0x00;
	}
}

void start_sampling()
{
	//initializing timer
	TMOD = 0x15;										//timer0:counter, timer1:timer for 50 ms, mode = 16 bit C/T
	TH0 = 0x00;
	TL0 = 0x00;
	TH1 = 0x3C;
	TL1 = 0xB0;

	ET1	= 1;											//enable timer1 interrupt

	TR0 = 1;											//start timer
	TR1 = 1;
}

void start_transport()
{
/*
	//initializing COM
	SCON = 0x40;										//uart in mode 1 (8 bit), REN=0
	TMOD = 0x20;										//timer 1 in mode 2
	TH1 = 0xFD;											//9600 Bds at 11.059MHz
	TL1 = 0xFD;											//9600 Bds at 11.059MHz
	TR1 = 1;

	ES = 1;												//enable COM interrupt

//	ES = 0;												//disable COM interrupt
*/
	
	initial_COM();

	//transporting
	do
	{
		SBUF = dat[ind];
		ind--;
		while(!TI);
		TI = 0;
	}
	while (ind != 0);
}

//timer interrupt
void timer1out (void) interrupt 3
{
	//stop timer
	TR0 = 0;
	TR1 = 0;

	//save counter data,low byte in lower address
	dat[ind] = TL0;
//	dat[ind] = ind;
	ind++;
	dat[ind] = TH0;
//	dat[ind] = ind;
	ind++;

	//if sampling ends, tranport datas. Or goon sampling
	if (ind >= 50)
	{
        ind--;

		start_transport();
	}
	
	//reset timer
	TMOD = 0x15;
	TH0 = 0x00;
	TL0 = 0x00;
	TH1 = 0x3C;
	TL1 = 0xB0;

	//restart timer
	TR0 = 1;
	TR1 = 1;
}

//COM interrupt
void COM_interrupt (void) interrupt 4
{
	
	TR1 = 0;											//stop timer1

	if (RI == 1) RI = 0;								//clear RI flag
	if (TI == 1) TI = 0;								//clear TI flag

	start_sampling();
	
}

/*
void initial_timer(int pTMOD,pTH0,pTL0,pTH1,pTL1)
{
	TMOD = pTMOD;
	TH0 = pTH0;
	TL0 = pTL0;
	TH1 = pTH1;
	TL1 = pTL1;
}
*/

void initial_COM ()
{
	SCON = 0x50; 										//uart in mode 1 (8 bit), REN=1
	TMOD = 0x20 ;										//Timer 1 in mode 2
	TH1 = 0xFD;											//9600 Bds at 11.059MHz
	TL1 = 0xFD;											//9600 Bds at 11.059MHz
	ES = 1;												//Enable serial interrupt
	REN = 1;											//enable receiving
	TR1 = 1;											//start timer1 bouds_gen
	RI = 0;
	TI = 0;
	SM0 = 0;
	SM1 = 1;
}

⌨️ 快捷键说明

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