#include <18f2320.h> #fuses INTRC_IO, PUT, NOPROTECT #use delay(clock=8000000) void outl(void);//赤外線Low出力 void outh(void);//赤外線Hi出力 void startbit(void);//スタートビット void stopbit(void);//ストップビット #define sw1 pin_b0 //スイッチ1 #define sw2 pin_b1 //スイッチ2 #define sw3 pin_b2 //スイッチ3 #define led pin_a0 //赤外線led static int kaisuu = 0; //23回点滅用 main(){ int a=0; //送信データ int b=1; //送信監視用 int c=3; //繰り返し送信回数 set_tris_a(0); set_tris_b(0x07); output_bit(led,0); port_b_pullups(true); while(1){ if(input(sw1) ==0){ delay_ms(10); if(input(sw1)==0){ a = 10; b = 0; } } if(input(sw2)==0){ delay_ms(10); if(input(sw2)==0){ a = 20; b = 0; } } if(input(sw3)==0){ delay_ms(10); if(input(sw3)==0){ a = 30; b = 0; } } if(c > b){ switch(a){ case 10: //スタートビット startbit(); //データ4ビット outl();outh();outl();outh(); //ストップビット stopbit(); delay_ms(10); break; case 20: //スタートビット startbit(); //データ4ビット outl();outh();outh();outl(); //ストップビット stopbit(); delay_ms(10); break; case 30: //スタートビット startbit(); //データ4ビット outl();outh();outh();outh(); //ストップビット stopbit(); delay_ms(10); break; default: break; } b++; } }//End while }//End main void startbit(){ //スタートビットHiを1回 outh(); } void stopbit(){ //ストップビット Hi-Low-Hi-Low-Hi outh();outl();outh();outl();outh(); } void outl(){//赤外線LED消灯 output_bit(led,1); delay_us(600); } void outh(){//赤外線LED点滅 kaisuu=23; while(1){ output_bit(led,1); delay_us(10); output_bit(led,0); delay_us(10); kaisuu--; if(kaisuu==0) break; } }