Chip115 писал(а):всем привет! пытаюсь перебраться на силобовские мк C8051Fxxx. Начал их осваивать и для наглядности хотелось бы стрельнуть у кого нить исходники на сях желательно (но не обязательно) с комментариями.И еще вопрос. В принципе если тут основа всему интеловское 8051 , то код от атмела на этом же ядре не сильно отличается названием регистров и принципами настройки периферии?
1. Что вы подразумваете под исходниками? При установке их (SiLabs) IDE есть несколько демонстрационных примеров.
2. Ядро у них какбы и 8051, но в то же время модернизированное, там есть свои фишки.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аще плохо въезжаю...
Помогите советом, как перейти на Silabs? с 8051 не разу не работал. возникли проблемы на самом начале... фактически прошел этап инициализации портов и застрял. С чего начать осваивать это ядро?
Пишу на сях.
В среде Keil
подскажите какую нить литературу по этим (или похожим на них) МК. У мя есть для 51 книга, но там все на асме.
Есть опыт программирования атмелов ... тини 2313, атмега 8, 16.
Курил доку по силабам.. толку мало:(
Chip115 писал(а):Как расчитать значения регистра для таймера0 ? допустим что мне нужно генерить прерывания по таймеру с периодом 78 us. этот таймер 8 бит. Его хватит в принципе? МК C8051F410.
В принципе, должно хватить! Это всего 78 тактов при 1 МГц.
Итак, поехали... Тактовая частота? Кварц/внутренняя? Делители тактовой частоты? Чем тактируется таймер? Предделители клоков таймера?
Глянул даташит... Встроенный генератор на 24.5 МГц, по умолчанию включён предделитель на 128
Странно, но у меня Configuration Wizard глючит, если выбрать 8051F4XX. А у вас?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Gudd-Head писал(а):
Странно, но у меня Configuration Wizard глючит, если выбрать 8051F4XX. А у вас?
у меня все работает. Спасибо за ответ. разобрался ))
Еще наглый вопросик... Нет ли ни у кого функции для динамического опроса клавиатуры? а то писать заново не охота )))
MSC-51 C8051F410
Chip115 писал(а):Пытаюсь прописать функцию задержки. Не работает. Не могу найти причину....Помогите, пожалуйста.
просто хочу мигать светодиодом. компилируется и прошивается без ошибок.
Доброго времени суток,Gudd-Head!
(предыстория в личке) Вы не посмотрели что и как на 310-м?:)
Не могу сообразить как через UART передать другому контроллеру например вот это $7A0F
UART же передает только один байт. затем поднимает флаг. Мы его сбрасываем и снова посылаем очередной байт. Я так понял?
Так мне придется просто отправить $0F , а следом $7A ?
Chip115, доброго. На работе полный завал, было не до 310-го.
Продублирую здесь ваше сообщение:
Chip115 писал(а):И снова сдрасте )
Продолжаю развлекаться с UART в контроллере C8051F410
Хочу реализовать тупую передачу массива данных 1234 .
Но почему то в терминал приходят 01 01 02 03 04
Не могу разобраться в чем причина. Почему дважды приходит единица? Вот кусок кода.
Задумано так.
Пока весь массив не передадим , продолжаем высылать поочередно данные из массива.
Как только счетчик i выходит за пределы массива - выставляем лог.1 в переменной stop и выходим из главного цикла.
Весь код в приложении.
И еще вопрос. как мне пересылать строки?
создать массив,скажем
и аналогично пихать в регистр SBUF0 по одному символу?
Тогда получится что будет бесконечно передаваться '1' .
В АВР видел что через UART передают строки по средсвам
тут такое реально провернуть? Если да,то как грамотно реализовать это?
Вы по-прежнему по этому коду работаете?
Не могу сообразить как через UART передать другому контроллеру например вот это $7A0F
UART же передает только один байт. затем поднимает флаг. Мы его сбрасываем и снова посылаем очередной байт. Я так понял?
Так мне придется просто отправить $0F , а следом $7A ?
Да, UART в общем случае передаёт всё по одному байту (а можно от 7-ми до 9-ти бит, вроде). Так что проще всего (имея в виду 8-ми битный UART) и единственно возможно передавать сначала $7A, потом $0F или наоборот.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Да,с этим.
Буду пихать тогда последовательно числа.
А как быть с повтором одного числа дважды? Я так и не разобрался...
P.S спасибо за ответ на столь глупый вопрос ))
Chip115 писал(а):А как быть с повтором одного числа дважды?
Если дважды передаётся первый байт, значит в цикле на отправку какой-то косяк.
Кстати, строки в СИ — массив символов, так что обращаться к нему можно как к элементу массива. Единственное, длина строки на единицу больше кол-ва символов из-за символа "конец строки".
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Доброго времени суток!
Продолжаю биться с UART.
В общем задачу себе поставил передать данные в МК скажем такого вида 0A 0B 0C , и их же получить обратно.
Возвращается почему то следующее : 00 0А 0В 00
где косяк - так и не нашел. Уже второй час бьюсь. может что пропустил? можете глянуть свежим взглядом?
вот кусок кода
#include "D:\progects\test\macros\Includes.h"
/********** привел только объявление переменных. настройка УАПП взята из примера в IDE***********/
int UART_Buffer[3];
unsigned char TX_Ready =1;
static char Byte;
char i=0,temp;
bit stop=0,TxEn=0,RxEn=0;
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
void main (void)
{
PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer
// enable)
PORT_Init(); // Initialize Port I/O
SYSCLK_Init (); // Initialize Oscillator
UART0_Init();
P2=0x00;
EA = 0; // iauaa ?ac?aoaiea i?a?uaaiee
MCE0 = 0;
RI0=0;
TI0=0;
while (1)
{
RxEn=1;
while(stop!=1) // пока не передана посылка - остаемся в цикле
{
while(RxEn==1) // разрешаем обработку приема
{
REN0=1; // разрешаем прием по UART
if(RI0==1) // как только пришел стоп-бит то...
{
UART_Buffer[i]=SBUF0; // помещаем первый принятый байт в ячейку 0 массива
i++; // переходим к следующей ячейке
RI0=0; // сбрасываем флаг для прием сделующего байта
if (i==3) // если приняли 3 байта (заполненны 0...3 ячейки) то...
{
REN0=0; // запрещаем чтение по УАПП
RxEn=0; // запрещаем обработку предыдущего оператора while
TxEn=1; // разрешаем обработку оператора while, отвечающего за передачу MCU->CPU
i=0; // сбрасываем номер ячейки массива данных УАППа
}
RI0=0; // обнуляем флаг
}
while (TxEn==1) // обрабатываем передачу данных MCU->CPU
{
SBUF0=UART_Buffer[i]; // помещаем первый байт из ячекий 0 массива принятых данных
if(TI0==1) // при окончании передачи...
{
i++; // перемещаемся значение переменной на следующию ячейку массива
TI0=0; // сбрасываем флаг для следующей передачи
if (i==3) // если переданны все байты (из ячеек 0...3 массива) то....
{
i=0; // обнуляемся
stop=1; // выходим из цикла
TxEn=0; // запрещаем обработку передачи (можно и без него)
}
}
}
}
}
}
}
В общем я хотел реализовать простой алгоритм. Отправляем четыре байта через терминал в контроллер, и принимаем от него те же 4 байта.
но почему то идет повтор первых двух байтов при передачи MCU->PC.
Последний раз редактировалось Chip115 Вт мар 29, 2011 17:29:34, всего редактировалось 3 раза.