/*****************************************************************
Project : PIC16F877A TestBoard controller
Divice : PIC16F877A(40pin-DIP)
Version :
Date : 2007-10-17 10:59오후
Author : kornan Park(kornanp@empal.com)
Company : EU-Technology
Comments:
*****************************************************************/
#include "C:\Demo\PIC16F877_Board\F877A_Ctl.h"
#include <stdio.h>
#ZERO_RAM
#include "F877A_Ctl_sub.c" // 16F877A Test Board Sub-control
#include "F877_KeyCheck.c" // Keychek Routine
#include "F877_display.c" // 7-Segment display routine
#include "SerialCtl_F877.c"
//==============================================================================
#int_RTCC
void RTCC_isr(void)
{
// Fosc/4/32
TMR0 = 237; //Fosc(20MHz)/4/256 1mSec Timer interrupt
mSec1Flag = 1;
}
#int_AD
void AD_isr(void)
{
TestPin = ~TestPin;
}
//==============================================================================
#int_TBE
void TBE_isr(void)
{
if(++Tx_Counter <= TX_BUFFER_SIZE){
TXREG = TX_Buffer[Tx_Counter];
TXSTA |= TX_ENABLE; // Tx Interrupt Enable
}
else{
TX_buffer_overflow = 1;
TXSTA &= ~TX_ENABLE; // Tx Interrupt Disable
}
}
//==============================================================================
#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;
};
}
//==============================================================================
#int_TIMER1
void TIMER1_isr(void)
{
//TMR1 = (0xFFFF-625); // 20MHz(Fosc)/4 / 8 / 625 = 1mSec
TMR1 = (0xFFFF-54); // 20MHz(Fosc)/4 / 8 / 625 = 100uSec
//if(BuzOnFlag) BuzOut =1;
//else BuzOut = 0;
}
//==============================================================================
#int_TIMER2
void TIMER2_isr(void)
{
}
//==============================================================================
void main()
{
PORTA = 0xFF;
set_tris_a(0x1F);
set_tris_b(0xFF);
set_tris_c(0x80); // PORTC.7(Rx) = input, Other = All Output
PORTD = 0xFF; // segment all off
set_tris_d(0x00); // PORTD = All Output
PORTE = 0;
set_tris_e(0); // PORTE = all output
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DIV_BY_16,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
TXSTA &= ~TX_ENABLE; // Tx Interrupt Disable
BuzOn(2);
enable_interrupts(INT_RTCC); // RCC Timer overflow Interrupt Enable
enable_interrupts(INT_AD);
enable_interrupts(INT_TBE); // Serial Tx Interrupt Enable
enable_interrupts(INT_RDA); // Serial Rx Interrupt Enable
enable_interrupts(INT_TIMER1);
//enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
while(1){
if(mSec1Flag){
mSec1Flag = 0; // 1 mSec Interrupt operating routine
if(BuzFlag) BuzTimeCtl();
if(BuzOnFlag) BuzOut =1;
else BuzOut = 0;
Segment_disp();
KeyScan(); // Key check
//ADC_Start(); // ADC Start
}
//1. Serial Interface control Routine
if(RX_buffer_overflow) RX_Complete();
if(USART_SendFlag) TX_Start();
}
}
'PIC Microcontroller' 카테고리의 다른 글
PIC18F4680 기본 프로그램 (0) | 2010.05.04 |
---|---|
PIC USB STK Schemetic (0) | 2010.05.01 |
PIC 18F6722 기본프로그램 (0) | 2010.04.05 |
16F877A_ demo board 회로도 (0) | 2009.03.30 |
PIC16F877A 기본 프로그램 (0) | 2007.11.04 |