/* 赤外線 SW送信機 Ver 3 BY M.Kikuchi PIC12F629 4MHz 2009/3/05 Last: 3/19 ; Format --------------------------------------------------- ; "0"X8bits,"1",C2,C1,C0,"0","1",D4,D3,D2,D1,D0,"1","0"x4bits ; C0toC2 is device code D0toD4 is switch data ;------------------------------------------------------------ CONFIG : $2007 _CPD_OFF _CP_OFF _BODEN_OFF _MCLRE_OFF _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLOCKOUT */ static unsigned short S_DATA; void IR_Bit1() // 592ck { unsigned short ic; for (ic=0;ic<44;ic++){ GPIO=~GPIO; Delay_us(5); } GPIO=0x30; Delay_us(7); } void IR_Bit0() // 592ck { Delay_us(584); } void TX_2() { unsigned short temp,tc; temp=S_DATA; IR_Bit1(); // set 1 for (tc=0;tc < 3;tc++){ //divice code 3bits if ((temp & 0x80)==0) IR_Bit0(); else IR_Bit1(); temp=temp << 1; } IR_Bit0(); // set 0 IR_Bit1(); // set 1 for (tc=0;tc<5;tc++){ //Key data 5bits if((temp & 0x80)==0) IR_Bit0(); else IR_Bit1(); temp=temp << 1; } IR_Bit1(); // set 1 for (tc=0;tc<4;tc++) IR_Bit0(); } void interrupt() { unsigned short FLAG,Key_data; // Delay_ms(10); Key_data=(~GPIO & 0x07); S_DATA=(0x80 | Key_data); if (Key_data ==0) goto INT_END; do { Delay_us(4200); //TX_1 TX_2(); TX_2(); Delay_ms(200); } while ((GPIO.F3==1)&&((~GPIO & 7)!=0)); while((~GPIO & 7)!=0); //Key OFF? INT_END: Delay_ms(10); INTCON.GPIF=0; } void main() { CMCON =0b00000111; //un use Compalater TRISIO=0b00001111; //0=output 1=input WPU =7; //WEAK PULL-UP set OPTION_REG.NOT_GPPU=0; //Pull-up Enable bit IOC =7; //INTERRUPT-ON-CHANGE GPIO set asm{ //Tuning call 0x3ff; movwf OSCCAL; } GPIO=0x30; //IFR LED OFF INTCON=0b11001000; //GIE PEIE.. //GPIE: Port Change Interrupt Enable bit ... while(1) asm SLEEP; //LOOP }