//======================================================================================
// 9454 기본 셋팅
//=======================================================================================
#include "ioS3C9454.h"
#include "intrinsics.h"
// smart option
#pragma location= 0x3C
__code const char arr[]={0x00, 0x00, 0xb0, 0x03}; // 3.9V LVR ,int 3.2Mhz
#pragma constseg= default
void smart_option(void);
void chip_init(void);
void delay_ms(unsigned int i);
void int_timer0(void);
//===================================================================================
// main
//===================================================================================
void main(void)
{
unsigned int i;
chip_init();
while(1){
BTCON = 0x02; // watch dog
ad_read_routine();
}
}
//===================================================================================
// ad data read
//===================================================================================
void ad_read_routine(void)
{
unsigned int i;
ADCON = 0x87; // 8채널
while(!(ADCON & 0x08));
i = ADDATAH; i <<= 2; i += ADDATAL;
}
//===================================================================================
// smart option
//===================================================================================
void smart_option(void)
{
char i;
i = arr[3];
if(i) ttt = 0;
}
//===================================================================================
// chip initialize
//===================================================================================
void chip_init(void)
{
__disable_interrupt();
BTCON = 0x02; // 0000 0011, Watch-dog disable
CLKCON = 0x18; // 0001 1000B, Select non-divided CPU clock
// PORT0
P0 = 0xff;
P0CONH = 0xaa; // 1010 1010
P0CONL = 0xaa; // 1010 1010
// PORT1
P1CON = 0x0a; // 0000 1010
// PORT2
P2 = 0x00;
P2CONH = 0x2a; // 0010 1010
P2CONL = 0xaa; // 1010 1010
// no ex interupt
P0PND = 0x00;
T0DATA = 100; // CPU = 3.2MHz, interrupt interval, 1000us
//T0CON = 0x4a; // 0100 1010B, 3.2M=OSC/256, 80us Timer0 interrupt enable
T0CON = 0x8a; // 1000 1010B, 3.2M=OSC/8, 2.5us Timer0 interrupt enable
__enable_interrupt();
smart_option();
P0 |= FND_CS1;
P0 |= FND_CS2;
P0 |= FND_CS3;
}
//===================================================================================
// main interrupt survice routine
//===================================================================================
#pragma vector = 0x00
__interrupt void MAIN_INT( void )
{
if(T0CON & 0x01) int_timer0();
}
//===================================================================================
// Timer0 interrupt(450us), 2.5u*256=640us
//===================================================================================
void int_timer0(void)
{
T0CON &= 0xf6;
}
//===================================================================================
// 지연
//===================================================================================
void delay_ms(unsigned int i)
{
unsigned int j;
for(j=0; j<i; j++) BTCON = 0x02; // watch dog
}