1) последовательность импульсов, где 1- 667 мкс, 0-1333 мкс
2) последовательность импульсов, где 1- 1333 мкс, 0-667 мкс
3) уровень 1
4) уровень 0
Но у меня получается, что горит либо пока зажата кнопка, и то по одному режиму, либо после отпускания кнопки горит еще секунды 3 и все, а нужно после нажатия чтоб горело до следующего нажатия с переключением. Свой код прилагаю. Помогите подправить, пожалуйста.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#pragma config FOSC = INTOSCCLK
#pragma config IOSCFS = 8MHZ // Internal Oscillator Frequency Select bit (8 MHz)
#define _XTAL_FREQ 16000000 // Declare crystal frequency to be 8MHZ (for delay functions)
void rezhim1() {
GPIO2 = 1;
__delay_us(667);
GPIO2 = 0;
__delay_us(1333);
}
void rezhim2() {
GPIO2 = 1;
__delay_us(1333);
GPIO2 = 0;
__delay_us(667);
}
void rezhim3() {
GPIO2 = 1;
}
void rezhim4() {
GPIO2 = 0;
}
int main(int argc, char** argv) {
{
ANSEL = 0x00; // Set ports as digital I/O, not analog input
ADCON0 = 0x00; // Shut off the A/D Converter
TRISIO0 = 1; // GP3 input, rest all output
TRISIO2 = 0;
GPIO = 0x00; // Make all pins 0
while(1)
{
if (GPIO0 == 1)
{
GPIO2 = 0;
} else
{
rezhim1();
}
if (GPIO0 == 1)
{
GPIO2 = 0;
} else
{
rezhim2();
}
if (GPIO0 == 1)
{
GPIO2 = 0;
} else
{
rezhim3();
}
if (GPIO0 == 1)
{
GPIO2 = 0;
} else
{
rezhim4();
}
}
}
}


