?? dzfz.c
字號:
///////////////////////////////////////////////
//****************HZKK***********************//
//
// 電子負載程序 V1.0
// Author: Data: 2006-05-10
//
//*******************************************//
///////////////////////////////////////////////
//#include "absacc.h"
#include "reg51.h"
#include "intrins.h"
///////////*******************************************************
typedef unsigned char uchar;
typedef unsigned int uint;
uchar bdata tiflag=0;
uchar bdata riflag=0;
uchar bdata flag0=0;
uchar bdata flag1=0;
uchar bdata flag2=0;
uchar bdata flag3=0;
uint data ic;
uchar data da1data1ah;
uchar data da1data1al;
uchar data da2data1ah;
uchar data da2data1al;
uchar data da1data2ah;
uchar data da1data2al;
uchar data da2data2ah;
uchar data da2data2al;
uchar data da1data3ah;
uchar data da1data3al;
uchar data da2data3ah;
uchar data da2data3al;
uchar data da1data4ah;
uchar data da1data4al;
uchar data da2data4ah;
uchar data da2data4al;
uchar data pause_fg0;
uchar data pause_fg1;
uchar data pause_fg2;
uchar data pause_fg3;
uchar data count1; //接收字節數
uint data count2;
uint data cont3a;
data uchar recibuf[8] _at_ 0x30;
data uchar pause0[2] _at_ 0x39;
//uchar code tabda[8]={0x07,0x03,0x06,0x02,0x01,0x04,0x00,0x05};
//define******************//
sbit en489=P3^5; //
sbit en574=P3^4; //DA控制使能
sbit error=P2^7; //報警端口
sbit enc1=P1^0; //單片機控制
sbit enc2=P1^1;
sbit enc3=P1^2;
sbit enc4=P1^3;
sbit ctr1=P1^4; //繼電器控制
sbit ctr2=P1^5;
sbit ctr3=P1^6;
sbit ctr4=P1^7;
//end define********************//
//////////function declare zone////////
void protect(void);
void serialint(void);
void receive_sch(void);
void get_pausef(void);
void get_stop (void);
void get1char(void);
void snd1char(uchar dats);
void quiterror(void);
void quitok(void);
void initialize(void) ;
void set7558(uchar chanadds,uchar dat2dah,uchar dat2dal);
void delay(uint gg);
void main(void)
{
initialize();
//************tiaoshi
while(1)
{
if(flag0==1)
{EA=0;
set7558(7,da1data1ah,da1data1al);
set7558(3,da2data1ah,da2data1al);
ctr1=1;
delay(100);
enc1=0;
flag0=0;
}
if(flag1==1)
{EA=0;
set7558(6,da1data2ah,da1data2al);
set7558(2,da2data2ah,da2data2al);
ctr2=1;
delay(100);
enc2=0;
flag1=0;
}
if(flag2==1)
{EA=0;
set7558(1,da1data3ah,da1data3al);
set7558(4,da2data3ah,da2data3al);
ctr3=1;
delay(100);
enc3=0;
flag2=0;
}
if(flag3==1)
{EA=0;
set7558(0,da1data4ah,da1data4al);
set7558(5,da2data4ah,da2data4al);
ctr4=1;
delay(100);
enc4=0;
flag3=0;
}
RI=0;
SM2=1;
REN=1;
ES=1;
EA=1;;
delay(10000);
_nop_();
}
}
void initialize(void)
{ error=0;
IE=0;
TCON=0;
///////////////////////////////////////ser int
TMOD=0x20;
TH1=0xff;
TL1=0xff;
PCON=0x80;
SCON=0xe0;//串口方式3,SM2=1,REN=1;//
P1=0x0F; //
ET0=0;
EX0=1 ; //OPEN EXTERAL INTX0 FOR PROTECT
TR1=1;
//ES=1;
ES=0;
EA=0;
//SM2=0;
SM2=1;
REN=0;
en574=0;
en489=0;
error=1;
_nop_();
error=0;
da1data1ah=0x00;
da2data1ah=0x00;
da1data2ah=0x00;
da2data2ah=0x00;
da1data3ah=0x00;
da2data3ah=0x00;
da1data4ah=0x00;
da2data4ah=0x00;
da1data1al=0x00;
da2data1al=0x00;
da1data2al=0x00;
da2data2al=0x00;
da1data3al=0x00;
da2data3al=0x00;
da1data4al=0x00;
da2data4al=0x00;
en574=0;
P0=0x7f;
_nop_();
en574=1;
//set7558(0,0,0);
_nop_();
set7558(0,0,0);
//delay(100);
set7558(1,0,0);
_nop_();
set7558(2,0,0);
_nop_();
set7558(3,0,0);
_nop_();
set7558(4,0,0);
_nop_();
set7558(5,0,0);
_nop_();
set7558(6,0,0);
_nop_();
set7558(7,0,0);
_nop_();
}
void set7558(uchar chanadds,uchar dat2dah,uchar dat2dal)
{uchar i ,j,k,h;
j=0xeb; //daen1=0 =d4 d2=sclk=0
en574=0;//XBYTE[dridata]=j; //set load h
P0=j; //************SYNC=0,SCLK=0,SDIN=1
_nop_();
en574=1;//XBYTE[driadds]=scldata; //set load h
_nop_();
en574=0;//XBYTE[driadds]=noselect;
_nop_();
//h=0x00; //d23-d20-d19d18=0
h=(((chanadds<<1)&0x0e)|0x10); //d23-d20/d16=0 ,chan ,d0=0 d20=1,load auto
for(i=0;i<8;i++)
{k=(h>>4)&0x08; //pick d3
j=(j&0xf7)|k;
en574=0;//XBYTE[dridata]=j; //
P0=j; //************SYNC=0,SCLK=0,SDIN=K
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0 and data
_nop_();
_nop_();
en574=0;//XBYTE[dridata]=j|0x04; //j|0x04; //
P0=j|0x04; //************SYNC=0,SCLK=1,SDIN=K
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=1
_nop_();
en574=0;//XBYTE[dridata]=j&0xfb ; //j&0xfb; //
P0=j&0xfb ; //************SYNC=0,SCLK=0,SDIN=K
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0
_nop_();
h<<=1;
}
if((dat2dah&0x08)!=0x08)
dat2dah=dat2dah|0x08 ;
else
dat2dah=dat2dah&0x7 ;
h=(dat2dah<<4)&0xf0|((dat2dal>>4)&0x0f); //d15-d12/ H 4-H4 +L 8-H4
for(i=0;i<8;i++)
{k=(h>>4)&0x08; //pick d3
j=(j&0xf7)|k;
en574=0;//XBYTE[dridata]=j; //
P0=j;
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0 and data
_nop_();
_nop_();
en574=0;//XBYTE[dridata]=j|0x04; //j|0x04; //
P0=j|0x04;
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=1
_nop_();
en574=0;//XBYTE[dridata]=j&0xfb; //j&0xfb;
P0=j&0xfb; //
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0
_nop_();
h<<=1;
}
h=(dat2dal<<4)&0xf0; //d15-d12/ L 8-H4
for(i=0;i<8;i++)
{k=(h>>4)&0x08; //pick d3
j=(j&0xf7)|k;
en574=0;//XBYTE[dridata]=j; //
P0=j;
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0 and data
_nop_();
_nop_();
en574=0;//XBYTE[dridata]=j|0x04; //j|0x04; //
P0=j|0x04;
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=1
_nop_();
en574=0;//XBYTE[dridata]=j&0xfb; //j&0xfb;
P0=j&0xfb; //
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0
_nop_();
h<<=1;
}
en574=0;//XBYTE[dridata]=0x7f; // 0x7a; //0xfa; // daen=h //slck=0
P0=0x7f;
_nop_();
en574=1;//XBYTE[driadds]=scldata; //
_nop_();
en574=0;//XBYTE[driadds]=noselect; //slck=0 and data
//XBYTE[driadds]=0xff;
_nop_();
}
void protect(void) interrupt 0
{uchar data tmp;
delay(10000);
tmp=P2;
tmp=tmp&0x0f;
if ((tmp&0x01)==0x00)
{
ctr1=0;
enc1=1;
}
if ((tmp&0x02)==0x00)
{
ctr2=0;
enc2=1;
}
if ((tmp&0x04)==0x00)
{
ctr3=0;
enc3=1;
}
if ((tmp&0x08)==0x00)
{
ctr4=0;
enc4=1;
}
}
/////////////////serial interupt**********************
void serialint(void) interrupt 4 using 3
{uchar data ir,temp[3]={0};
EA=0;
_nop_();
for(ir=0;ir<1;ir++)
//address//
{ get1char();
if(riflag==0)
{//quiterror();
en489=0;
SM2=1;
EA=1;
return;
}
temp[0]=SBUF;
}
temp[1]=(0xb0);
if (temp[0]!=temp[1])//(XBYTE[cs5_add245]&0x0f|0xb0)) ;////0x00) compare address =b0?
{_nop_();//quiterror();
en489=0;
SM2=1;
EA=1;
return;
}
_nop_();
// SBUF=0X77;
//while(1) //////test
//SM2=0; //NEW
snd1char(0xaa); //snd1char(0xaa);tichar(0x88);
_nop_();
snd1char(0x55);
snd1char(temp[0]); //send back address ;b0;
en489=0;
SM2=0;
get1char();
if (riflag==0)
{quiterror();
return;
}
temp[0]=SBUF;
switch(temp[0])
{case 0xf1: receive_sch();break;
case 0xf2: get_pausef();break;
case 0xf3: get_stop();break;
default: _nop_();break; }
//quitok();
}
//
void receive_sch(void) //F1
{
get1char();
if (riflag!=1)
{quiterror();
return;
}
recibuf[0]=SBUF;
if (recibuf[0]==0x01)
{count1=7;}
else
{if (recibuf[0]==0x02)
{ count1=7;}
else quiterror(); return;
_nop_(); }
/////
for(ic=0;ic<count1;ic++)
{ get1char();
if (riflag!=1)
{quiterror();
return;
}
recibuf[ic+1]=SBUF; // READ SBUF
}
//
count2=0;
for(ic=0;ic<(count1-1);ic++) //count1-4
{_nop_();
count2=count2+recibuf[ic]; //temp1bytex ;//count2+recibuf[i+2] ;
}
//cont3a=recibuf[ic];
//cont3a<<=8;
//cont3a+=recibuf[ic+1];
cont3a=recibuf[ic]+recibuf[ic+1]*256;
if (cont3a==count2)//(cont3a==count2)
{
quitok();
switch(recibuf[1])
{
case 0x00: flag0=1;
da1data1ah=recibuf[3];
da1data1al=recibuf[2];
da2data1ah=recibuf[5];
da2data1al=recibuf[4];
break;
case 0x01: flag1=1;
da1data2ah=recibuf[3];
da1data2al=recibuf[2];
da2data2ah=recibuf[5];
da2data2al=recibuf[4];
break;
case 0x02: flag2=1;
da1data3ah=recibuf[3];
da1data3al=recibuf[2];
da2data3ah=recibuf[5];
da2data3al=recibuf[4];
break;
case 0x03: flag3=1;
da1data4ah=recibuf[3];
da1data4al=recibuf[2];
da2data4ah=recibuf[5];
da2data4al=recibuf[4];
break;
default: break;
}
return; //get sch success, back aa,55 ,33
}
quiterror(); //fail, back aa,55 ,88
return;
}
//
void get_pausef(void) //F2
{
for(ic=0;ic<2;ic++)
{ get1char();
if (riflag!=1)
{quiterror();
return;
}
pause0[ic]=SBUF; // READ SBUF
}
switch(pause0[0])
{
case 0x00: pause_fg0=pause0[1];
if (pause_fg0==0x77)
{enc1=1;
}
if (pause_fg0==0x66)
{enc1=0;
}
break;
case 0x01: pause_fg1=pause0[1];
if (pause_fg1==0x77)
{enc2=1;
}
if (pause_fg1==0x66)
{enc2=0;
}
break;
case 0x02: pause_fg2=pause0[1];
if (pause_fg2==0x77)
{enc3=1;
}
if (pause_fg2==0x66)
{enc3=0;
}
break;
case 0x03: pause_fg3=pause0[1];
if (pause_fg3==0x77)
{enc4=1;
}
if (pause_fg3==0x66)
{enc4=0;
}
break;
default: break;
}
quitok();
return; //get sch success, back aa,55 ,33
}
//
//
void get_stop (void) //F3
{uchar data im;
get1char();
if (riflag!=1)
{quiterror();
return;
}
im=SBUF;
switch(im)
{ case 0x00: enc1=1;
da1data1ah=0x00;
da1data1al=0x00;
da2data1ah=0x00;
da2data1al=0x00;
flag0=1;
break;
case 0x01: enc2=1;
da1data2ah=0x00;
da1data2al=0x00;
da2data2ah=0x00;
da2data2al=0x00;
flag1=1;
break;
case 0x02: enc3=1;
da1data3ah=0x00;
da1data3al=0x00;
da2data3ah=0x00;
da2data3al=0x00;
flag2=1;
break;
case 0x03: enc4=1;
da1data4ah=0x00;
da1data4al=0x00;
da2data4ah=0x00;
da2data4al=0x00;
flag3=1;
break;
default: break;
}
quitok();
return;
}
//
//
void snd1char(uchar dats)
{uint data cout;
//SM2=0;
tiflag=0;
en489=1;
SBUF=dats;
//while(TI==0);
//TI=0;
for(cout=0;cout<10000;cout++)
{if(TI==1)
{tiflag=1;
TI=0;
break;
}
}
_nop_();
}
//
void get1char(void)
{uint data cout;
riflag=0;
for(cout=0;cout<10000;cout++)
{if(RI==1)
{riflag=1;
RI=0;
break;
}
}
_nop_();
}
//
void quiterror(void)
{_nop_();
snd1char(0xaa);
_nop_();
snd1char(0x55);
snd1char(0x88);
en489=0;
SM2=1;
EA=1;
}
//
void quitok(void)
{_nop_();
snd1char(0xaa);
_nop_();
snd1char(0x55);
snd1char(0x33);
en489=0;
SM2=1;
EA=1;
}
void delay(uint gg)
{uint tt;
for(tt=0;tt<gg;tt++)
{_nop_();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -