📄 main.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 + -