/* * Title : temp.c * Description : Temperature * Author : KAWAMOTO Yasuhisa * URL : http://www.devdrv.co.jp * Date : 09/24/2003 */ #include typedef unsigned int uint; typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned long ulong; /****************************************************************************/ /* System Dependent Values */ /****************************************************************************/ #define SYSCLK 24500000/8 #define BAUDRATE 9600 #define SAMPLE_RATE 1 #define INT_DEC 256 #define CTS P0_2 #define RTS P0_7 #define LED P2_0 /****************************************************************************/ /* Global variables */ /****************************************************************************/ long result = -1; /****************************************************************************/ /* Function prototypes */ /****************************************************************************/ void sysclk_init(void); void port_init(void); void uart0_init(void); void uart0_put(uchar); void timer2_init(int); void adc0_init(void); /****************************************************************************/ /****************************************************************************/ /* Main program loop */ /****************************************************************************/ /****************************************************************************/ void main(void) { long temp; PCA0MD &= ~0x40; sysclk_init(); port_init(); uart0_init(); adc0_init(); timer2_init(SYSCLK/INT_DEC/SAMPLE_RATE); EA = 1; RTS = 0; while(1) { if(0 < result) { EA = 0; temp = result; result = -1; EA = 1; temp = temp / INT_DEC; temp = temp * 1154 / 1024; temp = temp - 271; temp = temp - 15; while((TI0 == 0) || (CTS == 1)); TI0 = 0; SBUF0 = temp; LED = ~LED; } PCON |= 0x01; } } /****************************************************************************/ /* sysclk_init */ /****************************************************************************/ void sysclk_init(void) { OSCICN = 0x80; RSTSRC = 0x04; } /****************************************************************************/ /* port_init */ /****************************************************************************/ // P0.0 // P0.1 // P0.2 CTS (<-- XPort) // P0.3 // P0.4 TX (--> XPort) // P0.5 RX (<-- XPort) // P0.6 // P0.7 RTS (--> XPort) // P2.0 LED (--> LED) void port_init(void) { XBR0 = 0x01; XBR1 = 0x40; P0SKIP = 0x00; P1SKIP = 0x00; P0 = 0x24; P1 = 0x00; P2 = 0x01; P0MDOUT = 0x90; P1MDOUT = 0x00; P2MDOUT = 0x00; } /****************************************************************************/ /* uart0_init */ /****************************************************************************/ void uart0_init(void) { SCON0 = 0x10; if(SYSCLK/BAUDRATE/2/256 < 1) { TH1 = -(SYSCLK/BAUDRATE/2); CKCON |= 0x08; } else if(SYSCLK/BAUDRATE/2/256 < 4) { TH1 = -(SYSCLK/BAUDRATE/2/4); CKCON |= 0x01; CKCON &= ~0x0A; } else if(SYSCLK/BAUDRATE/2/256 < 12) { TH1 = -(SYSCLK/BAUDRATE/2/12); CKCON &= ~0x0B; } else { TH1 = -(SYSCLK/BAUDRATE/2/48); CKCON |= 0x02; CKCON &= ~0x09; } TL1 = 0xFF; TMOD |= 0x20; TMOD &= ~0xD0; TR1 = 1; TI0 = 1; } /****************************************************************************/ /* timer2_init */ /****************************************************************************/ void timer2_init(int counts) { TMR2CN = 0x00; CKCON |= 0x30; counts = -counts; TMR2RLL = counts; TMR2RLH = counts >> 8; TMR2L = 0xFF; TMR2H = 0xFF; ET2 = 0; TR2 = 1; } /****************************************************************************/ /* adc0_init */ /****************************************************************************/ void adc0_init(void) { AMX0P = 0x10; AMX0N = 0x11; ADC0CF = (SYSCLK/7500000) << 3; REF0CN = 0x0F; EIE1 |= 0x08; ADC0CN = 0x82; } /****************************************************************************/ /* adc0_isr */ /****************************************************************************/ void adc0_isr(void) interrupt 10 { static unsigned intdec = INT_DEC; static long accumulator = 0L; ushort adc0; AD0INT = 0; adc0 = ADC0H; adc0 = (adc0 << 8) | ADC0L; accumulator += adc0; intdec--; if(intdec == 0) { result = accumulator; accumulator = 0L; intdec = INT_DEC; } }