PIC Microcontroller

PIC18F4680 기본 프로그램

EP 기술연구소 2010. 5. 4. 18:16

#include "C:\Demo\GlassSub\GlassSubCtl.h"
#include <stdio.h>
#include <stddef.h>

#include "GlassSub_Sub.c"
#include "GS_ADCtl.c"
#include "GS_SerialCtl.c"
//#include "GS_KeyChk.c"

#ZERO_RAM
//======================================
#int_RTCC
void  RTCC_isr(void)
{
 TMR0L = 231; // 100 uSec Interrupt
}

//======================================
#int_TIMER1
void  TIMER1_isr(void)
{
 TMR1 = (0xFFFF- 1220); // 1.0 mSec Interrupt
 mSec1Flag = 1;
}

//======================================
#int_TIMER2
void  TIMER2_isr(void)
{

}

//======================================
#int_AD
void  AD_isr(void)
{
 ADC_Buffer[AD_Channel] += ADRES;
 if(AD_Channel == (ADC_Size-1)) ADC_CompFlag = 1;
}

//======================================
//===== USART0 Receiver interrupt service routine
#int_RDA
void  RDA_isr(void)
{
 unsigned char status, data;

 status = RCSTA;
 data = RCREG;
 if ((status & (FRAMING_ERROR | OVERRUN_ERROR))==0){
  if((RX_counter >= RX_BUFFER_SIZE) & (data == 0x2A)) RX_counter = 0;

  RX_Buffer[RX_counter] = data;
  if(++RX_counter == RX_BUFFER_SIZE) RX_buffer_overflow = 1;
 }
 
 
}
// Transmitter interrupt service routine
#int_TBE
void  TBE_isr(void)
{
 if(++Tx_Counter <= TX_BUFFER_SIZE){
  TXREG = TX_Buffer[Tx_Counter];
  TXEN = 1; //TXSTA |= TX_ENABLE;  // Tx Enable
 }
 else{
  TX_buffer_overflow = 1;
  TXEN = 0; //TXSTA &= ~TX_ENABLE;  // Tx Disable
 }

}


//======================================
void main()
{
 set_tris_E(0);
 
 setup_adc_ports(AN0_TO_AN3|VSS_VDD);
 setup_adc(ADC_OFF|ADC_TAD_MUL_0);
 
 setup_psp(PSP_DISABLED);
 setup_spi(SPI_SS_DISABLED);
 setup_wdt(WDT_OFF);
 
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
 setup_timer_2(T2_DIV_BY_4,62,1);
 setup_comparator(NC_NC_NC_NC);
 setup_vref(FALSE);
 
 SPBRG = 0x29;
 
 enable_interrupts(INT_RTCC);
 enable_interrupts(INT_TIMER1);
 enable_interrupts(INT_TIMER2);
 enable_interrupts(INT_AD);
 enable_interrupts(INT_RDA);
 enable_interrupts(INT_TBE);
 
 enable_interrupts(GLOBAL);

 while(true){
  if(mSec1Flag){
   mSec1Flag = 0;  

   TimerCheck();  // Run Timer Check Routine
   
   if(BuzFlag) BuzTimeCtl(); // Buzzer Output control
   if(BuzOnFlag) BuzOut = 1; //BuzOut = ~ BuzOut;
   else BuzOut = 0;
   

GlassSubCtl.h

 

GS_SerialCtl.c


   /*
   KeyScan();   // key input check
   */
   ADC_Start();

  }
  
  if(Sec1Flag){
   Sec1Flag = 0;
   USART_SendFlag = 1;
   TestPin = ~TestPin;
  }
  // 1. A/D Converter oprtating Routine
  if(ADC_CompFlag) ADConverter();
  
  // 2. Serial control Routine
  if(USART_SendFlag) TX_Start();
  if(RX_buffer_overflow) RX_Complete();

  //if(AD_Data[10] >= 153) TestPin = ~TestPin;
 }
}
//#end

GlassSubCtl.h
0.01MB
GS_SerialCtl.c
0.0MB