📄 test.c
字号:
#include <stdarg.h>///add,03-8-22,自定义printf
#include "main.h"
#include "x5045.h"
#include "i2c.h"
void UART();
void T0_int();
void init_CPU();
void Clear_rcv_buff();
uchar printat(uchar *COMMAND,uchar *RESULT);
void putunchar (char c);
void x9318(bit ud, uchar dat);
unsigned int cal_crc(unsigned char *ptr, unsigned char len);
uchar rcv_serch(uchar *serch);
void rcv_data();
void reset_5045();
uchar idata pr[10];
uchar t50ms;
uchar rcv_point ;
uchar idata rcv_buff[15];
uchar t1s1,t1s2,t1m1, heat_vale;
uint idata tem_value1, tem_value2;
uchar heating;
uint idata crc_value;
bit data_bit;
bit tem1_bit,tem2_bit,heat_bit;
bit ctrcool_bit,ctrheat_bit;
uchar heat_value;
void main()
{
uchar i;
char temp1;
uint j;
data_bit=0;
ctrcool_bit=ctrheat_bit=0;
init_CPU();
WRSR_25045();
write_7416C(0x00);
write_7416C(0x02);
WDT=1;
REST_DOG();
i=Byte_Read(0,10);
if(i!=10) reset_5045();
Clear_rcv_buff();
tem_value1=Byte_Read(0,1);
tem_value2=Byte_Read(0,3);
write_7416T( 0,0x02,tem_value1 );
write_7416T( 0,0x03,tem_value1+6);
write_7416T( 0x02,0x02,tem_value2);
write_7416T( 0x02,0x03,tem_value2+6);
heat_value=0;
x9318(0,100);
heat_value=0;
j=read_7416(0x00);
if(j>tem_value1)
{ctrcool_bit=1;P22=1;}
else
ctrheat_bit=1;
while(1)
{
WDT=1;
REST_DOG();
if(t1s2>6)
{
t1s2=0;
}
if(data_bit)
{
ES=1;
rcv_data();
}
if(ctrcool_bit&&(t1s1>4))
{
P32=1;
if(P32)
{
ctrcool_bit=0; P22=0;EX0 =1;
}
t1s1=0;
}
if(ctrheat_bit&& (t1s1>6))
{
t1s1=0;
j=read_7416(0x00);
putunchar(j);
temp1=tem_value1-j;
putunchar(temp1);
if(temp1>=0)
{
if(temp1>20)
{
if(65<heat_value)
{
x9318(0, heat_value-65);
//heat_value=65;
// putunchar (temvalue);
} //test
else
{
x9318(1, 65-heat_value);
//heat_value=65;
}
heat_value=65;
putunchar (heat_value);
}
else if((temp1<=20)&&(temp1>15))
{
if(20<heat_value)
{
x9318(0, heat_value-20);
} //test
else
{
x9318(1, 20-heat_value);
}
heat_value=20;
putunchar (heat_value);
}
else if((temp1<=15)&&(temp1>10))
{
if(15<heat_value)
{
x9318(0, heat_value-15);
} //test
else
{
x9318(1, 15-heat_value);
}
heat_value=15;
putunchar (heat_value);
}
else if((temp1<=10)&&(temp1>5))
{
if(10<heat_value)
{
x9318(0, heat_value-10);
} //test
else
{
x9318(1, 10-heat_value);
}
heat_value=10;
putunchar (heat_value);
}
else
{
if(5<heat_value)
{
x9318(0, heat_value-5);
} //test
else
{
x9318(1, 5-heat_value);
}
heat_value=5;
putunchar (heat_value);
}
}
else
{
x9318(0, heat_value-0);
heat_value=0;
putunchar (heat_value);
}
}
}
}
void init_CPU()
{
WDTD=100;
WDTC=0x0f;
SCON=0x50;
TMOD=0x21; // T1:baut,T0:Time 16bit
TCON=0x50; // TR0,TR1=1.低电平触发,IT0=IT1=0;
TH1=0xfd;TL1=0xfd;PCON=0; // Uart Baut=9600
TH0=0x4c;TL0=0x00; // T0=50ms
IE=0x92; //开全局中断,定时器0。串口中断。/关两个外部中断EX0=EX1=0;
IP=0x10; // UART高
//AUXR=0x00;//内部XRAM,ALE为1/6FOSC,AUXR=0x10外部XRAM
AUXR=0x01; //ALE IS common
}
void Clear_rcv_buff()
{
uchar i;
for(i=0;i<BUFF_LEN;i++) rcv_buff[i]=0;
rcv_point=0;///add,03-8-22
}
void putunchar (uchar c)///mod,03-8-22,自定义printf///mod,03-9-9可能更可靠
{
TI = 0;
ES=0;///add,03-8-22,最后一次使用完需ES=1
SBUF = c;
while (!TI);
ES=1;
}
void int_0() interrupt 0 using 3
{
EX0=0;
ctrcool_bit=1;
P22=1;
}
void int_1() interrupt 2 using 3
{
EX1=0;
// cool2_bit=1;
}
void T0_int() interrupt 1 using 2
{ TR0=0;
TH0=TH0+0x4c;//TL0=0xe0; // T0=5ms
t50ms++;
if(t50ms>=20)
{
t50ms=0;
t1s1++;
t1s2++;
}
TR0=1;
}
void UART() interrupt 4 using 1
{
uchar i;
if(TI) TI=0;
if(RI)
{
RI=0;
if(rcv_point < BUFF_LEN )
{
rcv_buff[rcv_point]=SBUF;
rcv_point++;
}
else
{
for(i=0;i<(BUFF_LEN-1);i++) rcv_buff[i]=rcv_buff[i+1];
rcv_buff[BUFF_LEN-1]=SBUF;
}
if(rcv_buff[rcv_point-1]=='#')
{
data_bit=1;
}
}
}
void x9318(bit ud, uchar dat)
{
CS=0;
if(ud) UD=1;//为UP
else UD=0;//为DOWN
for(;dat>0;dat--)
{
INC=1;
delay(1);
INC=0;
delay(1);
}
INC=1;
delay(1);
CS=1;
}
void delay(uint dat)
{
uchar i;
while(dat--)
{
WDT=1;
for(i=0;i<120;i++)
{;}
}
}
uchar rcv_serch(uchar *serch)
{
uchar i,j,k,lenth;
lenth=strlen(serch);
for(i=0;i<(BUFF_LEN-lenth);i++)
{
k=0;
for(j=0;j<lenth;j++)
{
if(rcv_buff[i+j]==serch[j]) k=k+1;
}
if(k==lenth) return i;
}
i=BUFF_LEN+2;
return i;
}
void rcv_data()
{
uchar i,k,temp;
uint j;
delay(1000);
WDT=1;
REST_DOG();
data_bit=0;
i=rcv_serch("H");
if(i>BUFF_LEN) { Clear_rcv_buff() ; return; }
ES=0;
temp=rcv_buff[i+1];
pr[k]=0;
putunchar (temp);
tem_value1=temp;
write_7416T( 0,0x02,tem_value1 );
write_7416T( 0,0x03,tem_value1+6);
Byte_Write(0,1,temp);
j=read_7416(0x00);
if(j>tem_value1)
{
ctrcool_bit=1;P22=1;ctrheat_bit=0;
}
else
{
ctrheat_bit=1;ctrcool_bit=0;P22=0;EX0=0;
}
x9318(0, 100);
heat_value=0;
putunchar ('K');
ES=1;
Clear_rcv_buff();
}
void reset_5045()
{
uchar i;
for(i=0;i<9;i++)
{
Byte_Write(0,i,0);
}
Byte_Write(0,10,10);
x9318(0,100);
}
/*====================================================================================================
PID计算部分
=====================================================================================================*/
/*uchar PIDCalc( PID *pp, uint NextPoint )
{
int dError,
Error;
unsigned long pid_value;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = Error-pp->LastError ; // 当前微分
pp->LastError = Error;
pid_value=100*(pp->Proportion * Error+ pp->Integral * pp->SumError
+ pp->Derivative * dError )/5600;
if( pid_value <0) pid_value=0;
if(pid_value >95) pid_value=96;
return (uchar)pid_value;
}/*
/*====================================================================================================
Initialize PID Structure
=====================================================================================================*/
/*void PIDInit (PID *pp)
{
memset ( pp,0,sizeof(PID));
}*/
/*====================================================================================================
Main Program
=====================================================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -