реклама на сайте
подробности

 
 
> Основы программирования PIC-контроллеров
Supersonic
сообщение Jan 16 2012, 11:48
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 7-06-11
Пользователь №: 65 542



Всем привет. раньше я работал только с атмегами, а сейчас задача с PIC12F675. Суть вопроса такова: если порт работает на выход, то значением на выходе управляет, насколько я понял, D-триггер. у него информационный вход управляется регистром GPIO, а тактирующий, согласно даташит, управляется регистром PORT. но я не нашел такого регистра, + ко всему компилятор ругается (нет такого регистра). Помогите хотя бы диодом поморгать)) Как изменять выходное состояние пинов?


--------------------
Пользователь № 0х10006
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Herz
сообщение Jan 17 2012, 11:10
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Supersonic @ Jan 16 2012, 13:48) *
Всем привет. раньше я работал только с атмегами, а сейчас задача с PIC12F675. Суть вопроса такова: если порт работает на выход, то значением на выходе управляет, насколько я понял, D-триггер. у него информационный вход управляется регистром GPIO, а тактирующий, согласно даташит, управляется регистром PORT. но я не нашел такого регистра, + ко всему компилятор ругается (нет такого регистра). Помогите хотя бы диодом поморгать)) Как изменять выходное состояние пинов?

Какой компилятор? Если HI-TECH, поинтересуйтесь содержимым файла pic12f6x.h из папки include. Станет понятно, как названы регистры. Приведу пример примитивной программки для управления RGB-светодиодом подсветки на PIC12F629, может, сгодится:

Код
/************************************************************/
/* Программа управления RGB светодиодом подсветки часов     */
/* при помощи программного ШИМ  на    PIC12F629 (вариант 1) */
/************************************************************/

#include <pic.h>



#define        RO    GPIO0                // red output, pin 7        
#define        GO    GPIO1                // green output, pin 6
#define        BO    GPIO2                // blue output, pin 5

#define        PWM_Period        for    (i=1; i>0; i++)\
                {\
                if (QR)\
                    {RO = 1; QR--;}\
                else    RO = 0;\
                if (QG)\
                    {GO = 1; QG--;}\
                else    GO = 0;\
                if (QB)\
                    {BO = 1; QB--;}\
                else    BO = 0;\
                }


main()
{
unsigned char Q, Q1, Q2, i, k;
unsigned char     QR, QG, QB;        // к-т заполнения ШИМ для
                                // каждого цвета
unsigned char    step;            // шаг изменения яркости
                                // в периодах ШИМ


INTCON = 0;                        // disable interrupts

GPIO = 0;                        // init GPIO
CMCON = 0x07;                    // comparator module disabled
TRISIO = 0b00101000;            // GP0 - GP2 - outputs
OPTION = 0b00000001;            // prescaler TMR0 1:4

while    (1)
    {
/* Palette 1                         */
step = 18;
    for    (Q = 253, Q1 = 0; Q > Q1; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q;             // синий падает
            QG = Q1; QR = 0;    // зелёный растёт, красного нет
            PWM_Period
            }
        }
    for    (Q1 = 0; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q1;            // красный растёт
            QG = 125, QB = Q;     // синий падает
            PWM_Period
            }
        }
    for    (Q = 125; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q1;            // красный растёт
            QG = Q; QB = 0;     // зелёный падает, синего нет
            PWM_Period
            }
        }
/* Palette 2                         */
    QB = 0;                        // синего нет
    step = 24;
    for    (Q = 253; Q > 0; Q--)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q;             // красный падает
            QG = 253-Q;            // зелёный растёт
            PWM_Period
            }
        }
/* Palette 3                         */
    step = 38;
    for    (Q = 253, Q1 = 0; Q > Q1; Q-=2, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q;             // зелёный падает
            QR = Q1; QB = Q1;    // красный и синий растут
            PWM_Period
            }
        }
    for    (; Q1 > 0; Q+=2, Q1--)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q;             // синий растёт
            QR = Q1; QG = Q1;    // красный и зелёный падают
            PWM_Period
            }
        }
    


/* Palette 4                         */
    step = 24;
    QG = 0;                        // зелёного нет
    for    (Q = 253; Q > 0; Q--)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q;             // синий падает
            QR = 253-Q;            // красный растёт
            PWM_Period
            }
        }

/* Palette 5                         */
    step = 38;
    for    (Q = 253, Q1 = 0; Q > Q1; Q-=2, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q;             // красный падает
            QG = Q1; QB = Q1;    // зелёный и синий растут
            PWM_Period
            }
        }
    for    (; Q1 > 0; Q+=2, Q1--)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q;             // зелёный растёт
            QR = Q1; QB = Q1;    // красный и синий падают
            PWM_Period
            }
        }

/* Palette 6                         */
step = 18;
    for    (Q = 253, Q1 = 0; Q > Q1; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q;             // зелёный падает
            QR = Q1; QB = 0;    // красный растёт, синего нет
            PWM_Period
            }
        }
    for    (Q1 = 0; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q1;            // синий растёт
            QR = 125, QG = Q;     // зелёный падает
            PWM_Period
            }
        }
    for    (Q = 125; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q1;            // синий растёт
            QR = Q; QG = 0;     // красный падает, зелёного нет
            PWM_Period
            }
        }
/* Palette 7                         */
    step = 38;
    for    (Q = 253, Q1 = 0; Q > Q1; Q-=2, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QB = Q;             // синий падает
            QG = Q1; QR = Q1;    // зелёный и красный растут
            PWM_Period
            }
        }
    for    (; Q1 > 0; Q+=2, Q1--)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q;             // красный растёт
            QG = Q1; QB = Q1;    // зелёный и синий падают
            PWM_Period
            }
        }

/* Palette 8                         */
step = 18;
    for    (Q = 253, Q1 = 0; Q > Q1; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QR = Q;             // красный падает
            QB = Q1; QG = 0;    // синий растёт, зелёного нет
            PWM_Period
            }
        }
    for    (Q1 = 0; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q1;            // зелёный растёт
            QB = 125, QR = Q;     // красный падает
            PWM_Period
            }
        }
    for    (Q = 125; Q > 0; Q--, Q1++)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q1;            // зелёный растёт
            QB = Q; QR = 0;     // синий падает, красного нет
            PWM_Period
            }
        }
/* Palette 9                         */
    step = 24;
    QR = 0;                        // красного нет
    for    (Q = 253; Q > 0; Q--)
        {
        for    (k = step; k > 0; k--)
            {
            QG = Q;             // зелёный падает
            QB = 253-Q;            // синий растёт
            PWM_Period
            }
        }

    }

}

Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 17 2012, 11:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Herz @ Jan 17 2012, 15:10) *
Приведу пример примитивной программки ...
Боюсь, что у ТС от этой примитивной програмки волосы встанут дыбом, и он с криком убежит на волю в пампасы laughing.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 13:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016