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

📄 main.c

📁 这个是我设计的采用c8051f330为核心的测温系统源码
💻 C
字号:
#include "main.h"
#include "initial.h"
#include "ds18b20.h"
#include "at45db081.h"
#include "timer.h"
#include "uart.h"
#include <stdio.h>
sbit EN=P1^4;
sbit LED=P1^5;
static uchar s_counter;
static uchar command;
static uchar uart_error;
static uchar data_length;
static bit measure_flag;
static bit start_flag;
static bit stop_flag;
static bit time_finish;
static uint time_interval;
uchar xdata databuffer[10] _at_ 0x0000;
uchar xdata outbuffer[265] _at_ 0x0010;
static uint temper;
static uint pageaddr;
static uint addr;
static uint readaddr;
static uint addr_counter;
char putchar (char c)  {
  SBUF0 = c;		
  while (!TI0);
  TI0= 0;
  return 0;
}
void flag_initial()
{
	measure_flag=0;
	start_flag=0;
	stop_flag=1;
	time_finish=0;
}
void main()
{
	uint j;
    Init_Device();
	flag_initial();
	time_interval=TIMER_COUNTER;
	EN=0;
	//LED=0;
	OUT_CRITICAL
	StartTimer0
	StartTimer1
	RI0=0;
	TI0=0;
	while(1)
		{
			if(measure_flag&&start_flag)
				{
					temper=GetTempValue();
					FlashBufferWrite(addr, BUFFER_1_WRITE, 2, &temper);
					addr=addr+2;
					addr_counter++;
					if(addr==264)
						{
							BufferToPageWithErase(B1_TO_PAGE_WITH_ERASE, pageaddr);
							/*       //for test
							PageToBuffer(PAGE_TO_B2_XFER, pageaddr);
							FlashBufferRead(0, BUFFER_2_READ, 264, outbuffer);
							ENTER_CRITICAL
							printf(outbuffer);	
							OUT_CRITICAL
							*/
							pageaddr++;
							addr=0;
							if(pageaddr==4096)
								pageaddr=0;
							
						}
					measure_flag=0;
				}
			if(uart_error!=0x00)
				{
				switch(uart_error)
					{
						case FRAME_GOOD:
							switch(command)
								{
									case UPLOAD_ALL_DATA:
										if(stop_flag)
											{
												for(j=0;j<pageaddr;j++)
													{
														PageToBuffer(PAGE_TO_B1_XFER, j);
														FlashBufferRead(0, BUFFER_1_READ, 264, outbuffer);
														outbuffer[264]='\0';
														ENTER_CRITICAL//very important
														printf(outbuffer);
														OUT_CRITICAL//very important
													}
												PageToBuffer(PAGE_TO_B1_XFER, pageaddr);
												FlashBufferRead(0, BUFFER_1_READ, addr, outbuffer);
												outbuffer[addr]='\0';
												ENTER_CRITICAL
												printf(outbuffer);
												OUT_CRITICAL
											}
										break;
									case START_MEASURE:
										start_flag=1;
										stop_flag=0;
										break;
									case STOP_MEASURE:
										start_flag=0;
										stop_flag=1;
										break;
									case SET_TIME_INTERVAL:
										if(stop_flag)
											{
												while(!time_finish);
												time_finish=0;
												ENTER_CRITICAL
													time_interval=0;
												for(j=0;j<data_length;j++)
													time_interval=time_interval*256+databuffer[j];
												printf("OK\n");
												OUT_CRITICAL
											}		
										break;
									case UPLOAD_COUNTER:
										ENTER_CRITICAL
										printf("%u",addr_counter);
										OUT_CRITICAL
										break;		
									case RESET_ADDR:
										if(stop_flag)
											{
												pageaddr=0;
												addr=0;
												addr_counter=0;
											}
										break;
								}
								
					}
				uart_error=0x00;
				}
			SLEEP
		}
	/*for(i=0;i<264;i++)
		FlashBufferWrite(i, BUFFER_1_WRITE, 1, "4");*/
	//t=GetTempValue();
	//buffer[0]=(uchar)t;
	//buffer[1]=(uchar)(t>>8);
	//FlashBufferWrite(0, BUFFER_1_WRITE, 2,buffer);
	//WP=1;
	//FlashBufferWrite(0, BUFFER_1_WRITE, 2, buffer);
	//PageProgViaBuffer(PAGE_PROG_THROUGH_B1,0,0,264,buffer);
	//BufferToPageWithOutErase(B1_TO_PAGE_WITHOUT_ERASE, 0);//用这个可以为什么用erase的不行呢
	//BufferToPageWithErase(B1_TO_PAGE_WITH_ERASE, 0);
	/*for(i=0;i<256;i++)
		Delay15us();*/
	//AutoPageRewiteViaBuffer(AUTO_PAGE_REWRITE_THROUGH_B1, 0);
	//PageToBuffer(PAGE_TO_B1_XFER, 0);
	//FlashBufferRead(0, BUFFER_1_READ, 2, tempbuffer);
	//PageRead(0, 0, 2, tempbuffer);
	while(1);
}


void Timer0_Isr()interrupt 1
{
	s_counter++;
	if(s_counter==time_interval)
		{
			measure_flag=1;
			s_counter=0;
			//measure_flag=1;
		}
}
void Uart_Isr()interrupt 4
{
	static uchar RecState=CHECKHEAD1;
	static uchar len;
	static uchar checksum;
	static uchar len_total;
	static bit com_flag;
	static bit data_flag;
	static bit time_flag;
	if(RI0)
		{
			RI0=0;
			switch(RecState)
				{
					case CHECKHEAD1:
							if(SBUF0==HEAD1)
								RecState=CHECKHEAD2;
							else
								RecState=CHECKHEAD1;
							break;
					case CHECKHEAD2:
							if(SBUF0==HEAD2)
								RecState=CHECKTYPE;
							else if(SBUF0==HEAD1)
								RecState=CHECKHEAD2;
							else
								RecState=CHECKHEAD1;
							break;
					case CHECKTYPE:
						       if(SBUF0==COMMAND) 
						       	{
							   		com_flag=1;
									RecState=LEN;
									checksum=SBUF0;
						       	}	
							else if(SBUF0==DATA)
								{
									data_flag=1;
									RecState=LEN;
									checksum=SBUF0;
								}	
							else
								{
									com_flag=data_flag=0;
									RecState=CHECKHEAD1;
								}
							break;
					case LEN:
						       if(com_flag)
						       	{
						       		if(SBUF0==0x01)
						       			{
						       				//len=0;
											//len_total=SBUF0;
											RecState=RECEIVEDATA;
											checksum=checksum^SBUF0;
						       			}
									else
										{
											RecState=CHECKHEAD1;
											com_flag=data_flag=0;
											checksum=0;
											uart_error=COMMAND_OVERLOW;
										}	
						       	}
							else if(data_flag)
								{
									if(SBUF0>10)
										{
											RecState=CHECKHEAD1;
											com_flag=data_flag=0;
											checksum=0;
											uart_error=BUFFER_OVERLOW;
										}
									else
										{
											len=0;
											len_total=SBUF0;
											data_length=SBUF0;
											checksum=checksum^SBUF0;
											RecState=RECEIVEDATA;
										}
								}
							else
								{
									RecState=CHECKHEAD1;
									checksum=0;
									uart_error=STATE_WRONG;
								}	
							break;
					case RECEIVEDATA:
							if(com_flag)
								{
									RecState=CHECKSUM;
									command=SBUF0;
									switch(command)
										{
											case SET_TIME_INTERVAL:
												time_flag=1;
												break;
										}
									checksum=checksum^SBUF0;//
									com_flag=0;
								}
							else if(data_flag)
								{
									databuffer[len]=SBUF0; 
									checksum=checksum^SBUF0;
									len++;
									RecState=RECEIVEDATA;
									if(len==len_total)
										{	
											if(time_flag)
												{
													time_flag=0;
													time_finish=1;
												}
											len=len_total=0;
											data_flag=0;
											RecState=CHECKSUM;
										}
								}
							else
								{
									com_flag=data_flag=0;
									len=len_total=0;
									RecState=CHECKHEAD1;
									checksum=0;
									uart_error=STATE_WRONG;
								}
							break;
					case CHECKSUM:
							if(checksum!=SBUF0)
								{	
									uart_error=CHECKSUM_ERROR;
									RecState=CHECKHEAD1;
									len=len_total=0;
									com_flag=data_flag=0;
									checksum=0;
								}
							else
								{
									uart_error=FRAME_GOOD;
									RecState=CHECKHEAD1;
									len=len_total=0;
									com_flag=data_flag=0;
									checksum=0;
								}
							break;
					default:
							RecState=CHECKHEAD1;
							len=len_total=0;
							com_flag=data_flag=0;
							checksum=0;
				}
		}
	
}

⌨️ 快捷键说明

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