|
|
  |
Silabs C8051F120 |
|
|
|
Jun 4 2015, 07:06
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(alexunder @ Jun 4 2015, 11:47)  Да, да, а мы вымираем как динозавры  Надеюсь, что на мой век хватит. Очень не хотелось бы изучать всякие Кортексы. Только, если возьмут на такую работу )) В наших краях - маловероятно.
|
|
|
|
|
Jun 5 2015, 04:09
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(Harbinger @ Jun 4 2015, 15:36)  Касательно именно Silabs есть и историческая причина. Изначально их продукция была достаточно дорогой и потому "нишевой". И сейчас не очень дешевые. Думаю, 90% объема продаж - на производство.
|
|
|
|
|
Jun 8 2015, 06:45
|

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

|
Цитата(Radik2 @ Jun 2 2015, 14:13)  А где бы почерпнуть информацию о том, как пишутся программы на Си в Keil для 8051 ? Не совсем про 8051, но просветлению помогает:
HowToCodingWithoutErrors.pdf ( 374.9 килобайт )
Кол-во скачиваний: 838Ну и на всякий случай журнал "Радио" за 1994: в нескольких номерах была статья Фрунзе "Однокристальные микро-ЭВМ семейства 8051".
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Jun 9 2015, 09:36
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(Obam @ Jun 8 2015, 11:45)  Не совсем про 8051, но просветлению помогает:
HowToCodingWithoutErrors.pdf ( 374.9 килобайт )
Кол-во скачиваний: 838Ну и на всякий случай журнал "Радио" за 1994: в нескольких номерах была статья Фрунзе "Однокристальные микро-ЭВМ семейства 8051". Благодарю за информацию. Почитаем ...
|
|
|
|
|
Jun 11 2015, 18:18
|
Частый гость
 
Группа: Участник
Сообщений: 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); }
|
|
|
|
|
Jun 12 2015, 06:50
|

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, и значит, мы умрем.
|
|
|
|
|
Jun 12 2015, 12:35
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(alexunder @ Jun 12 2015, 11:50)  Зачем для этого вводить дополнительную глобальную переменную counter если у таймера есть регистры, с помощью которых можно задавать кол-во отсчетов? Вижу смысл в counter только для каких-то специальных нужд, а для задержек с пом-ю таймера этого не требуется имхо. Я так понял, что число в counter определяет количество переполнений таймера (большие задержки, к тому же частота 98 МГц): таймер переполнился - инкрементируем counter и проверяем равенство counter нулю. Пока не придумал функцию, которая бы запускала таймер на необходимое кол-во раз повторений. При этом ядро должно быть готово отреагировать на другие прерывания и задачи.
|
|
|
|
|
Jun 12 2015, 14:37
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(alexunder @ Jun 12 2015, 17:55)  Не пойму почему программа не работает должным образом, если в строке unsigned int counter = 50; убрать "= 50". Ведь есть zz.
Сообщение отредактировал Radik2 - Jun 12 2015, 14:39
|
|
|
|
|
Jun 13 2015, 05:06
|

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, и значит, мы умрем.
|
|
|
|
|
Jun 15 2015, 07:21
|

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

|
Можно я свои 5 копеек добавлю? Спасибо. 1) "…таймер переполнился - инкрементируем counter…" всё-таки декрементируем (не придирки ради, а программу пишем) 2) почему не используете точки остановки? на входе в обработчик прерывания? Последующим пошаговый проход сразу показал бы не нужную безусловную инициализацию counter в 50 и что он не менялся меньше 49. Подсказка  zz от сброса не зависит - это символическое имя (константа).
Сообщение отредактировал Obam - Jun 15 2015, 07:27
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Aug 3 2015, 08:20
|

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

|
Приходилось, на пути от атмела к силабсу.  Здесь в недрах даже кое-что выкладывал насчёт программатора для них. И генератор кода использовал, и ошибку в нём нашёл.  Увы, их сняли с производства, из всей линейки остались только 925 и 936. На смену им пришла серия LPC800 (ядро Cortex-M0, 30 МГц), почти pin-to-pin и с сопоставимой ценой (правда, замена есть только для "мелких" - 915...917, 920...925). Недостатки серии LPC900 были в отсутствии внутрисхемной отладки и малом объёме памяти в мелких корпусах (SSOP-16 - 2 кБ FLASH, SSOP-20 - 8 кБ, RAM всего 256 байт).
--------------------
Китайская комплектация - европейское качество! ;)
|
|
|
|
|
Aug 4 2015, 02:02
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 10-03-07
Из: Уфа
Пользователь №: 26 030

|
Цитата(Harbinger @ Aug 3 2015, 13:20)  Получается, что из МК 51-й серии Silabs предлагает лучшее соотношение качество/цена.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|