yiffer的个人空间 https://blog.eetop.cn/edesign [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

pic程序

已有 1587 次阅读| 2009-12-9 22:02

#include <pic.h>
#include "inc_pic16f1827.h"
__CONFIG(INTCLK & PWRTEN & WDTDIS & PWRTEN & BOREN & PWRTDIS &  PROTECT&MCLRDIS);

#define PERIOD 20       // period in uS - one second here
#define XTAL 4000000  // crystal frequency - 4MHz
#define ICLK (XTAL/4) // crystal is divided by four
#define SCALE 2   // prescale by 16 - check for overflow!

#define PRELOAD  PERIOD*ICLK/SCALE/1000000

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
#define true   1
#define false   0
typedef  bit   bool;
#define  const  code
#define  BDATA  bdata
#define  DATA  data
#define  IDATA  idata
#define  XDATA  xdata
#define  PDATA  pdata
#define  CODE  code
#define  BOOL  bool
#define  true   1
#define   false  0
#define  out    0
#define  in    1


//======================================================
#define COUNT 1000

#define SUCCESS  0
#define FAIL  1 

#define AD_MAX   100

unsigned short int timer_count;

void port_init(void);
void adc_init(void);
void usart_init(void);
void int_init(void);
void timer0_init(void);
void oscillator_init(void);
void putch(unsigned char byte);
unsigned char getch(void);
unsigned char getche(void);
unsigned short int AD_Sample(void);
unsigned char AD_Process(unsigned short int AD_Value);


int main(void)
{
unsigned short int AD_Value;
unsigned char res;

 //initial
 oscillator_init();
 port_init();
 adc_init();
 usart_init();
 int_init();
 timer0_init();
 timer_count = 0;
 //启动阀门和起振
 RC0 = 1; //启动阀门线圈
 RA2 = 1; //维持阀门线圈
 RA4 = 1; //主起振
 RA5 = 1; //维持电流采集振荡
 //定时器0中断开启
// TMR0IE = 1;
 //采集点火感应电压
 while(1)
 { 
  AD_Value = AD_Sample();
  res =AD_Process(AD_Value); 
  if(!SUCCESS)
  {
   timer_count = 0;
   RC0 = 1; //启动阀门线圈
   RA2 = 1; //维持阀门线圈
   RA4 = 1; //主起振
   RA5 = 1; //维持电流采集振荡
  }
  else
  { 
   if(timer_count == COUNT)
   {
    RC0 = 0; //启动阀门线圈
    RA2 = 0; //维持阀门线圈
    RA4 = 0; //主起振
    RA5 = 0; //维持电流采集振荡 
    break;
   }
  }
 }
 
 return 0;
}

unsigned char AD_Process(unsigned short int AD_Value)
{
 if(AD_Value> 100)
  return FAIL;
 else
  return SUCCESS;
}


unsigned short int AD_Sample(void)
{
unsigned char i;
unsigned short int ad;
unsigned short int AD_Value = 0;
unsigned char send;
unsigned short int ad_av;

 for(i=0;i<8;i++)
 {
  GODONE = 1;//启动AD采集
  while(ADIF);
  {
   ad = ADRESH;
   ad = ad << 8 + ADRESL;
   AD_Value = AD_Value + ad;
   send = (unsigned char)ad;
   putch(send);
   send = (unsigned char)((ad >>8) & 0x00ff); 
   putch(send);
   ADIF = 0;
  }
 }
 
 return  ad_av = (ad>>3);
}


void port_init(void)
{
 TRISA = 0x00;
 PORTA = 0x00;
 TRISC = 0x00;
}

void adc_init(void)
{
 ANSEL = 0x80;
 ADCON0 = 0x1c; //ADFM VCFG — CHS2 CHS1 CHS0 GO/DONE ADON
 ADCON1 = 0x70;  //— ADCS2 ADCS1 ADCS0 — — — —
}

void usart_init(void)
{
 RCSTA = 0x80; //SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
 TRISC = 0x30;   //— — TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
 BAUDCTL = 0x85; //ABDOVF RCIDL — SCKP BRG16 — WUE ABDEN
 SPBRGH = 0x00; //Baud Rate Generator register, high byte
 SPBRG = 0x19;   //Baud Rate Generator register, low byte
 TXSTA = 0x20; //CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D
}

void int_init(void)
{
 INTCON = 0xc0; //GIE PEIE TMR0IE INTE IOCIE TMR0IF INTF IOCIF
 PIE1 =0x40;  //EEIE ADIE RCIE C2IE C1IE OSFIE TXIE TMR1IE
 PIR1 = 0x00; //EEIF ADIF RCIF C2IF C1IF OSFIF TXIF TMR1IF
 ADIE = 1; 
}

void timer0_init(void)
{
 OPTION = 0x03; //RAPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
 TMR0 = 0x4e; //5ms
}

//
void oscillator_init(void)
{
 OSCCON = 0x47; //— IRCF2 IRCF1 IRCF0 OSTS(1) HTS LTS SCS 1MHz
}

void putch(unsigned char byte)
{
 /* output one byte */
 while(!TXIF) /* set when register is empty */
  continue;
 TXREG = byte;
}

unsigned char getch(void)
{
 /* retrieve one byte */
 while(!RCIF) /* set when register is not empty */
  continue;
 return RCREG; 
}

unsigned char getche(void)
{
 unsigned char c;
 putch(c = getch());
 return c;
}


void __ISR(_TIMER_0_VECTOR, ipl2) Timer0Handler(void)
{
 timer_count++;
 T0IF = 0;
}


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 19

    获赞
  • 69

    评论
  • 3705

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 04:35 , Processed in 0.014109 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部