Ср мар 14, 2018 08:35:16
[color=#008000]
/*
* File: pwm.c
* Author: dexart12
*
* Created on 14 march 2018 y., 9:08
*/
#include <xc.h>
#define _XTAL_FREQ 20000000
#define TMR1PRESCALE 8
#define OUT RC2
// CONFIG
#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
unsigned long CCPR = 0;
const unsigned long total = 12500;
unsigned long current = 0.5 * total;
// прерывание
void interrupt tmr1isr() {
if (CCP1IF == 1) {
if (OUT == 1) {
OUT = 0;
CCPR = total - current;
}
else {
OUT = 1;
CCPR = current;
}
// ставим значение ССРR в ССР модули регистров
CCPR1H = CCPR >> 8;
CCPR1L = CCPR;
CCP1IF = 0;
}
}
//главная функция
void main() {
TRISC = 0; //выходы порта С выходы
PORTC = 0; // порты С низкий уровень
T1CON = 0b00110000; // Выключен таймер 1 и установлен прскалер 8
TMR1H = 0; //очищаем регистры
TMR1L = 0; // очищаем регистры
CCP1CON = 0x0b; //установка ССР модуля сравнение
CCPR = 0; // установка нуля
CCP1IF = 0; // очистим флаг прерываний
CCP1IE = 1; // разрешим прерывание ССР1
INTCON = 0xC0; // разрешение глобальных и переферийных прерваний
T1CON = 0b00110001; // запуск таймера 1
while(1) {
current = total * 0.5;// 50% цикл
__delay_ms(5000); // задержка 5 сек
current = total * 0.1; // 10% цикл
__delay_ms(5000); // задержка 5 сек
}
}
Ср мар 14, 2018 09:12:22
Ср мар 14, 2018 11:51:12
Ср мар 14, 2018 15:00:33
Ср мар 14, 2018 18:37:45
пишут только говнокодеры-ардуинщики
- Код:
const unsigned long total = 12500;
unsigned long current = 0.5 * total;
- Код:
current = total * 0.5;
current = total * 0.1;