📄 pwbop.c
字号:
//ICC-AVR application builder : 2008-6-30 8:37:18
// Target : M8
// Crystal: 4.0000Mhz
#include <iom8v.h>
#include <macros.h>
#include "PWBOP.H"
#include "delay.H"
unsigned char step;
void port_init(void)
{
PORTB = 0x18;
DDRB = 0xF9;
PORTC = 0x30;
DDRC = 0x30;
PORTD = 0x01;
DDRD = 0xFF; //OutPut
}
//TIMER0 initialize - prescale:256
// desired value: 10mSec
// actual value: 9.984mSec (0.2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x64; //set count
TCCR0 = 0x04; //start timer
}
//ADC initialize
// Conversion time: 104uS
void adc_init(void)
{
ADCSR = 0x00; //disable adc
ADMUX = 0x40; //select adc input 0
ACSR = 0x80;
ADCSR = 0xE7;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
adc_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
/**************Check Limit SW*************/
unsigned char Down(void)
{
while(((PINC&0x08)==0x08)|((PINB&0x04)==0x00)) //PINB TestSW
{
delay_nms(10);
if(step==0)
{
step=1;
return(0);
}
}
SET_OKLED;
SET_NGLED;
CLR_TLED;
//SET_TESTLED;
while(((PINC&0x08)==0x08)|((PINB&0x04)==0x04))
{
if(step==0)
{
step=1;
return(0);
}
}
delay_nms(10);
while(((PINC&0x08)==0x08)|((PINB&0x04)==0x04))
{
if(step==0)
{
step=1;
return(0);
}
}
delay_nms(10);
while(((PINC&0x08)==0x08)|((PINB&0x04)==0x00))
{
delay_nms(10);
if(step==0)
{
step=1;
return(0);
}
}
delay_nms(20);
if(step==0)
{
step=1;
return(0);
}
return(1);
}
/**************Check Limit SW*************/
/**************RELAY INIT*****************/
void K_Init(void)
{
CLR_K1;
CLR_K2;
CLR_K3;
CLR_K4;
CLR_K5;
CLR_K6;
}
/**************RELAY INIT*****************/
unsigned int ADC_Value(unsigned char nchannel)
{
unsigned int AD_Value1;
unsigned int AD_Value2;
unsigned int AD_Value[3];
unsigned char i;
unsigned char j;
ADMUX=ADMUX&0xF0;
asm("nop");
asm("nop");
ADMUX=ADMUX|nchannel;
ADCSR=0xe7;
delay_nms(50);
for(i=0;i<3;i++)
{
AD_Value1=(unsigned int)ADCL;
AD_Value2=(unsigned int)ADCH;
AD_Value[i]=(AD_Value2<<8)+AD_Value1;
delay_nms(1);
}
AD_Value2=(AD_Value[0]+AD_Value[1]+AD_Value[2])/3;
ADCSR=0x67;
return(AD_Value2);
}
unsigned char TEST_33V(void)
{
unsigned int AD_Value;
unsigned char m;
unsigned char n;
if(step==0)
{
step=1;
return(0);
}
delay_nms(20);
CLI(); //disable all interrupts
AD_Value=ADC_Value(0x00);
SEI(); //re-enable interrupts
if((AD_Value<0x0299)&(AD_Value>0x0320)) //3.3V 0x0299
return(0);
if(step==0)
{
step=1;
return(0);
}
return(1);
}
unsigned char TEST_SW(void)
{
unsigned int AD_Value;
unsigned char m;
unsigned char n;
unsigned char a;
a=1;
CLI(); //disable all interrupts
AD_Value=ADC_Value(0x01); //TEST SW1 L
SEI(); //re-enable interrupts
if(AD_Value>0x0060) //<0.4V
return(0);
else
CLR_SW1LED;
AD_Value=ADC_Value(0x02); //TEST SW2 L
if(AD_Value>0x0060) //0x0051
return(0);
else
CLR_SW2LED;
while(a==1) //TEST SW1 H
{
if(step==0)
{
step=1;
return(0);
}
CLI( );
AD_Value=ADC_Value(0x01);
SEI( );
if((AD_Value>0x0266)&(AD_Value<0x02AE)) //0x0266
{
SET_SW1LED;
a=0;
if(step==0)
{
step=1;
return(0);
}
}
}
a=1;
while(a==1) //Test SW2 H
{
if(step==0)
{
step=1;
return(0);
}
CLI( );
AD_Value=ADC_Value(0x02);
SEI( );
if((AD_Value>0x0266)&(AD_Value<0x02AE))
{
SET_SW2LED;
a=0;
if(step==0)
{
step=1;
return(0);
}
}
}
if(step==0)
{
step=1;
return(0);
}
return(1);
}
unsigned char Start_SW(void)
{
while((PINB&0x04)==0x00)
{delay_nms(10);
if(step==0)
{
step=1;
return(0);
}
}
while((PINB&0x04)==0x04)
{if(step==0)
{
step=1;
return(0);
}
}
delay_nms(20);
while((PINB&0x04)==0x04)
{if(step==0)
{
step=1;
return(0);
}
}
delay_nms(20);
while((PINB&0x04)==0x00)
{delay_nms(10);
if(step==0)
{
step=1;
return(0);
}
}
return(1);
}
void Control_K(unsigned char m)
{
switch(m)
{
case 0:
{
K_Init( );
SET_K1;
}
break;
case 1:
{
K_Init( );
SET_K2;
}
break;
case 2:
{
K_Init( );
SET_K3;
}
break;
case 3:
{
K_Init( );
SET_K4;
}
break;
case 4:
{
K_Init( );
SET_K5;
}
break;
case 5:
{
K_Init( );
SET_K6;
}
break;
case 6:
{
K_Init( );
CLR_K7;
}
default:break;
}
}
unsigned char TEST_LED(void)
{
unsigned char i;
unsigned char m;
for(i=0;i<7;i++)
{
m=Start_SW( );
if(m==0)
return(0);
Control_K(i);
delay_nms(100);
if(step==0)
{
step=1;
return(0);
}
}
return(1);
}
void Test_OK( )
{
K_Init( );
CLR_K7;
delay_nms(500);
SET_SW1LED;
SET_SW2LED;
SET_TLED;
CLR_BUZZER;
CLR_OKLED;
SET_NGLED;
SET_Gas;
delay_nms(600);
CLR_Gas;
}
void Test_NG( )
{
K_Init( );
CLR_K7;
delay_nms(500);
SET_SW1LED;
SET_SW2LED;
SET_TLED;
SET_OKLED;
CLR_NGLED;
SET_BUZZER;
delay_nms(200);
CLR_BUZZER;
delay_nms(100);
//SET_BUZZER;
//delay_nms(200);
//CLR_BUZZER;
SET_Gas;
delay_nms(300);
CLR_Gas;
}
unsigned char Test_Function(void)
{
unsigned char m;
m=Down( );
if(m==0)
return(0);
SET_K7;
m=TEST_33V( );
if(m==0)
return(0);
m=TEST_SW( );
if(m==0)
return(0);
m=TEST_LED( );
if(m==0)
return(0);
return(1);
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0x64; //reload counter value
if((PINB&0x06)==0x00)
{
delay_nms(1);
if((PINB&0x06)==0x00)
step=0;
}
}
/*for Product Test Programe*/
/*for Product Test Programe*/
void main( )
{
unsigned char bInt;
step=1;
init_devices( );
delay_nms(200);
while(1)
{
bInt=Test_Function( );
if(bInt==1)
Test_OK( );
else
Test_NG( );
delay_nms(500);
}
}
/*
void main( )
{
unsigned char bInt;
step=1;
init_devices( );
delay_nms(200);
delay_nms(2);
while(1)
{
Down( );
bInt=Test_Function( );
if(bInt==1)
Test_OK( );
else
Test_NG( );
delay_nms(500);
while((PINC&0x08)==0x00);
SET_OKLED;
SET_NGLED;
delay_nms(10);
}
}
*/
/*for Product Test Programe*/
/*for Device Test Programe*/
/*
void main( )
{
unsigned char m;
m=0;
init_devices( );
while(1)
{
if((PINB&0x04)==0x00)
{
delay_nms(2);
if((PINB&0x04)==0x00)
{
m++;
}
}
switch(m)
{
case 1:
CLR_OKLED;
break;
case 2:
CLR_NGLED;
break;
case 3:
CLR_SW1LED;
break;
case 4:
CLR_SW2LED;
case 5:
SET_K7;
break;
case 6:
SET_K1;
break;
case 7:
{SET_K2;}
break;
case 8:
SET_K3;
break;
case 9:
SET_K4;
break;
case 10:
SET_K5;
break;
case 11:
SET_K6;
break;
case 12:
{
SET_Gas;
if(m==12)
{
m=0;
}
}
break;
default:break;
}
delay_nms(200);
}
}
*/
/*for Device Test Programe*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -