Модераторы: PILOT, ManiaK, Mazzi

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [mcs-51] Помогите найти софт, AT80c2051 
:(
    Опции темы
BrAgOl
Дата 15.8.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.3.2005
Где: М.О.

Репутация: нет
Всего: нет



Да я уже разобрался спасибо.

Осталось разобраться с компилятором и попробовать что-то сварганить элементарное и попробовать под руководством старших сотрудников заставить реальные светодиоды мигать smile .
Вопрос по поводу простых исходников все еще открыт smile 
А так же по поводу русскоязычной документации, прочел страниц 30 родной и что-то пока не впечатлило

Например будет ли этот код заставлять мигать светодиод, подключенный к порту Р0, если я правильно понял, то эти порты можно использовать для общения с внешними устройствами?
Код

#include <stdint.h>
#include <stdbool.h>
#include <8051.h>

void paus( int16_t );

void main()
{
        int16_t some_size = 1000, i;
        P0 = 0;
        for (i = 0; i < some_size; ++i)
        {
            P0 = 1;
            paus( 100 );
            P0 = 0;
        }
}

void paus( int16_t p )
{
    int16_t i = 0;
    while( i <= p )
        ++i;
}


Это сообщение отредактировал(а) BrAgOl - 15.8.2011, 16:01
PM MAIL   Вверх
BrAgOl
Дата 23.8.2011, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.3.2005
Где: М.О.

Репутация: нет
Всего: нет



keil разрешает объявления типа: sbit BLINK = P3^4;

SDCC  на объявление __sbit BLINK = P3_4; выдает ошибку 
Цитата

main.c|3|error 2: Initializer element is not constant|


такая же ошибка появляется если объявить, как константу, но дело в том, что мне не нужна константа бит должен инвертироваться.

Почему нельзя работать с битами подобным образом?
Также пробовал передавать указатель на бит в функцию, но подобные указатели запрещены.

ЗЫ код ниже полностью рабочий, так как там используется P3 ^= 0x10;

Код

#include <8052.h>

//__sbit BL = P3_4;

void blink( unsigned int * );

void main()
{
    unsigned int counter = 100;
    unsigned int *ptr = &counter;
    P3 = 0x0FE;
    TH0 = 0xDB;
    TL0 = 0xF2;
    TMOD |= 0x1;
    TR0 = 1;
    while( 1 )
    {
        blink( ptr );
    }
}

void blink( unsigned int *count )
{
    if (TF0 == 1)
    {
        TF0 = 0;
        --(*count);
        if (*count == 0)
        {
            *count = 28;
            //BL = ~BL;
            P3 ^= 0x10;
        }
        TH0 = 0xDB;
        TL0 = 0xF2;
    }
}



Это сообщение отредактировал(а) BrAgOl - 23.8.2011, 14:45
PM MAIL   Вверх
BrAgOl
Дата 26.8.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.3.2005
Где: М.О.

Репутация: нет
Всего: нет



Кто-нибудь использовал EdSim51?

Если писать на ассемблере, то он корректно воспринимает код и делает то, что я хочу, но когда пытаюсь в него загрузить нех файл созданный с помощью кейла или SDCC, то он собственно не пашет и странным образом зацикливает прогу, вот пример рабочего кода ассемблера и не рабочего Си, прога элементарная, в качестве примера на дисплее выводит1 -> 2 -> 3 в цикле:

Код

main:
setb p3.3
setb p3.4
call one
call two
call three
jmp main

one:
clr p1.1
clr p1.2
call clear
ret

two:
clr p1.0
clr p1.1
clr p1.6
clr p1.4
clr p1.3
call clear
ret

three:
clr p1.0
clr p1.1
clr p1.6
clr p1.2
clr p1.3
call clear
ret

clear:
mov p1, #0FFH
ret



Код

void one();
void two();
void three();
void clear();

sbit P3_3 = P3^3;
sbit P3_4 = P3^4;

void main( void )
{
    P3_3 = 1;
    P3_4 = 1;
    while(1)
    {
     one();
     two();
     three();
    }
}

void one()
{
    /*__sbit P1_1 = 0;
    __sbit P1_2 = 0;*/

    P1 = 0xF9;
    clear();
}

void two()
{
    /*__sbit P1_0 = 0;
    __sbit P1_1 = 0;
    __sbit P1_6 = 0;
    __sbit P1_4 = 0;
    __sbit P1_3 = 0;*/

    P1 = 0xA4;
    clear();
}

void three()
{
    /*__sbit P1_0 = 0;
    __sbit P1_1 = 0;
    __sbit P1_6 = 0;
    __sbit P1_2 = 0;
    __sbit P1_3 = 0;*/

    P1 = 0xB0;
    clear();
}

void clear()
{
    P1 = 0xFF;
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.