📄 1503cs.c
字号:
/*********************************************************************/
/*公司名称:南通现代电力 */
/*模 块 名:1305cs.c CPU型号 :77E58 */
/*创 建 人:李晓军 日期:2005-08-28 */
/*修 改 人: 日期:2006-1-5 */
/*功能描述: */
/*其他说明: */
/*版 本:v1.03 */
/*************************************************************************/
#include "w77e58.h"
#include <stdio.h>
#include<intrins.h>
#include<absacc.h>
#include"bldy.h"
#include "h_b.h"
#include"tongxin.h"
//****************************函数定义************************************
//加入状态保持程序 2006-1-5 16:16
void cdog(void);//看门狗
void H450V(void);//空载
void H380V(void);
void H330V(void);
void H450V1(void);//带负载
void H380V1(void);
void H330V1(void);
void FDY(void) ;
void FDY2(void) ;//分负载,电源不分
unsigned char DYPD (void) ;// 返回当前合闸电源序号
void KZHZ6(unsigned char DYXZ);
void KZHZ70(void); //分负载
void KZHZ10(void);
void KZHLHZ(void); //合负载
void r_2543( unsigned char val ) ;
void rd2543(void) ;//延时采集 8路
void rd2543_8(void);//直接采集8路
void rd2543_1(unsigned char temp);//采集指定一路数据
void CSTZ(void) ;
/********************定时器中断*******************************************/
void INT0int (void) interrupt 0 using 2 //外部中断0
{
cxwbz = 1 ;
tjs = 0 ;
txch1 = TH0;
txcl1 = TL0;
}
void INT1int (void) interrupt 2 using 2 //外部中断1
{
unsigned char temp ;
unsigned char txch2,txcl2;
unsigned int sj1,sj2;
txch2 = TH0;
txcl2 = TL0;
temp = tjs;
if(cxwbz){
if( temp < 2 ){
sj1 = txch1<<8 ;
sj1 += txcl1;
sj2 = txch2<<8 ;
sj2+= txcl2;
if( sj2 >= sj1 ) sj2 = sj2 - sj1;
else { sj2 = sj1 - sj2 ; temp--; }
xczh = ( temp << 12 )|sj2;
}
else xczh = 0 ;
cxwbz = 0 ; //时间差计算
}
}
void cysj( unsigned char yzz ){
unsigned char temp , sjgs ,*dpp ;
unsigned int temp1 ;
if( yzz == 0XBA ){
dpp = jcsjbuf ;
if( t1ms >= 7 ){
temp1 = ad_cy[0] << 8 ;
temp1 += ad_cy[1] ;
temp1 /= 10 ;
ad_cy[0] = (char)temp1 ;
temp1 = ad_cy[2] << 8 ;
temp1 += ad_cy[3] ;
temp1 /= 10 ;
ad_cy[1] = (char)temp1 ;
temp1 = ad_cy[4] << 8 ;
temp1 += ad_cy[5] ;
temp1 /= 10 ;
ad_cy[2] = (char)temp1 ;
temp = (t1ms - 7)*3 + 36 ;
for ( sjgs = 0 ; sjgs < 3 ; sjgs++ )
*(dpp + temp + sjgs ) = ad_cy[ sjgs ] ;
}
else {
temp = (t1ms - 1) * 6 ;
for ( sjgs = 0 ; sjgs < 6 ; sjgs++ )
*(dpp + temp + sjgs) = ad_cy[ sjgs ] ;
}
}
}
void timer0int (void) interrupt 1 using 1 //0.5MS
{ EA = 0 ;
TR0=0 ;
t50 ++ ;
tcy ++ ;
hys ++ ;
t1ms ++ ;
tjs ++ ;
txjs ++ ;
TH0=0xFB; //1ms //100EH 50MS 880EH 50MS 4C0EH 50MS ;2^16-T(MS)*CRY(MHZ)*10^3/12
TL0=0x33;
TR0 = 1 ;
if( ((csbxbz == 1 )&& ( ( csbz == 6 ) || ( sdkzbz == 1 ) ))){ //测试波形 时测相位差
if ( ( t1ms > 0 ) && ( t1ms < 19 ) )
{
if( t1ms >= 18 ) csbxbz = 0 ;
rd2543_8() ;
cysj( 0XBA ) ;
}
}
EA = 1 ;
}
//串口校验字节数 5个 fe eb 55 aa ADD
void serial_1(void)interrupt 7 //串口自检
{
NOP ;
/*
if(RI_1)
{
RI_1=0;
}
if(TI_1)
{
TI_1=0;
}
*/
}
/*
unsigned char TXPD(void){
unsigned char temp ;
SBUF1 = 0xaa ;
RI_1 = 0 ;
txjs = 0 ;
while(!TI_1);
TI_1=0;
while( !RI_1 & txjs < 5 ){ cdog(); };
if(!RI_1) return 0 ;
RI_1 = 0 ;
temp = SBUF1 ;
if( temp != 0xaa )return 0 ;
SBUF1 = 0x55;
RI_1 = 0 ;
txjs = 0 ;
while(!TI_1);
TI_1=0;
while( !RI_1&&txjs < 5 ){ cdog(); };
if(!RI_1) return 0 ;
temp = SBUF1 ;
if( temp != 0x55 )return 0 ;
return 0xff ;
}
*/
/*延时*/
void delay(unsigned char temp)
{unsigned char i;
for(i=0;i<temp;i++);
}
//清看门狗
void cdog(void)
{ if(t50>100)
{
WDI=!WDI;
GZD = !GZD ;
t50=0;
}
}
void clrdog(void){
WDI = !WDI ;
GZD = !GZD ;
NOP ; NOP ; NOP ; NOP ; NOP ;
WDI = !WDI ;
}
void port_int(void){
p2=0xff;
p1=0xfe;
p0=0x00;
p3=0xff;
}
//通信初始化
/*;--------------------------------------------------------------------------------------------------I
;Fbit=(XXXXXX)/(32*12*(256-th1)) I
;XXXXXX=7.3728MHz ;XXXXXX=11.0592MHz ;XXXXXX=14.7456MHz ;XXXXXX=22.1184MHz I
;TH1=? SMOD=0 ;TH1=? SMOD=0 ;TH1=? SMOD=0 ;TH1=? SMOD=0 I
;TH1=FF 1=.2KHz ;TH1=xx ;TH1=FF 38.4KHz ;TH1=XX 38.4KHz I
;TH1=FE 9.6KHz ;TH1=FD 9.6KHz ;TH1=FE 19.2KHz ;TH1=FD 19.2KHz I
;TH1=FC 4.8KHz ;TH1=FA 4.8KHz ;TH1=FC 9.6KHz ;TH1=FA 9.6KHz I
;TH1=F8 2.4KHz ;TH1=F4 2.4KHz ;TH1=F8 4.8KHz ;TH1=F4 4.8KHz I
;TH1=F0 1.2KHz ;TH1=E8 1.2KHz ;TH1=F0 2.4KHz ;TH1=E8 2.4KHz I
;TH1=E0 0.6KHz ;TH1=D0 0.6KHz ;TH1=E0 1.2KHz ;TH1=D0 1.2KHz I
;TH1=C0 0.3KHz ;TH1=A0 0.3KHz ;TH1=C0 0.6KHz ;TH1=A0 0.6KH~ I
;TH1=80 150Hz ;TH1=40 150Hz ;TH1=80 300 Hz ;TH1=40 300 Hz I
; ;TH1=FD(S=1) 9.6K ;TH1=00 150 Hz ;
;---------------------------------------------------------------------------------------I
;Fbit=(XXXXXX)/(32*(65536-T2) I
;XXXXXX=7.3728MHz ;XXXXXX=11.0592MHz ;XXXXXX=14.7456MHz ;XXXXXX=22.1184MHz I
;RCAP2 SMOD=0 ;RCAP2 SMOD=0 ;RCAP2 SMOD=0 ;RCAP2 SMOD=0 I
;RCAP2=FFFDH 76.8KHz ;RCAP2=XXXXXXXXXXXXXX ;RCAP2=FFFDH 153.6KHz ;RCAP2=XXXXH 153.6KHzI
;RCAP2=FFFAH 38.4KHz ;RCAP2=FFF7H 38.4KHz ;RCAP2=FFFAH 76.8KHz ;RCAP2=FFF7H 76.8KHzI
;RCAP2=FFF4H 19.2KHz ;RCAP2=FFEEH 19.2KHz ;RCAP2=FFF4H 38.4KHz ;RCAP2=FFEEH 38.4KHzI
;RCAP2=FFE8H 9.6KHz ;RCAP2=FFDCH 9.6KHz ;RCAP2=FFE8H 19.2KHz ;RCAP2=FFDCH 19.2KHzI
;RCAP2=FFD0H 4.8KHz ;RCAP2=FFB8H 4.8KHz ;RCAP2=FFD0H 9.6KHz ;RCAP2=FFB8H 9.6KHzI
;RCAP2=FFA0H 2.4KHz ;RCAP2=FF70H 2.4KHz ;RCAP2=FFA0H 4.8KHz ;RCAP2=FF70H 4.8KHzI
;RCAP2=FF40H 1.2KHz ;RCAP2=FEE0H 1.2KHz ;RCAP2=FF40H 2.4KHz ;RCAP2=FEE0H 2.4KHzI
;RCAP2=FE80H 0.6KHz ;RCAP2=FDC0H 0.6KHz ;RCAP2=FE80H 1.2KHz ;RCAP2=FDC0H 1.2KHzI
;RCAP2=FD00H 0.3KHz ;RCAP2=FB80H 0.3KHz ;RCAP2=FD00H 0.6KHz ;RCAP2=FB80H 0.6KHzI
;RCAP2=FA00H 150 Hz ;RCAP2=F700H 150 Hz ;RCAP2=FA00H 0.3 Hz ;RCAP2=F700H 0.3 HzI
; ;RCAP2=F400H 150Hz ;RCAP2=EE00H 150HzI
;RCAP2=FFB6H 3113.5Hz ;RCAP2=FF91H 3113.5Hz ;RCAP2=EFA3H 110Hz ;RCAP2=EE00H 150HzI
;---------------------------------------------------------------------------------------I
// TH0=0xe7; //50ms //100EH 50MS 880EH 50MS 4C0EH 50MS ;2^16-T(MS)*CRY(MHZ)*10^3/12
// TL0=0xff; //14.7456MHZ 7.3728MHz 11.0592MHZ
*/
void Tx_int(void){
TCON = B00000101;//TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TMOD = B00100001; //GATE1 C/T1 M11 M10 GATE0 C/T0 M01 M00
TH0=0xFB; //1ms //100EH 50MS 880EH 50MS 4C0EH 50MS ;2^16-T(MS)*CRY(MHZ)*10^3/12
TL0=0x33;
SCON1=0x50; //串口1
T2CON=0x34; //T2 串口0
RCAP2H=0xFF; //4800
RCAP2L=0x40;
//RCAP2H=0xFF; //9600
//RCAP2L=0xD0;
PCON =0 ; // SMOD 0 0 0 GF1 GF0 PD IDL
SCON=0x50; //SM0 SM1 SM2 REN TB8 RB8 TI RI 方式1 可收 串口0
TH1 =0xF0; //2400 FD FE
TR0=1; //定时器0
TR1=1; //串口0
TR2=1; //串口1
}
void init_devices(void){
EA = 0;
externram_enable;
port_int();
Tx_int();
IE=B00010111;/*EA ES1 ET2 ES0 ET1 EX1 ET0 EX0*/
IP=B00000101;//assign com2 <s0in>s0out //mode com2 9600,0,8,1
EA=1;
}
//VAL为发送的命令
//接收数据送AD_buf 150us
/*--------------------------------------*/
void r_2543( unsigned char val )//
{
unsigned char i , fdata , sdata ,sdata1 ;
AD_CS = 0 ;
fdata = val ;
for ( i = 8 ; i > 0 ; i -- )
{
sdata = sdata << 1 ;
if( AD_DOUT ){ sdata++ ; }
if( fdata & 0x80 ) AD_DIN = 1;
else AD_DIN = 0 ;
fdata = fdata << 1 ;
AD_CLK = 1 ; //上升沿打入数据
AD_CLK = 0 ; //下降沿读入数据(首次为假动作)
}
for ( i = 4 ; i > 0; i --)
{
sdata1 = sdata1 << 1 ;
if( AD_DOUT ){ sdata1++ ; }
AD_CLK = 1 ; //XCK = 1;//上升沿打入数据
AD_CLK = 0 ; //XCK = 0;//下降沿读入数据(首次为假动作)
}
AD_CS = 1 ;
ad_buf[0] = ( sdata >> 4 ) & 0x0f;
ad_buf[1] = ( ( sdata << 4 ) & 0xf0 ) | ( sdata1 & 0x0f ) ;
}
//AD_N 数据采集 采7次
void rd2543( void ) {
unsigned char temp ;
if( tcy >= 2 ){ //考虑电平建立时间 5-15ms
tcy = 0 ;
r_2543( AD_N << 4 ) ;
if(AD_S != 0) {
temp = AD_S - 1 ; //写第二路数据 ,读第一路数据
ad_cy[temp*2] = ad_buf[0] ;
ad_cy[temp*2+1] = ad_buf[1] ;
}
AD_S++ ;
switch ( AD_S ){
case 1:CC = 0 ; BB = 0 ; AA = 1 ; break ;//1
case 2:CC = 0 ; BB = 1 ; AA = 0 ; break ;//2
case 3:CC = 0 ; BB = 1 ; AA = 1 ; break ;//3
case 4:CC = 1 ; BB = 0 ; AA = 0 ; break ;//4
case 5:CC = 1 ; BB = 0 ; AA = 1 ; break ;//5
case 6:CC = 1 ; BB = 1 ; AA = 0 ; break ;//6
case 7:CC = 1 ; BB = 1 ; AA = 1 ; break ;//7
case 8:CC = 0 ; BB = 0 ; AA = 0 ; break ;//0
case 9:sjcyw = 0 ; AD_S = 0 ; break ;//0
default:CC = 0 ; BB = 0 ; AA = 0 ;AD_S = 0; break ;
}
}
}
// 取8数据放于ad_cy[] 0 1 2 3 4 5
void rd2543_8( void ) {
AD_N = 3 ;
switch (cycs){
case 1:
case 5:CC = 0 ; BB = 0 ; AA = 0 ; break ;//0 0a1
case 2:
case 6:CC = 0 ; BB = 1 ; AA = 0 ; break ;//2 0a2
case 3:
case 7:CC = 1 ; BB = 0 ; AA = 0 ; break ;//4 0a3
case 4:
case 8:CC = 1 ; BB = 1 ; AA = 0 ; break ;//6 0a4
}
NOP ; NOP ; NOP ; NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
switch ( cycs ){
case 1:
case 5: CC = 0 ; BB = 0 ; AA = 1 ; break ;//1 0b1
case 2:
case 6: CC = 0 ; BB = 1 ; AA = 1 ; break ;//3 0b2
case 3:
case 7: CC = 1 ; BB = 0 ; AA = 1 ; break ;//5 0b3
case 4:
case 8: CC = 1 ; BB = 1 ; AA = 1 ; break ;//7 0b4
}
NOP ; NOP ; NOP ; NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
ad_cy[0] = ad_buf[ 0 ] ;
ad_cy[1] = ad_buf[ 1 ] ;
r_2543( AD_N << 4 ) ;
ad_cy[2] = ad_buf[ 0 ] ;
ad_cy[3] = ad_buf[ 1 ] ;
AD_N = 0 ;
switch ( cycs ){
case 1: CC = 1 ; BB = 1 ; AA = 1 ; break ;//v4
case 2: CC = 1 ; BB = 1 ; AA = 0 ; break ;//v3
case 3: CC = 1 ; BB = 0 ; AA = 1 ; break ;//v2
case 4: CC = 1 ; BB = 0 ; AA = 0 ; break ;//v1
case 5: CC = 1 ; BB = 0 ; AA = 1 ; break ;//v2
case 6: CC = 1 ; BB = 0 ; AA = 0 ; break ;//v1
case 7: CC = 1 ; BB = 1 ; AA = 1 ; break ;//v4
case 8: CC = 1 ; BB = 1 ; AA = 0 ; break ;//v3
}
NOP ; NOP ; NOP ; NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
ad_cy[ 4 ] = ad_buf[0];
ad_cy[ 5 ] = ad_buf[1];
}
//采集单路数据 ad_buf[0];ad_buf[1];
void rd2543_1(unsigned char temp){
switch ( temp ){
case 1: CC = 0 ; BB = 0 ; AA = 0 ; break ;//0
case 2: CC = 0 ; BB = 0 ; AA = 1 ; break ;//1
case 3: CC = 0 ; BB = 1 ; AA = 0 ; break ;//2
case 4: CC = 0 ; BB = 1 ; AA = 1 ; break ;//3
case 5: CC = 1 ; BB = 0 ; AA = 0 ; break ;//4
case 6: CC = 1 ; BB = 0 ; AA = 1 ; break ;//5
case 7: CC = 1 ; BB = 1 ; AA = 0 ; break ;//6
case 8: CC = 1 ; BB = 1 ; AA = 1 ; break ;//7
}
NOP ; NOP ; NOP ; NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
NOP ; NOP ; NOP ; NOP ; NOP ;
r_2543( AD_N << 4 ) ;
}
//已调试
//采集单路10次平均值数据 ad_buf[0];ad_buf[1];
/*
void rd2543_10( unsigned char ANN ) {
unsigned char i;
unsigned int temp ,temp1 ;
switch ( ANN ){
case 1: CC = 0 ; BB = 0 ; AA = 0 ; break ;//0
case 2: CC = 0 ; BB = 0 ; AA = 1 ; break ;//1
case 3: CC = 0 ; BB = 1 ; AA = 0 ; break ;//2
case 4: CC = 0 ; BB = 1 ; AA = 1 ; break ;//3
case 5: CC = 1 ; BB = 0 ; AA = 0 ; break ;//4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -