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

📄 main.c

📁 8051F320用于采集列车速度信号,并进行信号分析的程序
💻 C
字号:
#include <c8051f320.h>
//#include <INTERRUPT_ISR.c>


void Sysclk_Init();
void ADC_Init();

sfr EIP1 = 0XF6;
#define SYSCLK_EXT	24000000
#define	BAUDRATE	9600
int zt_speed_gps=32;
sbit led=P1^6;
sbit mc=P0^1;
unsigned char zt_times[1];
unsigned char gps_time[1];
unsigned long zt_speed=0;
extern	int n;
extern  bit tx_flag;
extern 	unsigned char  sci_tx[30];
extern  unsigned char  sci_rx[26];
extern	bit tx;	
extern  bit rx_out;
extern  bit sd_js;
extern  char status;
extern  int p;
void Sysclk_Init(void)
{
	int x;

	OSCXCN  =0x67;

	P0MDIN &=0xF3;
	P0SKIP |=0x0C;
	XBR0 |=0x08;
	for(x = 0;x < 5000;x)
   	x++;
	while(!(OSCXCN & 0x80));
	CLKSEL  = 0X01;
	OSCICN  = 0X00;	
	CLKMUL  = 0x00;	
	VDM0CN &= 0X40;
}

void Port_Init(void)
{
	P0MDIN  |= 0X03;
	P0MDOUT |= 0xFF;

	P1MDIN  &= 0XFE;
	P1MDOUT |= 0XFF;
	P2MDIN   = 0XFF;
	P2MDOUT  = 0XFF;	

	P0SKIP |= 0X0C;
	P1SKIP  = 0X01;
	P2SKIP  = 0X00;



	XBR0  = 0X01;
	XBR1 |= 0XD0;
}

void Time0_Init(void)
{
	TCON |= 0X00;
	TMOD = 0x05;                          CKCON |= 0x02;
	ET0 = 1;	TR0 = 0;
	IT01CF |= 0X67;
}

void Time2_Init(void)
{
	TMR2CN = 0X00; 
	TMR2CN |= 0X00;
	TR2 = 0;
	ET2 = 1;
}

void ADC_Init(void)
{
	REF0CN  = 0x0E;	
	AMX0P  =  0X00;
	AMX0N  =  0X1F;
	ADC0CF  = (SYSCLK_EXT/1000000) << 3;
	ADC0CF |= 0XC2;
	ADC0CN |= 0X80;
	EIP1 |= 0X08;
	EIE1  |= 0X08;
}


void Timer3_Init(void)			
{
	TMR3CN = 0X00;
	TMR3RLL  = 250;                 	TMR3RLH  = 17; 
	EIP1 |= 0X80;                  	EIE1 |= 0X80;	TMR3CN |= 0X04;
}

void UART0_Init(void)
{
	SCON0 = 0x10;

	TH1 = -(SYSCLK_EXT/BAUDRATE/2/48);
	CKCON &= ~0X0B;
	CKCON |=  0X02;
	TI0 = 0;
	ES0 = 1;
}
void Timer1_Init (void)
{
	TL1		= TH1;			TMOD	&= ~0Xf0;		TMOD	|= 0X20;
	TR1		= 1;	
}

void main(void)
{

	unsigned long temp=0;
	PCA0MD = 0x00;	
	Sysclk_Init();
	Port_Init();
	Time0_Init();
	Time2_Init();
	UART0_Init();
	Timer1_Init();
	ADC_Init();
	Timer3_Init();
	TR0 = 1;
	led=1;
	EA = 1;
	mc=0;
	while(1)
	{
		while(sd_js)
		{
			sd_js=0;
			zt_speed = 0;
			zt_speed=zt_speed_gps*36;
			zt_speed=zt_speed*p;
			zt_speed=zt_speed/1000;
			sci_tx[6]=zt_speed/256;
			sci_tx[7]=zt_speed%256;
			zt_speed=1000000*40/zt_speed_gps/p;
			zt_times[0]=-zt_speed%256;
			zt_times[1]=-zt_speed/256;
			switch(status)
			{
				case 1:
				TMR2RLL =zt_times[0];
				TMR2RLH =zt_times[1];
				TR2=1;
				break;
				case 2:
				TMR2RLL=gps_time[0];
				TMR2RLH=gps_time[1];
				TR2=1;
				break;
				case 3:
				TMR2RLL=gps_time[0];
				TMR2RLH=gps_time[1];
				TR2=1;
				break;
				case 0:
				TR2=0;
				break;
			}
		}

		while(rx_out)
		{
			rx_out=0;
			sci_tx[10]=sci_rx[1];
			sci_tx[11]=sci_rx[2];
			sci_tx[12]=sci_rx[3];
			sci_tx[13]=sci_rx[4];
			sci_tx[14]=sci_rx[5];
			sci_tx[15]=sci_rx[6];
			sci_tx[16]=sci_rx[7];
			sci_tx[17]=sci_rx[8];			
			temp=sci_rx[11]*128+sci_rx[12];
			sci_tx[18]=sci_rx[11];
			sci_tx[19]=sci_rx[12];
			sci_tx[20]=sci_rx[16];
			sci_tx[21]=sci_rx[19];
			sci_tx[22]=sci_rx[20];
			sci_tx[23]=sci_rx[21];
			sci_tx[24]=sci_rx[22];
			sci_tx[25]=sci_rx[23];
			sci_tx[26]=sci_rx[24];
			if(temp<=20)
			{
				gps_time[0] = 0;
				gps_time[1] = 0;
				status &= 0x01;
			}
			else
			{
				temp=temp*50/36;
				temp=2000000/temp;
				gps_time[0]=-temp%256;
				gps_time[1]=-temp/256;
				status|=0X02;
				if(sci_rx[16]>=3) status|=0X02;
			}
		}

	}
}

⌨️ 快捷键说明

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