Привет всем, я не имею опыта в программирование контроллеров, но хочу научиться. Имеется железка pic18f2520, собранный программатор ExtraPIC, MPLAB IDE v7.50 Вопрос заключается в синтаксисе написания программы на ассемблере, потому как в большинство книг и документации приводит устаревшие примеры программ, с иным синтаксисом который вызывает ошибку при компиляции. Если кто ни будь программировал для pic18 или есть простейшие программы на ассемблере, поделитесь пожалуйста, заранее благодарю
На самом деле АСМ очень простой язык. И никаких примеров не нужно (разве что голой "шапки"). Достаточно открыть даташит и ознакомиться с командами. Так же нужно выучить этот МК, что он из себя представляет, что умеет, какая периферия и как ей управлять. Если Вы во всё это дело "вкурите", то будете писать уже программы самостоятельно, без всякого чужого кода. А примеры на АСМе есть в папке examle в установленной директории МПЛАБа.
LIST P=PIC16F84A ; это как видно программа для другого контроллера но в этой строчке жалуется что ее не должно быть а вместо этой строчки вставляется такая #INCLUDE <P18F2520.INC>
__CONFIG H3FF1 ; тут жалуется что директива конфиг устарела, и я опрделил что это директива должна выглядеть вот так CONFIG OSC = XT CONFIG CP0 = OFF CONFIG CP1 = OFF
STATUS EQU H0003 PORTB EQU H0006 ; тут говорит что нельзя использовать такие имена для операндов, что они зарезервированы под регистры и описаны вот в это файле P18F2520.INC, в котором уже присвоены все необходимые адреса TRISB EQU H0006 Reg_1 EQU H000C Reg_2 EQU H000D Reg_3 EQU H000E
org 0 ; начало программы ; подготовительные моменты bsf STATUS,5 ; переход в Банк 1 ; тут происходит выбор какого то банка, тут ошибки нет, но вся проблема в том что в этом регистре для pic18 5 бит вообще отсутствует, и как на нем выбрать банк я не знаю clrf TRISB bcf STATUS,5 ; переход назад в Банк 0 ; установка сигналов на порту В m1 movlw b11111111 ; запись в аккумулятор; тут говорит что так нельзя присваивать значения только вот так 0xff movwf PORTB ; перенос из аккумулятора в порт call Pause ; переход на метку (с возвратом) clrf PORTB ; "очистка" порта call Pause ; переход на метку (с возвратом) goto m1 ; переход на метку (зацикливание)
;delay = 500000 machine cycles ;этот код вообще не разумен, кроме того имеет ошибку и входит в бесконечный цикл Pause movlw .85 movwf Reg_1 movlw .138 movwf Reg_2 movlw .3 movwf Reg_3 wr decfsz Reg_1, F goto wr decfsz Reg_2, F goto wr decfsz Reg_3, F goto wr
return
end ; конец программы
Я все же добился что б программа откампелировалась, но после загрузки, контроллер все равно не работает. Мне не нужно что б заработала именно это программа. Мне нужно что б в контроллере установился высокий уровень хотя б на одном порту, дальше я думаю разберусь.
Жесть . Компилить код под говно мамонта из Midle range на 18е. У них и ассемблер то совершенно разный . Вы ссылки мои смотрели? Или снова- моя не понимай , там инглиш...
За ссылки Большое спасибо, жаль на английском, но думаю разберусь. Программу выложил потому что otest просил в сообщении выше. И честно сказать не могу понять почему нет, мануала под этот контроллера на русском языке, а только под 16 пики
Не лучшее из описаний, но почитать можно... Каждый МК хорош в своей области, главное понять - где явная реклама и фанатики, а где истинная суть и беспристрастный анализ.
BOB51 писал(а):Не лучшее из описаний, но почитать можно...
Обычный перевод даташита с небольшой адаптацией. Что касается применимости контроллеров, то под задачу выбирают ресурсы. А тип и производитель не имеют никакого значения. Учитывая квалификацию ТС, выбор достаточно типовой и беспроблемный. Если хватит сил обуздать жабу и купить PICkit2(3), а контроллер такой же, но дешевле (PIC18F25K20), то он получит удовольствие от возможности отладки, чего в иных конфигурациях он будет лишен... Резиновая Зина Протеус дает отдаленное представление о работе железа...