Формирование случайной импульсной последовательности
Re: Формирование случайной импульсной последовательности
Как представляете себе работа двух кнопок на одном входе?
У вас должна быть одна кнопка, а програмным путем определять что она нажата/ненажата и работать далее.
У вас должна быть одна кнопка, а програмным путем определять что она нажата/ненажата и работать далее.
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18547
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Формирование случайной импульсной последовательности
при условии, что сумма падений на них меньше напряжения питания. например при питании 3,6 вольта и суперярких светодиодах они оба будут погашены, если пин МК будет в третьем состоянии...КРАМ писал(а):Светодиоды нельзя будет погасить оба
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Работа двух кнопок на одном входе - легко:
Не нажата кнопка включения - на входе лог. 0 (в протосе так же), горит красный светодиод, зеленый не должен гореть (но в протосе оба не горят...)
Нажата кнопка включения и не нажата кнопка выключения - на входе лог. 1 (в протосе так же), горит зеленый светодиод, красный совсем не горит.
Нажата кнопка выключения - горит красный светодиод, на входе лог. 0. Но в протосе не горит красный светодиод, почему-то напряжение высокого уровня показывает, при нажатой кнопке выключения, хотя на входе стоит лог. 0.
Этот Weak pull-up я так пытаюсь отключить - нифига не правильно, как я понял:
WPUA = 0;
Не нажата кнопка включения - на входе лог. 0 (в протосе так же), горит красный светодиод, зеленый не должен гореть (но в протосе оба не горят...)
Нажата кнопка включения и не нажата кнопка выключения - на входе лог. 1 (в протосе так же), горит зеленый светодиод, красный совсем не горит.
Нажата кнопка выключения - горит красный светодиод, на входе лог. 0. Но в протосе не горит красный светодиод, почему-то напряжение высокого уровня показывает, при нажатой кнопке выключения, хотя на входе стоит лог. 0.
Этот Weak pull-up я так пытаюсь отключить - нифига не правильно, как я понял:
WPUA = 0;
Re: Формирование случайной импульсной последовательности

Ето два варианта - с подтяжкой к + и к земле. Подтяжка нужна, иначе все будет лезть на вход.
И мой вопрос: Какой силой нужно нажимать S2 и S3 дабы на вход появилось 0 (+Vdd) если они там уже есть.
В ету схему включения активна одна кнопка - противоположная на резистора подтяжки. Когда отпускаем активную кнопку на входе ЛЕ появляется потенциал с резистора подтяжки и всякое нажимание на кнопки S2 и S3 не имеет никакого смысла
Логика кода должна быть такая
If (нажата)
;
else //ненажата
;
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
Что касается вопроса о кнопках:
"На борту" этого контроллера есть АЦП...
Можно хоть 20-ть кнопок "повесить" на один вход (ANx) контроллера /как делают в автомагнитолах и т.п./.
"На борту" этого контроллера есть АЦП...
Можно хоть 20-ть кнопок "повесить" на один вход (ANx) контроллера /как делают в автомагнитолах и т.п./.
- Реклама
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Прочитал я даташит, прочитал комментарии, пересобрал схему, изменил код. Все равно, я не могу установить ноль на выходе ножке RA3. Я не понимаю, что это за магия и как убрать эти 2,5 с этой ножки. Диоды не горят, вообще. Входы RA0 и RA1 имеют лог. 0 при нажатых кнопок, а диоды не горят, никакие.
Схема:
Код:
Схема:
Спойлер

Спойлер
Код: Выделить всё
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс
// PIC10F322 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = EC // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
void Prepare(); // Функция подготовки МК
int main()
{
Prepare(); // Запуск функции подготовки
int K = 4;
while(1) // Бесконечный цикл работы
{
if(RA0 == 0 && RA1 == 1) // Проверка на нажатые кнопки
{
RA3 = 1; // Зажигаем зеленый светодиод
//srand(K); // Инициализация генератора случайных импульсов
//K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
//for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
__delay_us(SIGNAL-4); // Определяем задержку
RA2 = 1; // Подаем на выход лог. единицу
__delay_us(SIGNAL-2); // Определяем длительность сигнала
RA2 = 0; // Подаем на выход лог. ноль
}
else
{
RA3 = 0; // Зажигаем красный светодиод
RA2 = 0; // На выход ставил лог. ноль
}
}
return 0;
}
// Функция подготовки
void Prepare()
{
TRISA = 0b0011; // Направление работы ножек порта А (вход)
PORTA = 0b0000; // очищаем порт А
OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
}-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
Конечно, но для этого его надо назначить в Config-е как вход (_MCLRE_OFF).
!!! Но, некоторые самодельные программаторы не смогут потом "залить" новую прошивку!!!
!!! Но, некоторые самодельные программаторы не смогут потом "залить" новую прошивку!!!
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Теперь генерация сигнала есть, горит зеленый светодиод, НО:
1. Зеленый светодиод горит даже тогда, когда кнопка старт не нажата.
2. Красный светодиод не горит, когда не нажата кнопка старта или нажата кнопка стоп.
Схема:
Код:
1. Зеленый светодиод горит даже тогда, когда кнопка старт не нажата.
2. Красный светодиод не горит, когда не нажата кнопка старта или нажата кнопка стоп.
Код: Выделить всё
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD) - выключеноСпойлер

Спойлер
Код: Выделить всё
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс
// PIC10F322 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = EC // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
void Prepare(); // Функция подготовки МК
int main()
{
Prepare(); // Запуск функции подготовки
int K = 4;
while(1) // Бесконечный цикл работы
{
if((RA0 == 0) && (RA3 == 1)) // Проверка на нажатые кнопки
{
RA1 = 0; // Зажигаем зеленый светодиод
//srand(K); // Инициализация генератора случайных импульсов
//K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
//for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
__delay_us(SIGNAL-4); // Определяем задержку
RA2 = 1; // Подаем на выход лог. единицу
__delay_us(SIGNAL-2); // Определяем длительность сигнала
RA2 = 0; // Подаем на выход лог. ноль
}
else
{
RA1 = 1; // Зажигаем красный светодиод
RA2 = 0; // На выход ставил лог. ноль
}
}
return 0;
}
// Функция подготовки
void Prepare()
{
TRISA = 0b1001; // Направление работы ножек порта А (вход)
PORTA = 0b0000; // очищаем порт А
OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
}- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
В Си не подскажу, но предполагаю, что к выходу RA1 идёт обращение как к PORTA, а не LATA.
Добавлено after 2 minutes 27 seconds:
P.S.
Обращение к PORTA - это чтение; LATA - запись.
Добавлено after 2 minutes 8 seconds:
P.P.S.
Не вижу записи в ANSELA.
Добавлено after 2 minutes 27 seconds:
P.S.
Обращение к PORTA - это чтение; LATA - запись.
Добавлено after 2 minutes 8 seconds:
P.P.S.
Не вижу записи в ANSELA.
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Тогда почему работает генератор, но не работает выход светодиода?
Какой записи? О.о
Какой записи? О.о
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
В симуляторе (Prouteus).
Стало лучше, а именно:
Зеленый светодиод нормально горит при нажатой кнопке включения и выключается, если нажать кнопку стоп или отжать кнопку включения.
НО:
При нажатой кнопке стоп не горит красный светодиод, он вообще не горит:
Код:
Схема:
Стало лучше, а именно:
Зеленый светодиод нормально горит при нажатой кнопке включения и выключается, если нажать кнопку стоп или отжать кнопку включения.
НО:
При нажатой кнопке стоп не горит красный светодиод, он вообще не горит:
Код:
Спойлер
Код: Выделить всё
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс
// Обознаение выводов и кнопок
#define START RA0 // Кнопка запуска работы МК
#define STOP RA3 // Кнопкка остановки работы МК
#define LED RA1 // Вывод на светодиоды
#define GREEN 0 // Сигнал для зеленого светодиода
#define RED 1 // Сигнал для красного светодиода
#define GENERATOR RA2 // Выход генератора
// PIC10F322 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = EC // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
void Prepare(); // Функция подготовки МК
int main()
{
Prepare(); // Запуск функции подготовки
int K = 4;
while(1) // Бесконечный цикл работы
{
if((START == 0) && (STOP == 1)) // Проверка на нажатые кнопки
{
LED = 0; // Зажигаем зеленый светодиод
//srand(K); // Инициализация генератора случайных импульсов
//K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
//for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
__delay_us(SIGNAL-4); // Определяем задержку
GENERATOR = 1; // Подаем на выход лог. единицу
__delay_us(SIGNAL-2); // Определяем длительность сигнала
GENERATOR = 0; // Подаем на выход лог. ноль
}
else
{
LED = 1; // Зажигаем красный светодиод
GENERATOR = 0; // На выход ставил лог. ноль
}
}
return 0;
}
// Функция подготовки
void Prepare()
{
TRISA = 0b1001; // Направление работы ножек порта А (вход)
PORTA = 0b0000; // очищаем порт А
OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
ANSELA&=~((1<<0)|(1<<1)|(1<<2));
}Спойлер

- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
Попробуйте просто включить красный светодиод (без условий).
В ANSEL пропишите "0". Всё равно аналоговыми входами вы не пользуетесь.
В ANSEL пропишите "0". Всё равно аналоговыми входами вы не пользуетесь.
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Сделал, но все равно, почему-то, при нажатии на кнопку стоп красный светодиод гаснет. Хотя я программно не выключаю его!
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
Можете сделать Disassembly listing?
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Что-то не нашел инфы, как в MPLAB X сделать это...
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Формирование случайной импульсной последовательности
Тогда, выкладывайте проект MPLABX но, вначале, пройдитесь по шагам в Debugger-е и постарайтесь сами найти ошибку.
-
SpeedFighter
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Вс май 28, 2017 19:07:32
Re: Формирование случайной импульсной последовательности
Нашел, вот:
А вот так работает, но не при нажатых клавишах, а на нажатие работает, хотя я этого не делал:

Спойлер
Код: Выделить всё
17: // Подключение нужных библиотек
18: #include <stdio.h>
19: #include <stdlib.h>
20: #include <xc.h>
21:
22: // Параметры микроконтроллера
23: #define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
24:
25: // Параметры сигнала
26: #define SIGNAL 30 // Длительность сигнала в мкс
27: #define DELMIN 100 // Максимальная задержка в мкс
28: #define DELMAX 400000 // Максимальная задержка в мкс
29:
30: // Обознаение выводов и кнопок
31: #define START RA0 // Кнопка запуска работы МК
32: #define STOP RA3 // Кнопкка остановки работы МК
33: #define LED RA1 // Вывод на светодиоды
34: #define GREEN 0 // Сигнал для зеленого светодиода
35: #define RED 1 // Сигнал для красного светодиода
36: #define GENERATOR RA2 // Выход генератора
37:
38: // PIC10F322 Configuration Bit Settings
39:
40: // 'C' source line config statements
41:
42: // CONFIG
43: #pragma config FOSC = EC // Oscillator Selection bits (EC: CLKIN function enabled)
44: #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
45: #pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
46: #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
47: #pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
48: #pragma config CP = ON // Code Protection bit (Program memory code protection is enabled)
49: #pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)
50: #pragma config LPBOR = ON // Brown-out Reset Selection bits (BOR enabled)
51: #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
52: #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
53:
54: // #pragma config statements should precede project file includes.
55: // Use project enums instead of #define for ON and OFF.
56:
57: void Prepare(); // Функция подготовки МК
58:
59: int main()
60: {
61: Prepare(); // Запуск функции подготовки
01E7 21DC CALL 0x1DC
62: int K = 4;
01E8 3004 MOVLW 0x4
01E9 00C2 MOVWF K
01EA 3000 MOVLW 0x0
01EB 00C3 MOVWF 0x43
63: LED = RED;
01EC 1485 BSF PORTA, 0x1
64: while(1) // Бесконечный цикл работы
65: {
66: if((START == 0) && (STOP == 1)) // Проверка на нажатые кнопки
01ED 29FB GOTO 0x1FB
01EE 1D85 BTFSS PORTA, 0x3
01EF 29FA GOTO 0x1FA
01FB 1C05 BTFSS PORTA, 0x0
01FC 29EE GOTO 0x1EE
67: {
68: //LED = GREEN; // Зажигаем зеленый светодиод
69: //srand(K); // Инициализация генератора случайных импульсов
70: //K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
71: //for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
72: __delay_us(SIGNAL-4); // Определяем задержку
01F0 3022 MOVLW 0x22
01F1 00C1 MOVWF 0x41
01F2 0BC1 DECFSZ 0x41, F
01F3 29F2 GOTO 0x1F2
01F4 0000 NOP
73: GENERATOR = 1; // Подаем на выход лог. единицу
01F5 1505 BSF PORTA, 0x2
74: __delay_us(SIGNAL-2); // Определяем длительность сигнала
01F6 3025 MOVLW 0x25
01F7 00C1 MOVWF 0x41
01F8 0BC1 DECFSZ 0x41, F
01F9 29F8 GOTO 0x1F8
75: GENERATOR = 0; // Подаем на выход лог. ноль
01FA 1105 BCF PORTA, 0x2
76: }
77: else
01FD 29FA GOTO 0x1FA
78: {
79: //LED = RED; // Зажигаем красный светодиод
80: GENERATOR = 0; // На выход ставил лог. ноль
81: }
82: }
83: return 0;
84: }
85:
86: // Функция подготовки
87: void Prepare()
88: {
89: TRISA = 0b1001; // Направление работы ножек порта А (вход)
01DC 3009 MOVLW 0x9
01DD 0086 MOVWF TRISA
90: PORTA = 0b0000; // очищаем порт А
01DE 0185 CLRF PORTA
91: OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
01DF 3070 MOVLW 0x70
01E0 0090 MOVWF OSCCON
92: WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
01E1 30F0 MOVLW 0xF0
01E2 00C0 MOVWF __pcstackBANK0
01E3 0840 MOVF __pcstackBANK0, W
01E4 0589 ANDWF WPUA, F
93: ANSELA = 0; // Отключение аналоговой части
01E5 0188 CLRF ANSELA
94: }
01E6 0008 RETURNСпойлер
Код: Выделить всё
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
#define DELMIN 100 // Максимальная задержка в мкс
#define DELMAX 400000 // Максимальная задержка в мкс
// Обознаение выводов и кнопок
#define BUTTON RA0 // Кнопка МК
#define LED RA1 // Вывод на светодиоды
#define GREEN 0 // Сигнал для зеленого светодиода
#define RED 1 // Сигнал для красного светодиода
#define GENERATOR RA2 // Выход генератора
// PIC10F322 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = EC // Oscillator Selection bits (EC: CLKIN function enabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = ON // Code Protection bit (Program memory code protection is enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (Low-voltage programming enabled)
#pragma config LPBOR = ON // Brown-out Reset Selection bits (BOR enabled)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
void Prepare(); // Функция подготовки МК
int main()
{
Prepare(); // Запуск функции подготовки
int K = 4;
while(1) // Бесконечный цикл работы
{
if(BUTTON == 1) // Проверка на нажатые кнопки
{
LED = GREEN; // Зажигаем зеленый светодиод
//srand(K); // Инициализация генератора случайных импульсов
//K = DELMIN + rand ()% DELMAX; // Присвоение псевдослучайного числа
//for(int i = 0; i <= K/60; i++) {} // Пустой цикл задержки
__delay_us(SIGNAL-4); // Определяем задержку
GENERATOR = 1; // Подаем на выход лог. единицу
__delay_us(SIGNAL-2); // Определяем длительность сигнала
GENERATOR = 0; // Подаем на выход лог. ноль
}
else
{
LED = RED; // Зажигаем красный светодиод
GENERATOR = 0; // На выход ставил лог. ноль
}
}
return 0;
}
// Функция подготовки
void Prepare()
{
TRISA = 0b1001; // Направление работы ножек порта А (вход)
PORTA = 0b0000; // очищаем порт А
OSCCON = (1<<4)|(1<<5)|(1<<6); // Установка IRCF = '111' для частоты в 16 MHz
WPUA&=~((1<<0)|(1<<1)|(1<<2)|(1<<3)); // Отключение WEAK PULL-UP
ANSELA = 0; // Отключение аналоговой части
}Спойлер

Последний раз редактировалось SpeedFighter Пт дек 08, 2017 19:14:41, всего редактировалось 1 раз.


