Harbinger 10 16 сентября, 2012 Опубликовано 16 сентября, 2012 · Жалоба Ой. Беглым взглядом и не вникая в подробности... anl PCA0MD, #0BFh mov PCA0MD, #000h Первая команда не имеет смысла. В PCA0MD запишется ноль и без неё. Нужен ли там именно ноль - лень смотреть, по идее, в PCA0MD вотчдог отключается обычно. TIMER0_INT: CLR TR0 CLR EA JB LED,CLEAR SETB LED SETB EA SETB TR0 RETI Всё бы оно хорошо, если бы не JB LED,CLEAR, откуда RETI нет. И, по ходу, после этого все прерывания запрещены и ничего мигать и не должно. А чем, собственно, CPL LED в обработчике прерывания не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 16 сентября, 2012 Опубликовано 16 сентября, 2012 · Жалоба Спасибо, что ответили, Harbinger! Да вы правы "Первая команда не имеет смысла" просто Configuration Wizard постарался и вставил для отключения сторожевого таймера сразу две команды. По поводу "cpl LED" обязательно попробую. А пока такой вопрос: Как я понял, я в метке CLEAR забыл записать команду RETI? То есть метка CLEAR тоже должна являться частью подпрограммы обработки прерываний? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 16 сентября, 2012 Опубликовано 16 сентября, 2012 · Жалоба Как я понял, я в метке CLEAR забыл записать команду RETI? То есть метка CLEAR тоже должна являться частью подпрограммы обработки прерываний? выход из прерывания всегда оканчивается командой RETI. Если Вы этого не сделали считайте что вечно находитесь в прерывании Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 16 сентября, 2012 Опубликовано 16 сентября, 2012 · Жалоба Этот вариант программы работает в Debuggere, завтра проверю его и в железе: $NOMOD51 $INCLUDE(C8051F320.INC) LED EQU P2.4 ORG 0 LJMP INIT ORG 0BH LJMP TIMER0_INT ORG 100H INIT: anl PCA0MD, #0BFh mov PCA0MD, #000h mov TMOD, #001h mov CKCON, #002h mov P2MDOUT, #010h mov XBR1, #040h mov IE, #082h LJMP MAIN MAIN: CLR TR0 CLR LED SETB TR0 SJMP $ TIMER0_INT: CLR TR0 CLR EA CPL LED SETB EA SETB TR0 RETI END А этот вариант (с исправлениями по поводу RETI) в Debuggere не работает: $NOMOD51 $INCLUDE(C8051F320.INC) LED EQU P2.4 ORG 0 LJMP INIT ORG 0BH LJMP TIMER0_INT ORG 100H INIT: anl PCA0MD, #0BFh mov PCA0MD, #000h mov TMOD, #001h mov CKCON, #002h mov P2MDOUT, #010h mov XBR1, #040h mov IE, #082h LJMP MAIN CLEAR: CLR LED SETB EA SETB TR0 RETI MAIN: CLR TR0 CLR LED SETB TR0 SJMP $ TIMER0_INT: CLR TR0 CLR EA JB LED,CLEAR SETB LED SETB EA SETB TR0 RETI END Помогите, не могу понять теперь, где ошибка( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба Скорее всего "ошибка" в дебагере. Я уже где-то на форуме писал об особнностях опроса выходных линий. Когда "тупо" инвертируете выход все работает. Когда пытаетесь проверить выходной сигнал и изменить его - нет. Какой из регистров (отладочных разумеется) смотрите при контроле "работает-нет"?? P2 или PIN?? P2 - содержимое регистра. Pin - состояние выхода. Команды типа JB LED,CLEAR считывают состояние ВЫВОДА, а не регистра. А отладчик состояние вывода устанавливает по схеме PIN &= PORT; Если в порт записали 0, на выводе будет 0, если в порт записали 1, на выводе 1 не появится, надо ставить галку ручками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба Аа... вот в чём дело.. Я вручную попробовал галку ставить и заработало. Да кстати сегодня залил в железо первый вариант программы, всё замигало спасибо всем за помощь !!! :a14: Теперь буду думать как сделать генератор синусоидального напряжения на основе ШИМ (напряжение на выводе порта должно меняться по синусоидальному закону)...у кого какие мысли будут по этой задаче? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба Теперь буду думать как сделать генератор синусоидального напряжения на основе ШИМ (напряжение на выводе порта должно меняться по синусоидальному закону)...у кого какие мысли будут по этой задаче? Надо именно на ассемблере делать? Какая частота ШИМ? Битность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 17 сентября, 2012 Опубликовано 17 сентября, 2012 · Жалоба Надо именно на ассемблере делать? Да хотелось бы на ассемблере, чтобы освоить его лучше... Какая частота ШИМ? Битность? Ну я в данный момент изучаю документацию на С8051F320 и вижу, что: То есть либо 8 разрядов, либо 16? (Битность?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба То есть либо 8 разрядов, либо 16? (Битность?) Хм...не знал, что у контроллеров тоже бывает ПМС :rolleyes: :) Если есть аппаратный ШИМ то конечно надо его использовать. Строете таблицу синуса на 1 период, переменную, которая будет пробегать по ней циклически и дальше кидаете значения из таблицы в ШИМ. По второму таймеру например. Изменением частоты работы второго таймера меняете частоту синуса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба :) А какой из режимов лучше использовать: 8 битный или 16 битный? Значения из таблицы синуса кидать в регистры захвата/сравнения? (PCA0CPLn или PCA0CPHn) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба :) А какой из режимов лучше использовать: 8 битный или 16 битный? Значения из таблицы синуса кидать в регистры захвата/сравнения? (PCA0CPLn или PCA0CPHn) Что значит лучше/хуже? Какой холодильник лучше -который морозит на -8*С или на -16? Если Вам 8 битного ШИМа мало, значит использовать 16битный режим. Но при этом частота ШИМа будет соответственно ниже. PCA0CPn - для 16битного режима ессно используются два регистра -старший и младший. PS. Кстати в примерах есть оба варианта -на 8 и на 16 бит ШИМ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 19 сентября, 2012 Опубликовано 19 сентября, 2012 (изменено) · Жалоба Да хотелось бы на ассемблере, чтобы освоить его лучше... Посмотрите в сторону Форт (Forth) использования при освоении этого и других контроллеров. Для "прошупывания" железа самое то. (что доктор прописал) Для 8051 много разных вариантов Форт систем и были для Sylabs адаптации. При трудностях начального уровня, обращайтесь помогу. P.S. Для затравки можете посмотреть как Форт, например, используется при освоении "железа" в варианте для AVR http://electronix.ru/redirect.php?http://r...pic4406-60.html Изменено 19 сентября, 2012 пользователем Kopa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 20 сентября, 2012 Опубликовано 20 сентября, 2012 · Жалоба Посмотрите в сторону Форт (Forth) использования при освоении этого и других контроллеров. Для "прошупывания" железа самое то. (что доктор прописал) Для 8051 много разных вариантов Форт систем и были для Sylabs адаптации. Кстати, а никому не попадался бейсик для Silabs? PS. 320 очень простой контроллер (после 121 например это очень хорошо ощущаешь, а уж после ARMa с ним просто отдыхаешь ), так что его даже начинающий легко освоит. И в Кейле вся периферия "прощупывается" на ура. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SubWay 0 20 сентября, 2012 Опубликовано 20 сентября, 2012 · Жалоба PS. Кстати в примерах есть оба варианта -на 8 и на 16 бит ШИМ Сейчас посмотрю. Что значит лучше/хуже? Какой холодильник лучше -который морозит на -8*С или на -16? Если Вам 8 битного ШИМа мало, значит использовать 16битный режим. Но при этом частота ШИМа будет соответственно ниже. PCA0CPn - для 16битного режима ессно используются два регистра -старший и младший. Можете обьяснить почему частота ШИМа будет соответственно ниже? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 20 сентября, 2012 Опубликовано 20 сентября, 2012 · Жалоба Можете обьяснить почему частота ШИМа будет соответственно ниже? 8-ми битный ШИМ может дать частоту Fclk/256, 16-битный Fclk/65536. Fclk - частота тактирования матрицы. Почувствуйте разницу. Кроме того Если делать табличное значение, то каждая выборка для 8-битного ШИМА имеет размер 1 байт, а для 16-битного 2 байта. Память в МК не резиновая, это тоже надо учитывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться