-- pulse out test program ;25 microseconds period 33 % duty cycle = 40 khz ;9 microseconds high, 16 microseconds low ;---------________________---------________________ ;------___________________------___________________ ;6 microseconds high, 19 microseconds low ;25 microseconds period 25 % duty cycle = 40 khz ; ;a 1 consists of 1.2 milliseconds of carrier ;or 48 cycles of the above ; ;a 0 consists of 600 microseconds of carrier ;or 24 cycles of the above ; ;start burst consists of 2.4 milliseconds of carrier ;or 96 cycles of the above -- !!!!!!!!!!!!!!!!!!!!!!!!! -- !!!!!!!! IT WORKS !!!!!!! -- !!!!!!!!!!!!!!!!!!!!!!!!! -- vol- 01 19 -- vol+ 01 18 -- ch- 01 17 -- ch+ 01 16 include 16f628 pragma target clock 4_000_000 -- 4 MHz xtal pragma target OSC INTOSC_NOCLKOUT -- internal osc pragma target MCLR external pragma target WDT disabled -- no watchdog, please pragma target LVP disabled -- no low voltage programming pragma target PWRTE enabled enable_digital_io() -- no analog pins used in this sample OPTION_REG_NRBPU = 0 include delay var bit button_pushed = low var bit vol_up is pin_B3 var bit vol_down is pin_B4 var bit chan_up is pin_B1 var bit chan_down is pin_B2 pin_B1_direction = input pin_B2_direction = input pin_B3_direction = input pin_B4_direction = input var bit pulse_out is pin_B0 pin_B0_direction = output pulse_out = low var byte test_cmd var bit my_cmd_bit at test_cmd : 0 var byte test_addr var bit my_addr_bit at test_addr : 0 var byte my_counter = 8 procedure ir_pulse_0 is for 23 loop pulse_out = high _usec_delay(3) -- 6 microseconds pulse_out = low _usec_delay(15) -- 19 microseconds -- delay_10us(1) end loop end procedure procedure ir_pulse_1 is for 46 loop pulse_out = high _usec_delay(3) -- 6 microseconds pulse_out = low _usec_delay(15) -- 19 microseconds -- delay_10us(1) end loop end procedure procedure ir_pulse_start is for 84 loop pulse_out = high _usec_delay(3) -- 6 microseconds pulse_out = low _usec_delay(15) -- 19 microseconds -- delay_10us(1) end loop end procedure procedure ir_pulse_deadtime is pulse_out = low _usec_delay(600) -- delay 600 microseconds end procedure procedure send_IR is ir_pulse_start ir_pulse_deadtime for 7 loop if (my_cmd_bit == 0) then ir_pulse_0 end if if (my_cmd_bit == 1) then ir_pulse_1 end if ir_pulse_deadtime test_cmd = test_cmd >> 1 end loop for 5 loop if (my_addr_bit == 0) then ir_pulse_0 end if if (my_addr_bit == 1) then ir_pulse_1 end if ir_pulse_deadtime test_addr = test_addr >> 1 end loop delay_1ms(25) end procedure forever loop if !vol_up then block test_addr = 0b00000001 test_cmd = 0b00010010 -- button_pushed = high send_IR end block end if if !vol_down then block test_addr = 0b00000001 test_cmd = 0b00010011 -- button_pushed = high send_IR end block end if if !chan_up then block test_addr = 0b00000001 test_cmd = 0b00010000 -- button_pushed = high send_IR end block end if if !chan_down then block test_addr = 0b00000001 test_cmd = 0b00010001 -- button_pushed = high send_IR end block end if -- test_addr = test_addr << 3 -- test_cmd = test_cmd << 1 button_pushed = low end loop