Пт дек 08, 2017 19:12:01
Пт дек 08, 2017 19:45:09
Пт дек 08, 2017 19:46:52
Пт дек 08, 2017 19:49:31
Пт дек 08, 2017 19:57:55
Пт дек 08, 2017 20:08:35
Пт дек 08, 2017 20:17:35
01ED 29FB GOTO 0x1FB
01EE 1D85 BTFSS PORTA, 0x3 ; Если на входе 1, перейти на 01FB
01EF 29FA GOTO 0x1FA
01FB 1C05 BTFSS PORTA, 0x0 ; Если на входе 1, перейти на 01FD (задержка)
01FC 29EE GOTO 0x1EE
Пт дек 08, 2017 21:00:09
Пт дек 08, 2017 21:11:38
Пт дек 08, 2017 21:19:16
Пт дек 08, 2017 21:43:01
Сб дек 09, 2017 20:59:29
// Подключение нужных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// Параметры микроконтроллера
#define _XTAL_FREQ 16000000 // Тактовая частота 4 МГц
#define BOUNCE 15 // Время в мс для обработки дребезга
#define CORRMIN 18 // Число итераций в цикле для задержки в 100 мкс
#define CORRMAX 79998 // Число итераций в цикле для задержки в 400000 мкс
// CORR - Correction factor
// Параметры сигнала
#define SIGNAL 30 // Длительность сигнала в мкс
// Обознаение выводов и кнопок
#define START RA2 // Кнопка ПУСК МК
#define STOP RA3 // Кнопка СТОП МК
#define LED RA0 // Вывод на светодиоды
#define GREEN 1 // Сигнал для зеленого светодиода
#define RED 0 // Сигнал для красного светодиода
#define GENERATOR RA1 // Выход генератора
// PIC10F322 Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = INTOSC // 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(); // Функция подготовки МК
void CheckButton(); // Функция опроса кнопок
void RandomDelay(); // Функция генерирования случайной задержки
int g_bStat = 0; // Переменная для запоминания режима МК (вкл/выкл)
/*
* g_Random[5] хранит следующие значения:
* 0 - Начальное значение конгруэнтный метода
* 1 - Текунщее значение конгруэнтный метода
* 2 - Коэффициент 'a' конгруэнтный метода
* 3 - Коэффициент 'b' конгруэнтный медода
*/
int g_Random[4];
int main() // Главная функция
{
// Объявление параметров конгруэнтного метода
g_Random[0] = 1;
g_Random[2] = 3;
g_Random[3] = 5;
Prepare(); // Запуск функции подготовки
while(1) // Бесконечный цикл работы
{
CheckButton(); // Опрос кнопок
if(g_bStat) // Проверка режима
{
LED = GREEN; // Включение зеленого светодиода (вкл МК)
RandomDelay(); // Запуск функции случайной задержки
GENERATOR = 1; // Выставляем лог. 1 на выход генератора
__delay_us(SIGNAL); // Задерживаем лог. 1 на выходе
GENERATOR = 0; // Обнуляем выход генератора
}
else
{
LED = RED; // Включение красного светодиода (выкл МК)
}
}
return 0;
}
// Функция подготовки
void Prepare()
{
TRISA = 0b1100; // Направление работы ножек порта А (вход)
PORTA = 0b0000; // Очистка порта A
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; // Отключение аналоговой части
}
// Функция опроса клавиш
void CheckButton()
{
if(!START && STOP && !g_bStat) // Проверка на нажатие клавиши старт
{
__delay_ms(BOUNCE); // Обработка дребезка
if(!START && STOP) // Обработка дребезка
{
g_bStat = 1; // Установка режима МК (вкл)
}
else
{
g_bStat = 0; // Установка режима МК (выкл)
}
}
else if(START && !STOP && g_bStat) // Проверка на нажатие клавиши стоп
{
__delay_ms(BOUNCE); // Обработка дребезка
if(START && !STOP) // Обработка дребезка
{
g_bStat = 0; // Установка режима МК (выкл)
}
}
else if(!START && !STOP && g_bStat) // Защита от дурака
{
__delay_ms(BOUNCE); // Обработка дребезка
if(!START && !STOP) // Обработка дребезка
{
g_bStat = 0; // Установка режима МК (выкл)
}
}
}
void RandomDelay()
{
/*if(g_Random[2] % 2 == 0)
{
g_Random[1] = (c*g_Random[1] + d)%DELMAX;
g_Random[2]++;
if(g_Random[1] < 100)
{
g_Random[1] = (c*g_Random[1] + d)%DELMAX;
}
for(int i = 0; i <= g_Random[1] - 100; i++)
{
__delay_us(1);
}
}
else
{
g_Random[1] = (a*g_Random[1] + b)%DELMAX;
g_Random[2]++;
if(g_Random[1] < 100)
{
g_Random[1] = (c*g_Random[1] + d)%DELMAX;
}
for(int i = 0; i <= g_Random[1] - 100; i++)
{
__delay_us(1);
}
}*/
/* Конгруэнтный метод - простой спобо для генерации случайных чисел,
* имеет следующий алгоритм:
* Ki = (Ki-1*a + b) mod c, имеет максимальный период = c.
*/
g_Random[1] = (g_Random[2]*g_Random[1] + g_Random[3])%CORRMAX;
if(g_Random[1] < CORRMIN) // Задержка долна быть большее 100 мкс;
{
g_Random[1] = (g_Random[2]*g_Random[1] + g_Random[3])%CORRMAX;
}
for(int i = 0; i <= g_Random[1]; i++) // Цикл задержек в 1 мкс
{
__delay_us(1);
}
}
Вс дек 10, 2017 07:24:19
а как написано в этом сообщении - это сложно или по другим причинам не подходит?SpeedFighter писал(а):1. Как просто можно получить случайное целое число для начального значения, как описано в этом сообщении
на сколько я могу понять смысл слова word, то 512 words = 1024 bytesSpeedFighter писал(а):2. Чему равно 512 Words of Flash Program Memory в байтах?
я бы плакал через строку...SpeedFighter писал(а):3. Правильно ли я прикинул алгоритм быстродействия функции задерки
Вс дек 10, 2017 07:54:13
а как написано в этом сообщении - это сложно или по другим причинам не подходит?SpeedFighter писал(а):1. Как просто можно получить случайное целое число для начального значения, как описано в этом сообщении
Вс дек 10, 2017 08:50:56
Вс дек 10, 2017 09:27:06
Вс дек 10, 2017 19:01:42
Вс дек 10, 2017 19:59:25
Вс дек 10, 2017 20:03:08
Пн дек 11, 2017 04:03:07