/* * Source : FMRadio10.c * Date : 2011/04/24 * Update : * Auther : Pharaoh */ #include #define TEA_BUSMODE LATBbits.LATB7 #define TEA_RW LATBbits.LATB6 #define TEA_CLK LATBbits.LATB8 #define TEA_DATA LATBbits.LATB9 _CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx1 & FWDTEN_OFF) // FNOSC_FRC : Fast RC Oscillator (8MHz) // FCKSM_CSDCMD : Clock switching and clock monitor : disabled // OSCIOFNC_OFF : // IOL1WAY_OFF : // I2C1SEL_PRI : Use Primary I2C1 pins (PIN 17 & 18) // POSCMOD_NONE : Primary Oscillator disabled _CONFIG2(IESO_OFF & FNOSC_FRC & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_NONE) void SendDataTo3Wire(unsigned char data); void SelectStation(unsigned int freq); void Wait(unsigned long t); int main(void) { // I Oの初期設定 AD1PCFG = 0xFFFF; // すべてデジタル CLKDIV = 0; // TRISA = 0xFFFF; // RA0-4=すべて入力 TRISB = 0xE003; // RB2,3,4,5,6,7,8,910,11,12=出力(使うのは8,9,12) CNPU1 = 0x3830; // CN4,5,11,12,13=Pull Up CNPU2 = 0; // CN16〜=Pull Upなし CNEN1 = 0x3800; // CN11,12,13=割り込み許可 TEA_BUSMODE = 1; // Bus Mode = 1 : TEA_RW = 0; TEA_CLK = 0; TEA_DATA = 0; SelectStation(825); Sleep(); // 11/05/04 while (1); return (0); } /* * 1バイトデータ転送 */ void SendDataTo3Wire(unsigned char data) { int i; for (i=0; i<8; i++){ if ((data & 0x80) == 0x80){ TEA_DATA = 1; } else { TEA_DATA = 0; } data <<= 1; // CLK TEA_CLK = 1; Wait(100); TEA_CLK = 0; } } /* * FM局選択 * freq : 0.1MHz単位 */ void SelectStation(unsigned int freq) { unsigned long pll; unsigned char d1, d2, d3, d4, d5; pll = 4000*(((unsigned long)freq)*100L + 225) / 32768; d1 = ((pll >> 8) & 0x3F); // 1st byte : mute off, SM off d2 = (pll & 0xFF); // 2nd byte d3 = 0x10; // 3rd byte : High side injection, stereo, right mute off, left mute off d4 = 0x36; // 4th byte d5 = 0x00; // 5th byte TEA_RW = 0; TEA_CLK = 0; TEA_DATA = 0; TEA_RW = 1; SendDataTo3Wire(d1); SendDataTo3Wire(d2); SendDataTo3Wire(d3); SendDataTo3Wire(d4); SendDataTo3Wire(d5); TEA_RW = 0; TEA_CLK = 0; TEA_DATA = 0; } /* * 待ち */ void Wait(unsigned long t) { while (t > 0){ asm("nop"); t--; } }