Перейти к содержанию
    

Ой. Беглым взглядом и не вникая в подробности...

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 в обработчике прерывания не устраивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, что ответили, Harbinger! Да вы правы "Первая команда не имеет смысла" просто Configuration Wizard постарался и вставил для отключения сторожевого таймера сразу две команды. По поводу "cpl LED" обязательно попробую. А пока такой вопрос: Как я понял, я в метке CLEAR забыл записать команду RETI? То есть метка CLEAR тоже должна являться частью подпрограммы обработки прерываний?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я понял, я в метке CLEAR забыл записать команду RETI? То есть метка CLEAR тоже должна являться частью подпрограммы обработки прерываний?

выход из прерывания всегда оканчивается командой 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

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

 

Помогите, не могу понять теперь, где ошибка(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего "ошибка" в дебагере.

Я уже где-то на форуме писал об особнностях опроса выходных линий.

Когда "тупо" инвертируете выход все работает. Когда пытаетесь проверить выходной сигнал и изменить его - нет.

Какой из регистров (отладочных разумеется) смотрите при контроле "работает-нет"?? P2 или PIN??

P2 - содержимое регистра. Pin - состояние выхода. Команды типа JB LED,CLEAR считывают состояние ВЫВОДА, а не регистра.

А отладчик состояние вывода устанавливает по схеме PIN &= PORT;

Если в порт записали 0, на выводе будет 0, если в порт записали 1, на выводе 1 не появится, надо ставить галку ручками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аа... вот в чём дело.. Я вручную попробовал галку ставить и заработало. Да кстати сегодня залил в железо первый вариант программы, всё замигало спасибо всем за помощь !!! :a14: Теперь буду думать как сделать генератор синусоидального напряжения на основе ШИМ (напряжение на выводе порта должно меняться по синусоидальному закону)...у кого какие мысли будут по этой задаче?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь буду думать как сделать генератор синусоидального напряжения на основе ШИМ (напряжение на выводе порта должно меняться по синусоидальному закону)...у кого какие мысли будут по этой задаче?

Надо именно на ассемблере делать?

Какая частота ШИМ? Битность?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо именно на ассемблере делать?

 

Да хотелось бы на ассемблере, чтобы освоить его лучше...

 

Какая частота ШИМ? Битность?

 

Ну я в данный момент изучаю документацию на С8051F320 и вижу, что:

 

То есть либо 8 разрядов, либо 16? (Битность?)

 

 

 

 

post-73554-1347899853_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть либо 8 разрядов, либо 16? (Битность?)

Хм...не знал, что у контроллеров тоже бывает ПМС :rolleyes: :)

Если есть аппаратный ШИМ то конечно надо его использовать. Строете таблицу синуса на 1 период, переменную, которая будет пробегать по ней циклически и дальше кидаете значения из таблицы в ШИМ. По второму таймеру например. Изменением частоты работы второго таймера меняете частоту синуса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:) А какой из режимов лучше использовать: 8 битный или 16 битный? Значения из таблицы синуса кидать в регистры захвата/сравнения? (PCA0CPLn или PCA0CPHn)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:) А какой из режимов лучше использовать: 8 битный или 16 битный? Значения из таблицы синуса кидать в регистры захвата/сравнения? (PCA0CPLn или PCA0CPHn)

Что значит лучше/хуже? Какой холодильник лучше -который морозит на -8*С или на -16? Если Вам 8 битного ШИМа мало, значит использовать 16битный режим. Но при этом частота ШИМа будет соответственно ниже. PCA0CPn - для 16битного режима ессно используются два регистра -старший и младший.

 

PS. Кстати в примерах есть оба варианта -на 8 и на 16 бит ШИМ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да хотелось бы на ассемблере, чтобы освоить его лучше...

 

Посмотрите в сторону Форт (Forth) использования при освоении этого и других контроллеров.

Для "прошупывания" железа самое то. (что доктор прописал)

Для 8051 много разных вариантов Форт систем и были для Sylabs адаптации.

При трудностях начального уровня, обращайтесь помогу.

 

P.S. Для затравки можете посмотреть как Форт, например, используется при освоении "железа" в варианте для AVR http://electronix.ru/redirect.php?http://r...pic4406-60.html

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в сторону Форт (Forth) использования при освоении этого и других контроллеров.

Для "прошупывания" железа самое то. (что доктор прописал)

Для 8051 много разных вариантов Форт систем и были для Sylabs адаптации.

 

Кстати, а никому не попадался бейсик для Silabs?

 

 

PS. 320 очень простой контроллер (после 121 например это очень хорошо ощущаешь, а уж после ARMa с ним просто отдыхаешь :biggrin: ), так что его даже начинающий легко освоит. И в Кейле вся периферия "прощупывается" на ура.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PS. Кстати в примерах есть оба варианта -на 8 и на 16 бит ШИМ

 

Сейчас посмотрю.

 

Что значит лучше/хуже? Какой холодильник лучше -который морозит на -8*С или на -16? Если Вам 8 битного ШИМа мало, значит использовать 16битный режим. Но при этом частота ШИМа будет соответственно ниже. PCA0CPn - для 16битного режима ессно используются два регистра -старший и младший.

 

Можете обьяснить почему частота ШИМа будет соответственно ниже?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете обьяснить почему частота ШИМа будет соответственно ниже?

8-ми битный ШИМ может дать частоту Fclk/256, 16-битный Fclk/65536.

Fclk - частота тактирования матрицы. Почувствуйте разницу.

Кроме того Если делать табличное значение, то каждая выборка для 8-битного ШИМА имеет размер 1 байт, а для 16-битного 2 байта.

Память в МК не резиновая, это тоже надо учитывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...