/* * Title : f330.c * Description : C8051F330 subroutines * Author : KAWAMOTO Yasuhisa * URL : http://www.devdrv.co.jp/ * Date : 01/12/2006 */ //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include #include "main.h" //----------------------------------------------------------------------------- // Global VARIABLES //----------------------------------------------------------------------------- volatile unsigned char tmr2_count; //----------------------------------------------------------------------------- // init_cygnal //----------------------------------------------------------------------------- void init_f330(void) { // WatchDog Disable PCA0MD &= ~0x40; // Clock OSCICN = 0x83; RSTSRC = 0x04; // PORT // P0.0 DRIVE --> 1-Wire // P0.1 SENSE <-- 1-Wire // P0.2 CTS <-- XPORT // P0.3 DCD <-- XPORT // P0.4 TX --> XPORT // P0.5 RX <-- XPORT // P0.7 RTS --> XPORT // P2.0 LED --> LED XBR0 = 0x01; XBR1 = 0xC0; P0SKIP = 0xCF; P1SKIP = 0xFF; P0MDOUT = 0x91; P1MDOUT = 0xFF; P2MDOUT = 0x01; P0MDIN = 0xFF; P1MDIN = 0xFF; P0 = 0x00 | ~P0MDOUT; P1 = 0x00 | ~P1MDOUT; P2 = 0x01 | ~P2MDOUT; // UART0 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 TMR2CN = 0x00; CKCON &= ~0x30; TMR2RLL = (-TIMER2RATE*(SYSCLK/12)/1000); TMR2RLH = (-TIMER2RATE*(SYSCLK/12)/1000) >> 8; TMR2L = 0xFF; TMR2H = 0xFF; ET2 = 1; TR2 = 1; } //----------------------------------------------------------------------------- // uart0_put_char //----------------------------------------------------------------------------- void uart0_put_char(char d) { while(!TI0); TI0 = 0; while(CTS); SBUF0 = d; } //----------------------------------------------------------------------------- // uart0_put_val //----------------------------------------------------------------------------- void uart0_put_val(unsigned char d) { unsigned char c; c = ((d >> 4) & 0x0F); if(9 < c) c = c - 10 + 'A'; else c = c + '0'; uart0_put_char(c); c = (d & 0x0F); if(9 < c) c = c - 10 + 'A'; else c = c + '0'; uart0_put_char(c); } //----------------------------------------------------------------------------- // timer2_isr //----------------------------------------------------------------------------- void timer2_isr(void) interrupt 5 { TF2H = 0; tmr2_count++; }