Свежие обсуждения
Микроконтроллеры

TEX учится

1 6 7

А при P0 АСС обнулялся ?
Если отыграть обратно заработает нормально ?

 

Не работает. Просто не работает. Не работают даже самые простейшие программки из 4-х строчек, если в них используется ACC.
Забросил пока это дело в долгий ящик, может отлежится и пройдет.
Из всех нормально заработал МК STC11F16XE, им и буду пользоваться.

 

дааааа очень страная история...темная... ждем таки продолжения -фикса косяка!

 

Продолжения наверное не будет. Буду брать китайские контроллеры серии STC11. Они хоть работают.

 

Может быть всё таки в церковь сходить ?
Я бы понял, если один экземпляр МК глючил. Ну там кристалл с дефектом - чем чёрт не шутит.
Но глюк в нескольких МК, и даже разных производителей - не верю.
Во сяком случае никогда такого не наблюдал.
А в своё время много проектов на семействе i8051 сделал. И в серию запускал.
Как ни странно, АСС всегда работал так, как в книжке написано.

 

Я просто не понимаю что происходит.
А, еще AT89C51RC заработал, он паянный, выпаян из какого-то контроллера приточно-вытяжной вентиляции.
Им проверил свои параллельные программаторы, они, кстати, работают.
Может статикой их все побил, я ж не церемонюсь с заземлениями.

 

TEX: Я просто не понимаю что происходит

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

Из мейна программа плавно переходит в тело подпрограммы прерывания. Ну это бы ладно, но вы стек
не настроили (по умолчанию он устанавливается на 0х07, а это адрес регистра R7). Затем вы выполняете
две инструкции РОР, содержимое аккумулятора пишется в R7-R6. После этого вы пишете в R7-R6 константу
timer_reload и затем прыгаете по этому содержимому с помощью инструкции RETI. Но timer_reload НЕ
является адресом вашей программы, вы прыгаете непонятно куда. Если там куда вы прыгнули ничего
не прошито, т.е. торчат 0хFF, то выполняется инструкция MOV R7,#0хFF до тех пор пока программа не
придёт к адресу 0х0000. Всё опять повторится сначала. Как-то так.

Добавлю. Ко всем прочим чудесам вы еще время от времени меняете содержимое регистра R7.

 

То GM
Если можете/хотите (можете меня очистить/исцелить, шутка а ля Спаситель) порекомендуйте действия по выяснению причины нестопроцентной работгспособности программы для PICa, которая инкрементирует ячейку ОЗУ и проверяет её на заданное число. Программа работает правильно в 90-95 процентах запуска. Глазами это видно, что электрод врезается в деталь бесконечно, а не на заданную глубину.Саму программу быстро показать не могу.

 

T

GM: программа ваша плохо написана

Она нормально работает 1) в эмуляторе, 2 ) в протеусе 3) до этих непоняток - на любых контроллерах что есть.
timer_reload - как раз адрес, я выкидываю из стека исходный адрес возврата, и кладу туда нужный мне адрес. Это из литературы, это я не сам придумал. Просто не знаю как по другому поменять адрес возврата.

 

А какого черта у Вас закоментирована команда бесконечного цикла ?
Ведь так вхождение в подпрограмму прерывания от таймера происходит вне зависимости от самого таймера.
При каждом возникновении настоящего прерывания указатель стека продвинется на два адресса вверх и через некоторое время выйдет за пределы ОЗУ.
Тогда естественно Ваши POP и PUSH потеряют смысл и на timer_reload уже никогда не попадёте.