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

 
 
15 страниц V  « < 11 12 13 14 15 >  
Reply to this topicStart new topic
> Silabs C8051F120
Radik2
сообщение Jun 4 2015, 07:06
Сообщение #181


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(alexunder @ Jun 4 2015, 11:47) *
Да, да, а мы вымираем как динозавры sm.gif


Надеюсь, что на мой век хватит. Очень не хотелось бы изучать всякие Кортексы. Только, если возьмут на такую работу ))
В наших краях - маловероятно.
Go to the top of the page
 
+Quote Post
Harbinger
сообщение Jun 4 2015, 10:36
Сообщение #182


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Касательно именно Silabs есть и историческая причина. Изначально их продукция была достаточно дорогой и потому "нишевой".


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post
Radik2
сообщение Jun 5 2015, 04:09
Сообщение #183


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(Harbinger @ Jun 4 2015, 15:36) *
Касательно именно Silabs есть и историческая причина. Изначально их продукция была достаточно дорогой и потому "нишевой".


И сейчас не очень дешевые. Думаю, 90% объема продаж - на производство.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 8 2015, 06:45
Сообщение #184


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Radik2 @ Jun 2 2015, 14:13) *
А где бы почерпнуть информацию о том, как пишутся программы на Си в Keil для 8051 ?


Не совсем про 8051, но просветлению помогает:
Прикрепленный файл  HowToCodingWithoutErrors.pdf ( 374.9 килобайт ) Кол-во скачиваний: 838


Ну и на всякий случай журнал "Радио" за 1994: в нескольких номерах была статья Фрунзе "Однокристальные микро-ЭВМ семейства 8051".


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Radik2
сообщение Jun 9 2015, 09:36
Сообщение #185


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(Obam @ Jun 8 2015, 11:45) *
Не совсем про 8051, но просветлению помогает:
Прикрепленный файл  HowToCodingWithoutErrors.pdf ( 374.9 килобайт ) Кол-во скачиваний: 838


Ну и на всякий случай журнал "Радио" за 1994: в нескольких номерах была статья Фрунзе "Однокристальные микро-ЭВМ семейства 8051".

Благодарю за информацию. Почитаем ...
Go to the top of the page
 
+Quote Post
Radik2
сообщение Jun 11 2015, 18:18
Сообщение #186


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Приветствую всех!
Играюсь с таймером/задержками/прерываниями. Потратил два часа времени и не смог разобраться в чем причина.
Замысел - ввести константу zz равную 50. Т.е., вместо "counter = 50" в двух местах кода написать "counter = zz".
Как только раскомментирую первую строку с "counter = zz" в Timer0_IS, светодиод перестает мигать.
Прошу помощи.
Планирую организовать задержки различной длительности с применением таймера.

Код
#include <c8051f120.h>                
#include <stdio.h>
#define zz 50;
sbit LED_BLINK = P1^6;
unsigned int counter = 50;



void Port_Init (void);                
void Timer0_Init (void);

void Oscillator_Init()
{
    char SFRPAGE_SAVE = SFRPAGE;
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCICN    = 0x81;
    CCH0CN    &= ~0x20;
    SFRPAGE   = LEGACY_PAGE;
    FLSCL     = 0xB0;
    SFRPAGE   = CONFIG_PAGE;
    CCH0CN    |= 0x20;
    PLL0CN    |= 0x01;
    PLL0DIV   = 0x01;
    PLL0FLT   = 0x0F;
    PLL0MUL   = 0x10;
    for (i = 0; i < 15; i++);  // Wait 5us for initialization
    PLL0CN    |= 0x02;
    while ((PLL0CN & 0x10) == 0);
    CLKSEL    = 0x02;
    SFRPAGE = SFRPAGE_SAVE;
}


void Port_Init (void)
{
   char SFRPAGE_SAVE = SFRPAGE;        

   SFRPAGE = CONFIG_PAGE;              

   XBR2 = 0x40;                        
   P1MDOUT = 0x40;                    

   SFRPAGE = SFRPAGE_SAVE;            
}

void Timer0_Init(void)
{
   char SFRPAGE_SAVE = SFRPAGE;        // Save Current SFR page

   SFRPAGE = TIMER01_PAGE;             // Set SFR page

   TH0 = 0xDB;
   TL0 = 0xF2;                         // Init Timer0 Low register
   TMOD = 0x01;                        // Timer0 in 16-bit mode
   CKCON = 0x02;                       // Timer0 uses a 1:48 prescaler
   ET0 = 1;                            // Timer0 interrupt enabled
   TCON = 0x10;                        // Timer0 ON

   SFRPAGE = SFRPAGE_SAVE;             // Restore SFR page
}

void Timer0_ISR (void) interrupt 1
{
//counter = zz;                        // Здесь было counter = 50;
TF0 = 0;
counter--;
if (counter == 0)
{
   counter = zz;                      // Здесь было counter = 50;
   LED_BLINK = ~LED_BLINK;
}
TH0 = 0xDB;
TL0 = 0xF2;
}

void main(void)
{
   WDTCN = 0xDE;                       // Disable watchdog timer
   WDTCN = 0xAD;

   Oscillator_Init();
   Timer0_Init ();                     // Initialize the Timer0
   Port_Init ();                       // Init Ports
   EA = 1;                             // Enable global interrupts
   //LED_BLINK = 0;
   while (1);
}
Go to the top of the page
 
+Quote Post
alexunder
сообщение Jun 12 2015, 06:50
Сообщение #187


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(Radik2 @ Jun 11 2015, 20:18) *
Как только раскомментирую первую строку с "counter = zz" в Timer0_IS, светодиод перестает мигать.

Все правильно. А зачем там в начале обр. прерывания эта строчка? Если ее открыть, то условие if (counter==0) никогда не выполнится и светодиод не включится.
Чтобы понять, прокомментируйте действие каждой строки в Timer0_IS и Вам все станет ясно.

Цитата(Radik2 @ Jun 11 2015, 20:18) *
Планирую организовать задержки различной длительности с применением таймера.

Зачем для этого вводить дополнительную глобальную переменную counter если у таймера есть регистры, с помощью которых можно задавать кол-во отсчетов? Вижу смысл в counter только для каких-то специальных нужд, а для задержек с пом-ю таймера этого не требуется имхо.


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post
Radik2
сообщение Jun 12 2015, 12:35
Сообщение #188


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(alexunder @ Jun 12 2015, 11:50) *
Зачем для этого вводить дополнительную глобальную переменную counter если у таймера есть регистры, с помощью которых можно задавать кол-во отсчетов? Вижу смысл в counter только для каких-то специальных нужд, а для задержек с пом-ю таймера этого не требуется имхо.


Я так понял, что число в counter определяет количество переполнений таймера (большие задержки, к тому же частота 98 МГц): таймер переполнился - инкрементируем counter и проверяем равенство counter нулю.
Пока не придумал функцию, которая бы запускала таймер на необходимое кол-во раз повторений. При этом ядро должно быть готово отреагировать на другие прерывания и задачи.
Go to the top of the page
 
+Quote Post
alexunder
сообщение Jun 12 2015, 12:55
Сообщение #189


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(Radik2 @ Jun 12 2015, 14:35) *
Я так понял, что число в counter определяет количество переполнений таймера (большие задержки, к тому же частота 98 МГц): таймер переполнился - инкрементируем counter и проверяем равенство counter нулю.

тогда ясно - большие задержки. Ну вот Вы сами и дали объяснение своего кода. Не нужно в начале обр. прерывания инициализировать counter.


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post
Radik2
сообщение Jun 12 2015, 14:37
Сообщение #190


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(alexunder @ Jun 12 2015, 17:55) *

Не пойму почему программа не работает должным образом, если в строке
unsigned int counter = 50;
убрать "= 50".
Ведь есть zz.

Сообщение отредактировал Radik2 - Jun 12 2015, 14:39
Go to the top of the page
 
+Quote Post
alexunder
сообщение Jun 13 2015, 05:06
Сообщение #191


unexpected token
****

Группа: Свой
Сообщений: 899
Регистрация: 31-08-06
Из: Мехелен, Брюссель
Пользователь №: 19 987



Цитата(Radik2 @ Jun 12 2015, 16:37) *
Не пойму почему программа не работает должным образом, если в строке
unsigned int counter = 50;
убрать "= 50".
Ведь есть zz.

не понял вопроса.

Можно сделать так:
Код
#define zz 50;
unsigned int counter = zz;

или Вы о том, что когда counter не проинициализирован числом zz, то программа ведет себя странно? В таком случае проследите последовательность изменения переменной counter и представьте, что происходит когда она не проинициализирована числом zz.
Заодно вот Вам задачка: какой будет zz на старте программы после аппаратного сброса МК, если Вы ее не инициализируете? Подсказка: смотреть в какой памяти компилятор разместит эту переменную, можно попросить его ассемблерный листинг сгенерировать.


--------------------
А у тебя SQUID, и значит, мы умрем.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 15 2015, 07:21
Сообщение #192


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Можно я свои 5 копеек добавлю? Спасибо.
1) "…таймер переполнился - инкрементируем counter…" всё-таки декрементируем (не придирки ради, а программу пишем)
2) почему не используете точки остановки? на входе в обработчик прерывания? Последующим пошаговый проход сразу показал бы не нужную безусловную инициализацию counter в 50 и что он не менялся меньше 49.

Подсказка wink.gif zz от сброса не зависит - это символическое имя (константа).

Сообщение отредактировал Obam - Jun 15 2015, 07:27


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Radik2
сообщение Aug 3 2015, 06:00
Сообщение #193


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(Harbinger @ Jun 4 2015, 15:36) *


Увидел вот эти камни случайно: http://ru.aliexpress.com/item/10pcs-lot-P8...2386655890.html
Errata практически пустая. Хорошая замена всяким ATtiny.
Есть у них на сайте генератор кода: http://www.codearchitect.org/nxp/v2/
Не приходилось применять?
Go to the top of the page
 
+Quote Post
Harbinger
сообщение Aug 3 2015, 08:20
Сообщение #194


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Приходилось, на пути от атмела к силабсу. sm.gif Здесь в недрах даже кое-что выкладывал насчёт программатора для них. И генератор кода использовал, и ошибку в нём нашёл. sm.gif
Увы, их сняли с производства, из всей линейки остались только 925 и 936. На смену им пришла серия LPC800 (ядро Cortex-M0, 30 МГц), почти pin-to-pin и с сопоставимой ценой (правда, замена есть только для "мелких" - 915...917, 920...925).
Недостатки серии LPC900 были в отсутствии внутрисхемной отладки и малом объёме памяти в мелких корпусах (SSOP-16 - 2 кБ FLASH, SSOP-20 - 8 кБ, RAM всего 256 байт).


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post
Radik2
сообщение Aug 4 2015, 02:02
Сообщение #195


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030



Цитата(Harbinger @ Aug 3 2015, 13:20) *

Получается, что из МК 51-й серии Silabs предлагает лучшее соотношение качество/цена.
Go to the top of the page
 
+Quote Post

15 страниц V  « < 11 12 13 14 15 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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