|
мплаб и пик |
|
|
|
Jul 18 2008, 13:48
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Столкнулся с весьма забавным явлением. фрагмент программы MOVF PCL,W,ACCESS ;загрузка pclatu,pclath MOVLW 2 ADDWF PCL,F,ACCESS RETLW 0x3f ;0 RETLW 0x06 ;1 RETLW 0x5b ;2 RETLW 0x4f ;3 И ТОЖЕ САМОЕ но MOVF PCL,F,ACCESS в мплабе оба варианта прекрасно работают,но на реальном железе PIC18F452 вариант с буквой F не работает
|
|
|
|
|
Jul 21 2008, 06:08
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 23-10-05
Пользователь №: 10 016

|
Ничего забавного в этом явлении нет, такой вычисляемый goto работает только в пределах страницы, если переход может попадать на несколько страниц, нужно корректировать pclath.
|
|
|
|
|
Jul 21 2008, 11:01
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 18 2008, 12:48)  MOVF PCL,W,ACCESS ;загрузка pclatu,pclath MOVLW 2 И ТОЖЕ САМОЕ но MOVF PCL,F,ACCESS Первая строчка вашего фрагмента не имеет смысла в обоих случаях, поскольку в первом варианте вы переписываете содержимое PCL в рабочий регистр, а затем второй строкой затираете это содержимое, а во втором варианте первая строчка просто-напросто эквивалентна команде перехода на следующую строчку. С учётом сказанного, проверил фрагмент в железе, всё работает.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 21 2008, 12:33
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 21 2008, 14:01)  Первая строчка вашего фрагмента не имеет смысла в обоих случаях, поскольку в первом варианте вы переписываете содержимое PCL в рабочий регистр, а затем второй строкой затираете это содержимое, а во втором варианте первая строчка просто-напросто эквивалентна команде перехода на следующую строчку.
С учётом сказанного, проверил фрагмент в железе, всё работает. Не правда фрагмент не работает. Насчет смысла -его нет. Это тестовая программа и для избежания лишних вопросов WREG загружается константой. Содержимое PCL в рабочий регистр -это побочный продукт при загрузке регистров PCLATU и PCLATH MOVF PCL,W,ACCESS и MOVF PCL,F,ACCESS обе команды нужны только для загрузки вышеупомянутых регистров.И как вы это проверили?Вы получили в рег W число 06? В мплабе оба варианта одинаковы. В W загружается 06.На железе не грузится ничего но программа продолжает выполняться без сбоев и как положено. Цитата(vanner @ Jul 21 2008, 09:08)  Ничего забавного в этом явлении нет, такой вычисляемый goto работает только в пределах страницы, если переход может попадать на несколько страниц, нужно корректировать pclath. Все делалось корректно.
|
|
|
|
|
Jul 21 2008, 13:27
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Ещё раз, фрагмент работает, а первая строчка вашего фрагмента не имеет смысла. Цитата(Евгений Германович @ Jul 21 2008, 11:33)  Содержимое PCL в рабочий регистр -это побочный продукт при загрузке регистров PCLATU и PCLATH MOVF PCL,W,ACCESS и MOVF PCL,F,ACCESS обе команды нужны только для загрузки вышеупомянутых регистров Неправильно, читайте дейташит. Там написано, что "содержимое PCLATU и PCLATH переписывается в программный счётчик любой командой, которая записывает данные в регистр PCL" (с.48, pic18f45k20). Но сначала нужно ЗАПИСАТЬ в регистры PCLATU и PCLATH соответствующие ДАННЫЕ. Ваша команда MOVF PCL,W,ACCESS вообще ничего не переписывает в программный счётчик, вторая переписывает, но следующий адрес, это эквивалентно переходу на следующую строчку, если конечно содержимое PCLATU и PCLATH установлено правильно. Цитата(Евгений Германович @ Jul 21 2008, 11:33)  И как вы это проверили?Вы получили в рег W число 06? Да, получил, в обоих вариантах. Прошёл по шагам в железе и посмотрел, что загружается в W и что в PCLATU, PCLATH и PCL на каждом шаге.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 21 2008, 14:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 21 2008, 16:27)  Ещё раз, фрагмент работает, а первая строчка вашего фрагмента не имеет смысла. Неправильно, читайте дейташит. Там написано, что "содержимое PCLATU и PCLATH переписывается в программный счётчик любой командой, которая записывает данные в регистр PCL" (с.48, pic18f45k20). Но сначала нужно ЗАПИСАТЬ в регистры PCLATU и PCLATH соответствующие ДАННЫЕ. Ваша команда MOVF PCL,W,ACCESS вообще ничего не переписывает в программный счётчик, вторая переписывает, но следующий адрес, это эквивалентно переходу на следующую строчку, если конечно содержимое PCLATU и PCLATH установлено правильно. Да, получил, в обоих вариантах. Прошёл по шагам в железе и посмотрел, что загружается в W и что в PCLATU, PCLATH и PCL на каждом шаге. Вы не правы прочтите п 4.4 описания(не могу скопировать) То что загружается я не сомневаюсь,дождитесь результата выполнения RETLW
|
|
|
|
|
Jul 21 2008, 14:27
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Проверил все варианты: 0, 2, 4 и 6, полёт нормальный, возвращается то, что ожидается. Конечно, я жду выхода по RETLW. По-другому посмотреть, что возвращается, никак нельзя.
Что за п.4.4? Укажите документ полностью. В чём я неправ?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 21 2008, 15:10
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 21 2008, 17:27)  Проверил все варианты: 0, 2, 4 и 6, полёт нормальный, возвращается то, что ожидается. Конечно, я жду выхода по RETLW. По-другому посмотреть, что возвращается, никак нельзя.
Что за п.4.4? Укажите документ полностью. В чём я неправ? Давайте перенесём диспут  на завтра.Кстати а вы какое железо используете?
|
|
|
|
|
Jul 22 2008, 14:55
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Прошу пардону, я был неправ, на моём проце всё именно так, как вы говорите. По чтению регистра PCL, содержимое PCH копируется в PCLATH, а содержимое PCU - в PCLATU. И наоборот, при записи в регистр PCL, содержимое PCLATH копируется в PCH, а содержимое PCLATU - в PCU. Про последний вариант я знал, а про первый - нет
Но в железе оба фрагмента железно работают.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 22 2008, 15:50
|

Профессионал
    
Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654

|
Цитата(=GM= @ Jul 22 2008, 17:55)  Прошу пардону, я был неправ, на моём проце всё именно так, как вы говорите. По чтению регистра PCL, содержимое PCH копируется в PCLATH, а содержимое PCU - в PCLATU. И наоборот, при записи в регистр PCL, содержимое PCLATH копируется в PCH, а содержимое PCLATU - в PCU. Про последний вариант я знал, а про первый - нет
Но в железе оба фрагмента железно работают. А у меня железно нет  И на поиски этого нет я потратил много времени.Может отличие в железе?
|
|
|
|
|
Jul 23 2008, 15:17
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Евгений Германович @ Jul 23 2008, 11:41)  Вынужден не согласиться, если будет время всё завтра проверю и вышлю. Однако напутать с вызовом программы, я считаю, нереально  Проверял на таком коде Код org 0x0100 test call german bra test german movlw HIGH table movwf PCLATH ;msb of table movf PCL,f,ACCESS;table address movlw 2 addwf PCL,f,ACCESS table retlw 0x3f retlw 0x06 retlw 0x5b retlw 0x4f
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|