首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

希望大神能帮看看程序有没有有关问题,多谢.用的是pic12f675的单片机

2013-07-09 
希望大神能帮看看程序有没有问题,谢谢.用的是pic12f675的单片机。#include all.h#DEVICEADC 10//adc为10

希望大神能帮看看程序有没有问题,谢谢.用的是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
[解决办法]
光看看不出来的,你要编译下,能硬件仿真就硬件仿真

热点排行