希望大神能帮看看程序有没有问题,谢谢.用的是pic12f675的单片机。
#include <all.h>
#DEVICE ADC= 10 //adc为10位
#fuses INTRC_IO,WDT,PROTECT,PUT,BROWNOUT
#use delay(clock=4000000,restart_wdt)
//#define CDTIMECNT 2748L
#define jishu1 //about 1 min
#define jishu2 600//timer1 13mins
#define INTS_PER_SECOND1 500//timer0 1s
#define INTS_PER_SECOND2 24//timer1 1.3s
/*
*********************************************************************************************************
* LOCAL CONSTANTS
*********************************************************************************************************
*/
#define SW1_H() output_bit(PIN_A5,1)
#define SW1_L() output_bit(PIN_A5,0)
#define OUT_H() output_bit(PIN_A1,1)
#define OUT_L() output_bit(PIN_A1,0)
#define L_LightCON (0x08);
#define R_LightCON (0x04);
#define L_SelCON (0x02);
#define R_SelCON (0x01);
//#define BATI1 1.4
//#define BATI2 1
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
U32 result1;
U32 result2;
U16 time1,time2;
U16 int_count1,int_count2;
/**********************************************************************************/
/*********定时器******************************************************************/
#INT_TIMER0
void clock0()
{
if(--int_count1==0){
++time1;
int_count1=INTS_PER_SECOND1;
}
}
#INT_TIMER1
void clock_isr()
{
if(--int_count2==0) { // per second.
++time2;
int_count2=INTS_PER_SECOND2;
}
}
/******************************************************************************/
/* 主程序开始 */
/******************************************************************************/
void main()
{
//SW1_L();
set_tris_a (0x1d); //01 1101 A1 A5输出口
setup_wdt(WDT_72MS);
//ADC初始化
setup_adc_ports(sAN0|sAN2|sAN3|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_64);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_BIT); //timer0 will increment every 8us and overflow every 2.04ms
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);//timer1 will increment every 1us and overflow every 65.5ms
//enable_interrupts(INT_TIMER1); //启动定时器1
//enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
int flag=0;
while(1)
{
SW1_L();
SW1_L();
//OUT_H();
SET_ADC_CHANNEL(0);
delay_ms(50);
result1=(READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ))>>2;
delay_ms(50);
//delay_ms(1000);
if(result1>960)//12.6V 859
{
flag=1;
}
else if(result1<859)//14.1V 960
{
flag=2;
}
switch(flag)
{
case 1:while(1)
{
SW1_L();
OUT_L();
result1=(READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ))>>2;
if(result1>960)
break;
}break;
case 2:while(1)
{
SW1_H();
OUT_H();
delay_ms(500);
delay_ms(1000);
delay_ms(1000);
enable_interrupts(INT_TIMER1);
if(time2>jishu2)
{
SW1_L();
SW1_L();
SW1_L();
delay_ms(50);
result1=(READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ)+READ_ADC(ADC_START_AND_READ))>>2;
delay_ms(50);
if(result1>960)
break;
}
}break;
default:break;
}
}
} pic12f675
[解决办法]
光看看不出来的,你要编译下,能硬件仿真就硬件仿真