Программирование pic16f628a на ассемблере для начинающих: В. Тимофеев MPASM. Как правильно оформлять программы на ассемблере для PIC-контроллеров. (пособие для начинающих)

Содержание

РадиоКот :: Начинающим программистам микроконтроллеров PIC

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Несколько слов о PIC-контроллерах >

Начинающим программистам микроконтроллеров PIC

Автор: Владимир Д.
[email protected]

Исходя из собственного опыта начала изучения программирования микроконтроллеров постараюсь дать несколько практических советов по составлению программ на ассемблере. Все, приведенные ниже, примеры программирования даны применительно к Pic контроллерам среднего семейства Microchip,как наиболее приемлемых для начала освоения, ввиду относи- тельно простой их архитектуры и несложной системы команд ассемблера.

Предлагаемые программы вполне можно применять в виде готовых макросов (законченных подпрограмм).Они не привязаны к конкретному контроллеру, поэтому при применении следует учитывать данные из datasheet -ов.

Примем тактовую частоту — Fтакт.

= 4,096 МГц (стандартный кварц). Тогда время цикла составит t c = 1 / Fтакт. * 4 = 0,97656 мкс



INI_TMR				; инициализация  режима прерываний от  RTCC
		bsf STATUS,RP0	; выбираем  банк 1
		movlw b"00000100"
		movwf OPTION		; предделитель  для  RTCC   1 :  32
		bcf STATUS,RP0	;  банк 0
		movlw b"10100000"
		movwf INTCON		;  разрешено прерывание от RTCC
		movlw .96		;  загружаем  в  RTCC  предварительное число 96
		movwf TMR0

Получим время прерываний:
t i = t c * 32 * (256 — 96 = 160)

t i = 0,97656 * 32 * 160 = 5 000 мкс = 5 мс

Теперь, если в Вашу любую программу ввести бесконечный цикл (так называемый цикл ожи- дания прерывания), и окончание программы переводить на этот цикл, получим временную привязку к 5 мс.И после прерывания программа вернётся по адресу, указанном вектором прерываний (чаще это 04h). Для чего это можно использовать — смотри дальше.

Итак:



;
		org   0
		START		; начало выполнения программы после
;					включения питания
		org   04h		; а это адрес вектора прерывания, по которому
		main		; будет выполняться  основная  программа
;
START				; здесь обычно происходит обязательная  ини-
		INI_TMR		; циализация  портов, режимов, регистров и т.п.
		INI_PORTS
loop
		goto loop		; а это и есть  бесконечный цикл
;--------------------------------------------------

main
;               далее  идёт  тело  основной программы,
;		в которой обязательно надо создать программу обслуживания  прерываний от RTCC,
;            вызываемой   командой  CALL:

ServTMR
		btfsc INTCON,RTIF	;  проверяем  флаг срабатывания прерываний от RTCC  и
		call SET_TMR		;  если "да",то снова инициализируем  TMR0
		return		;  если "нет" -  возврат  в  место вызова  ServTMR в
					;  основной  программе main
;
SET_TMR		movlw .
96 movwf TMR0 ; снова загружаем число 96 bcf INTCON,RTIF ; сбрасываем флаг срабатывания retfie ; возврат с разрешением прерываний в ServTMR, а ; затем в основную программу main

Пример использования прерывания от RTCC для получения секундного импульса на одном из выходов , скажем, порта В — RB0 : Используем регистр Rsec, который должен быть ранее объявлен в в адресном поле рабочих регистров.



FORM_1S				; в каждом цикле,   а он  по прерыванию RTCC  длится
		incf Rsec,w		; 5 Мс,  увеличиваем регистр Rsec на 1 до  числа 200
		xorlw .200		; (5 мс * 200 = 1 сек)
		btfsc STATUS,z
		goto OUT_PORT		; при Rsec = 200  флаг  z = "1" и  переход на управление
					; выводом RB0 порта В
		return		; возврат в основную программу  main
;
OUT_PORT		btfss PORTB,0			; проверяем состояние вывода RB0
		goto OUT_ON		; если RB0 ="0", то  устанавливаем  в "1"
		bcf PORTB,0		; в противном случае - устанавливаем в "0"
		goto main		; возврат в основную программу
;
OUT_ON		bsf PORTB,0		; устанавливаем RB0 = "1"
		goto main

Таким образом на выходе RB0 порта В каждую секунду уровень сигнала будет изменяться то «0» то «1».

В регистрах контроллера информация находится обычно в двоичном виде, ( в бинарном коде). Но часто необходимо получить информацию в двоично — десятичном виде (BCD — код), скажем, для управления поразрядно семисегментным индикатором.

Рассмотрим примеры преобразований двоичного кода b2 в двоично — десятичный BCD и наоборот.

В 8 — bit регистре можно записать в двоичном коде число от 0 до 255 ( от b»00000000″ до b»11111111″ ). Преобразуем двоичное число в три разряда двоично — десятичного кода - «сотни», «десятки» и «единицы». Для этого будем использовать следующие регистры, которые должны быть заранее объявлены в адресном поле рабочих регистров :

Rbin — регистр хранения числа в двоичном коде b2
Rhan — регистр «сотни» кода BCD
Rdec — регистр «десятки» кода BCD
Rsim — регистр «единицы» кода BCD

Преобразования проводим используя операции вычитания чисел 100, а затем 10 с подсчётом количества положительных вычитаний.



CON_100		movlw .100		; вычитаем  100  из  Rbin  c  проверкой, что
		subwf Rbin,w		; результат  не  отрицательный. Флаг  "c" = 1 при
		btfss STATUS,c		; результате > или =  0, и  "c" = 0  при   


Обратное преобразование BCD - кода в b2. Используем те же регистры Rhan, Rdec, Rsim где находится число в BCD - коде, регистры RbinH - старший разряд и RbinL - младший разряд для чисел ( > 255) в коде b2 и вспомогательные регистры RM1 - "множимое" , RM2- "множитель".Для преобразования BCD в b2 нужно умножить "сотни" на 100, "десятки" на 10 и сложить всё вместе с "единицами" и с учётом переноса в старший разряд при необ- ходимости.Для умножения используем операцию сложения.



B2X_100		movlw .99		; преобразование  "сотен"
		movwf RM2		; множитель  =  кол - во сложений (100) минус  один
		movf Rhan,w
		movwf RM1		; множимое  =  "сотни"
loopX100	addwf RM1,w
 		btfsc STASTUS,c		; проверяем  перенос в  старший  разряд
		incf RbinH,f		; если есть перенос
		decfsz RM2,f		; контролируем  количество  сложений
		goto loopX100
		movwf RbinL		; результат  сложения  заносим  в  регистр  мл.
разряда ; B2X_10 movlw .9 ; преобразование "десятков" movwf RM2 ; множитель = кол - во сложений (10) минус один movf Rdec,w movwf RM1 ; множимое = "десятки" loopX10 addwf RM1,w ; здесь перенос можно не проверять, т.к. результат decfsz RM2,f ; всегда

Конец преобразованиям и дальнейшее выполнение программы. В регистрах RbinL и RbinH получили 16 - bit число в коде b2.

Для выполнения арифметической операции деления по аналогии с умножением, рассмот- ренном выше, применяется операция вычитания. Допустим нам нужно произвести деление числа, находящегося в регистрах RHsum (старшие разряды) и RLsum (младшие разряды) - на делитель ( примем делитель не > 255) находящийся в регистре Rdel.

Результат будем заносить в регистры RHrez и RLrez (старшие и младшие разряды соот- ветственно) :


OP_DEL
		movf Rdel,w
		subwf Rlsum,w
		btfss STATUS,c		; проверяем  не отрицательный  ли  результат?
		goto DEF_carry		; если  "да", то  проводим  заём  из  ст.  разряда
		incf RLrez,f		; подсчитываем  кол-во  вычитаний  с  учётом
		btfsc STATUS,c		; возможного  переноса  в  старший  разряд
		incf RHrez,f
		movwf RLsum		; восстанавливаем  остаток, что бы  не  потерять
		goto OP_DEL		; при  отрицательном  результате вычитания
;
DEF_carry
		movlw 0h
		xorwf RHsum,w		; всё  ли  заняли из старшего разряда  в младший?
		btfsc STATUS,z		; если  "да", т.е.  RHdel  =  0  и  в  OP_DEL  отри-
		goto OUT_ DEL		; цат. результат - конец  делению  и  выход
		decf RHsum,f		; если  "нет" - заём  из  старшего  разряда  и  про-
		incf RLrez,f		; должаем  дальше
		btfsc STATUS,c		; проверка  необходимости  переноса  в  ст.разряд
		incf RHrez,f
		goto OP_DEL

Как вам эта статья?

Заработало ли это устройство у вас?

PIC16F628_Первые_опыты — Nik_home_site

Первые опыты с PIC16F628

Уж и не чаял я, что вновь возьмусь за паяльник, но неожиданно друзья спросили: «А можешь…?»

Когда-то мне пришлось отвлечься от любимого увлечения – радиоэлектроники, и расстался я с ней тогда на этапе знакомства с PIC-контроллерами. Успел приобрести хороший программатор-отладчик MICD2 -MC1 с сайта http://5v.ru, и в запасе у меня лежала пара контроллеров PIC16F628. Они прекрасно подходили для решения той задачи, которой меня озаботили друзья, и я решил продолжить там, где остановился – освоить PIC-и и сделать людям игрушку.

Поскольку все это богатство пылилось у меня уже не один год, начал копаться в Интернете на предмет современного состояния дел. Порадовался, что мой отладчик еще продается, и следовательно, его можно использовать с современными операционными системами. Скачал с сайта MPLABX IDE и установил у себя. Антивирус и фаервол при этом изрядно нервничали, спрашивая, точно ли я доверяю фирме Микрочип? Пришлось несколько раз поклясться, что все Ок и надо ставить ПО. Кроме среды разработки MPLABX IDE также поставил компилятор XС8, хотя программировать собирался все равно на Ассемблере. Просто среда разработки упорно не желала без компилятора запускаться, считая видимо, что без С жизни нет. Ну да ладно, хоть и привык я к Ассемблеру, но С немного понимаю, да и к тому же я точно помнил, что большинство компиляторов С позволяют вставлять код на Ассемблере.

В общем, похвастаться общением с самым современным пакетом для разработчиков программ для PIC-контроллеров я не могу. Уже при установке меня напрягло то, что в списке поддерживаемого оборудования нет моего программатора, а есть ICD3. Многие команды компилятор не распознавал, хотя я был уверен, что все правильно. Я даже попробовал установить и запустить Linux версию MPLABX IDE, но она повела себя еще хуже – даже те команды и библиотеки, которые распознавались в среде, работающей под Windows, компилятор под Linux распознавать не желал. В конце концов, я решил начать работать с тем, на чем уже успешно работает сообщество, а эксперименты оставить или на потом, или вообще предоставить их разработчикам Микрочипа.

В архиве Микрочипа скачал MPLAB 8.88 http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_IDE_8_88.zip и вот тут-то дело пошло на лад. Во-первых, сразу запустился Ассемблер, безо всяких шаманских плясок. Во-вторых, распознался программатор. В-третьих, имея за плечами несколько бессонных ночей по милости MPLABX IDE, я уже неплохо ориентировался в приложенных к нему библиотеках и знал, где можно какие куски кода выдернуть.

Итак, у нас есть работающая среда разработки, и мы хотим написать работающую программу для PIC16F628.

Запускаем среду программирования, и в закладке Project выбираем Project Wizard:

Рисунок «Начало1»

 

Запускается помощник, в первом окне нажимаем «Далее», на втором – выбираем наш прибор – PIC16F629 и жмем «Далее», на третьем – выбираем среду, в которой мы будем писать нашу программу. Это будет MPASM Assembler (mpasmwin) v.5.47:

Рисунок «Выбор Ассемблера1»

На четвертом экране указываем путь к папке с проектом и имя файла для проекта. При этом следим, чтобы в названии пути и имени файла не попадались русские символы, пробелы и т.п. – только английские, я при этом еще и стараюсь, чтобы они были покороче.

Далее предлагается добавить в проект существующие файлы. Я добавил загодя созданный с помощью текстового редактора файл viveska.asm, с вручную заданным расширением. Файл этот положил в ту же папку, в которой расположил проект. В этом файле будет нами написан текст основной программы.

Также здесь я указал MPLAB включить в проект файл pic16f628.inc, о назначении которого расскажу чуть позже. Файл этот имеется в библиотеке компилятора языка С, который я установил раньше и от использования которого отказался вместе с MPLABX. Вообще, чего не отнять у устанавливаемых пакетов, так это изрядного количества приготовленных заготовок, и в первую очередь именно заголовочных файлов.

Эти файлы нужны для того, чтобы нам с Вами не пришлось каждый раз заново набивать одни и те же куски кода. Изначально компилятор Ассемблера не знает ни названий регистров, ни названий битов, которые указаны в документации на контроллеры. Если Вы напишете ему команду:

MOVWF PORTA ; загрузка содержимого регистра W в защелку порта А,

То при компиляции система выдаст ошибку «Error[113]   …VIVESKA.ASM 25 : Symbol not previously defined (PORTA)», т.е. символ PORTA ей не знаком и мы должны его обозначить.

Файл pic16f628. inc содержит именно эти обозначения. В строчках вида:

PORTA equ 0005h

содержатся указания Ассемблеру, на какие цифровые коды заменять те выражения, которые мы будем писать в тексте программы. А для того, чтобы компилятор Ассемблера смог ими воспользоваться, в голове нашей программы мы приведем две строчки:

LIST p=pic16f628; Указание компилятору на тип выбранного контроллера

#include pic16f628.inc; Указание компилятору при компиляции текста программы использовать заголовочный файл.

В Интернете имеется уже приличное количество страничек пользователей, описывающих свои эксперименты с PIC-контроллерами, да и в самом MPLAB имеется неплохой раздел помощи, поэтому я не буду заострять внимание читателя на правилах написания кода – где пишутся команды, где метки, где комментарии – все это описано уже много раз и нет смысла повторяться.

Разберем только те нюансы, которые относятся к конкретному случаю – моей разработке.

Вот текст программы:

; программа для pic16f628

LIST p=pic16f628;

;#include pic16f6x_legacy. h;

#include pic16f628.inc;

__CONFIG 3F62h ;_CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF & _CPD_OFF 

; описание регистров

DELAY1 EQU 0x20

DELAY2 EQU 0x21

; описание констант

DEL1 equ 00ffh

DEL2 equ 00ffh

INITA EQU B’00000000′

INITB EQU B’00000110′

RP EQU 05h 

; исполняемый код

ORG     00h

NOP

        GOTO    BEGIN ;

        ORG     100h

BEGIN

;Инициализация порта А

        BCF     STATUS,RP    ;Выбор банка 0

        CLRF    PORTA    ;Очистить регистр

MOVLW   07h          ;Выключить компаратор

MOVWF   CMCON ;Каналы порта А — цифровые входы-выходы 

        MOVLW   INITA        ;Загpузить B’00000000′ в pегистp W

        BSF     STATUS,RP    ;Выбор банка 1

        MOVWF   TRISA        ;Все разряды порта А установить как выходы

;Инициализация порта В

        BCF     STATUS,RP    ;Выбор банка 0

        CLRF    PORTB     ;Очистить регистр 

        MOVLW   INITB        ;Загpузить B’00000110′ в pегистp W

        BSF     STATUS,RP    ;Выбор банка 1

        MOVWF   TRISB        ;Все разряды порта В установить как выходы 

; Инициализация регистра OPTION

        BSF     STATUS,RP    ;Выбор банка 1

        MOVLW   07h        ;Загpузить B’00000111′ в pегистp W

        MOVWF   OPTION_REG        ;Загрузить конфигурацию в регистр OPTION         

; Инициализация регистра INTCON

        BCF     STATUS,RP    ;Выбор банка 0

        MOVLW   00h          ;Загpузить B’00000000′ в pегистp W

        MOVWF   INTCON       ;Загрузить конфигурацию в регистр, запретив все виды прерываний

; Инициализация передатчика USART

MOVLW   90h ; Разрешена работа последовательного порта и

MOVWF   RCSTA ; разрешен прием

; Инициализация решистра периферийных прерываний PIE1 

        BSF     STATUS,RP    ;Выбор банка 1

        MOVLW   00h          ;Загpузить B’00110000′ в pегистp W

        MOVWF   PIE1       ;Загрузить конфигурацию в регистр, 

; Установка коэффициента деления и скорости передачи в SPBGR

        MOVLW   0ch          ;Коэффициент деления — 12

        MOVWF   SPBRG         ;

; Настройка приемника USART

        MOVLW   06h          ;Для снижения погрешности принят высокоскоростной режим

        MOVWF   TXSTA        ;

; Бегущий огонек

START1  BCF     STATUS,RP    ;Выбор банка 0

BSF RA2   ; Включение 1-го светодиода

CALL SEC_05 ; Вызов подпрограммы задержки на 0,5 сек

BCF RA2 ; Выключение 1-го светодиода

BSF RA3 ;Включение 2-го светодиода

CALL SEC_05 ; 

BCF RA3

BSF RA0

CALL SEC_05

BCF RA0

BSF RB0

CALL SEC_05

BCF RB0

BSF RB3

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

RLF PORTB

CALL SEC_05

CLRF PORTB

GOTO START1

 

SEC_05 BCF     STATUS,RP     ;Выбор банка 0

MOVLW DEL2 ;Счетчик двухкаскадный

MOVWF DELAY2 ; Второй каскад

LOOP2    MOVLW DEL1 ; 

         MOVWF DELAY1 ; Первый каскад

Loop1

         DECFSZ DELAY1

         GOTO Loop1

DECFSZ DELAY2

         GOTO LOOP2

RETURN

END

 

Из числа особенностей этого кода стоит наверно упомянуть одну – то, что после RA3 включается RA0, а не RA4. Это связано с тем, что у имевшихся в моем распоряжении экземпляров контроллеров не удавалось установить «1» на выводах RA4. Я решил, что причиной является выход их из строя, и просто перекинул на монтажной плате провод на другой вывод. В этом еще одно преимущество применения микроконтроллеров – делай я ту же схему на дискретной логике, соответствующего запаса у меня бы не было.

Набрав текст программы (или скопировав его отсюда), сохраняем проект. Дальше надо убедиться в том, что все набрано правильно – отладить программу. Открываем пункт меню debugger-Select Tool и выбираем пункт «MPLAB SIM». В окне «OUTPUT» появится одноименная вкладка (см. рис 4)

Рисунок «Выбор симулятора»

Также в правой части панели инструментов появится меню симулятора, которое на рисунке 4 я отметил звездочкой. Это меню необходимо нам для пошаговой отладки программы.

Нажимаем на кнопку «Run». При этом наша программа передается на обработку компилятору, который проверяет текст, проводит необходимые замены, о которых я упоминал выше, и готовит среду разработки к работе в режиме симуляции выбранного нами прибора. Ход этих операций отражается в окне «OUTPUT» во вкладке «BUILD». Если текст программы набран так же, как в моем примере, то кроме 3-х предупреждений и 12 сообщений, у компилятора претензий к нашей программе не появится. Да и на эти внимания обращать не стоит, поскольку внизу будет подведен краткий итог – «BUILD SUCCESSEDED». Если же будут сообщения об ошибках, а в конце появится строчка «BUILD FAILED», то надо перейти к строке, в которой найдена ошибка – ее номер будет указан в сообщении, проверить, что там не так, исправить, сохранить и еще раз нажать кнопку «RUN».

Итак, программа скомпилирована и Ассемблер считает, что ее можно зашивать в контроллер. Однако, Ассемблер проверяет только синтаксис программы, а вот то, какие данные мы пишем в тот или иной регистр, как с этими данными обращаемся, правильно ли расставили метки – это его не интересует. Следовательно, перед прошивкой желательно прогнать программу в симуляторе и посмотреть, что будет происходить в контроллере с нашей прошивкой.

Для этого приступим к пошаговой отладке. Компилятор уже готов к ней – обратите внимание на зеленую стрелку, которую он установил напротив первой команды – NOP.

Чтобы сэкономить свое время, первую часть программы – инициализацию специальных регистров, мы пройдем ускоренно, и после проверим, в каких регистрах какие значения оказались записаны. На метку START1 двойным щелчком установим точку останова, и рядом с номером строки появится красный круглый значок «В». Нажмем кнопку «RUN». Зеленая стрелка практически сразу перескочит на точку останова, и выполнение программы будет приостановлено.

Откроем два окна: во вкладке VIEW выберем последовательно «File Registers» и «Simulator Trace». По ним мы будем проверять процессы изменения содержания регистров в процессе выполнения программы. Найдем регистр Status. В нем сейчас записано значение 0х3С. Нажмем кнопку «Step Into» на меню симулятора. Симулятор выполнит команду, на которую указывает стрелка, перейдет к следующей команде и остановится. Теперь в регистре Status должно появиться значение 0х1С, что означает, что для работы выбран банк памяти «0». Продолжая щелкать по этой же кнопке, мы можем по шагам двигаться по программе и отслеживать ее выполнение. Давайте дойдем до входа в подпрограмму SEC_05. В ней организована задержка примерно на 0,26 секунды между переключениями светодиодов. При имеющемся у меня в наличии кварцевом резонаторе 2 МГц пришлось сделать подпрограмму двухкаскадной – один каскад обеспечивал лишь задержки порядка миллисекунд. Здесь выполнение крутится на одном месте очень долго, и щелкать 65536 раз скучно и долго. Поэтому щелкнув два-три раза, мы в окне File Registers найдем регистры с адресами 0х20 и 0х21, изменим их значения, вписав в столбце Decimal по единичке. Теперь после пары щелчков нас выведет из подпрограммы в основное тело программы. Таким образом мы можем проверить весь ход выполнения программы – устанавливая точки останова, прощелкивая по шагам места, которые требуют нашего пристального внимания, и перепрыгивая те куски кода, которые мы уже отладили.

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

Приведу схему макета:

Рисунок «Схема принципиальная»

Тип резисторов – С2-23-0,125-510 Ом ± 5%, конденсаторы – любые керамические 22пФ, Кварцевый резонатор 2МГц, светодиоды – АЛ307БМ. Собрана схема на куске макетной платы, контроллер установлен в кроватку. В качестве разъема использовалось гнездо телефонное 6Р6С из комплекта MCD2-MC1. Соединения от разъема к контактам микроконтроллера, предназначенные для его программирования в схеме, условно не показаны.

На приложенном видео можно составить представление о расположении элементов, и тут я могу поделиться некоторыми соображениями. Прежде всего генератор – из-за длинных выводов конденсаторов и резонатора, которые я не стал пока подрезать, понимая, что все это должно еще переноситься на основную печатную плату, наблюдались срывы генерации. Если в собранной схеме наблюдается нестабильная работа, попробуйте укоротить эти выводы.

Также необходимо учесть следующий момент. Выводы RB6 и RB7 используются для управления светодиодами и для программирования. Поэтому для программирования необходимо их временно отключить от светодиодов. На основной плате эту функцию будет выполнять специальный разъем, а пока – можно просто отпаять провода, соединяющие выводы контроллера с резисторами. Если это не сделать, можно потратить много времени, пытаясь сообразить, почему контроллер при попытке программирования ведет себя совершенно непредсказуемо. Также свободным от иных подключений на время программирования должен быть и вывод RA5.

Также ради стабильности можно поближе придвинуть разъем питания, установить электролитический конденсатор или предусмотреть питание от отдельного источника.

Предположим, что Вы спаяли схему, проверили ее на лишние связи, устранили их, и теперь готовы к программированию. Также Вы уже подключили программатор к компьютеру и правильно настроили СОМ-порт. Подключаем наше устройство.

В программе MPLAB IDE открываем наш проект.

В программе MPLAB теперь надо перейти от режима Debugger – отладчик к режиму Programmer – программатор. Для этого в меню Programmer через верхнюю строчку выбираем программатор – MPLAB ICD2. У меня опция автоподключения программатора выключена, поэтому после выбора типа программатора необходимо в том же пункте меню programmer выполнить команду Connect.

Обратим внимание на изменившуюся строку меню – в правой части кнопки команд управления отладчиком сменились на кнопки управления программатором (см. Рисунок выбор программатора1).

Рисунок Выбор программатора1

В меню, отмеченном на рисунке овалом с цифрой 1, нажмем крайнюю правую кнопку – “Reset and connect to ICD”. В окне OUTPUT на вкладке MPLAB ICD2 промелькнет несколько строк, и среди них можно прочесть, что программатор обнаружил подключенный к нему микроконтроллер PIC18F628 (цифра 2 на рисунке). Это первый признак того, что у нас налажен контакт программатора и контролера и программирование должно пройти нормально. Если такой записи нет, а выпадают сообщения типа “invalid target device id” – проверьте правильность выполненного монтажа, мультиметром — подачу питания на контроллер, наличие низкого уровня на выводе RA5, убедитесь, что не забыли отпаять светодиоды от выводов RB6 и RB7.

Дальше перед программированием желательно убедиться, что память контроллера чиста. Нажимаем кнопку «Verify target device is erased», и если программатор найдет в памяти что-то, отличное от кода 3FFF – он выдаст сообщение (красная строка на рисунке). Необходимо стереть память, для чего нажимаем на кнопку «Erase target device», дожидаемся сообщения «Erase succeeded» (цифра 3 на рисунке), опять проверяем память контроллера на чистоту – видим сообщение «Blank check passed» (цифра 4 на рисунке).

Теперь можно программировать. Нажимаем на кнопку «Program target device». Программатор запишет программу, проверит правильность записанного, и окончит работу сообщением «Programming succeded».  

Чтобы проверить, как работает готовое устройство, на панели управления программатора нажмем кнопку «Release from Reset». Если все правильно, по устройству должен обежать одинокий огонек. Что? Не работают два последних светодиода? Так ведь мы их отпаяли, временно…

Контрольный вопрос:

А почему при первом прохождении огонька по линейке некоторые светодиоды не гаснут? И только при новом руге все работает уже так, как было задумано? Я специально не стал исправлять этот огрех в программе, чтобы Вам было в чем проявить себя.

Вот видео работающего устройства:

Видео YouTube

 

В конце статьи я выкладываю ссылку на проект, чтобы сэкономить Ваше время на наборе текста программы.

В дальнейшем, имея готовое устройство и почувствовав уверенность в своих силах, можно как угодно упражняться в программировании. Присылайте Ваши тексты программ, возможно, я также выложу их после этой статьи!

 

Assembler | Электроника для всех

Вытесняющий диспетчер
Давным-давно, когда я учился в школе, мне не давал покоя вопрос. Как работают параллельные операционки? Как тот же самый Windows умудряется переключать процессы, не терять регистры (да, я тогда уже начинал учить асму), как он определяет момент переключения, почему все это работает? Виртуальная память, проверка на ошибочный код — никто ничего этого не объяснял. Все твердили про какие-то там объекты, классы, и говорили очень виртуально. А мне мясо, мясо давай!

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

Отмазки
Сея программа не более чем учебный пример. Т.к. не тестировалась в серьезных условиях. Не использовалась в каких либо проектах, а гонялась только на эмуляторе. Смысл ее не дать готовое решение, а показать принцип и механизм работы диспетчера операционной системы с принудительным переключением задач. Да и AVR это не та платформа на которой имеет смысл городить вытесняющие диспетчеры.

Немного теории
Думаю не секрет, что любая многозадачная операционка работает на прерываниях таймера. Даже на x86 архитектуре без него никуда.

При срабатывании прерывания процессор идет на обработчик, а там прописано примерно так:

  • 1) Сохранение регистров.
    • 1.1) Сохранение виртуальной памяти — в файл подкачки или еще куда-нибудь.
  • 2) Сохранение текущего адреса.
  • 3) Загрузка регистров след. процесса.
    • 3.1) Загрузка виртуальной памяти.
  • 4) Загрузка адреса возврата.
  • 5) Переход по этому адресу.

По сути — не так уж и много работы, если исключить пункты X.Y. Всего и делов — сохранить, загрузить и вернуться. Вот именно это я и реализовал — простейшее ядро операционки, БЕЗ проверок и т.д.
(далее…)

Read More »

Программирование микроконтроллеров | Расширенный список литературы

СПИСОК ЛИТЕРАТУРЫ

1. Белов, А.В. Программирование микроконтроллеров для начинающих и не только / А.В. Белов. — СПб.: Наука и техника, 2016. — 352 c.
2. Брей, Б. Применение микроконтроллеров PIC 18. Архитектура, программирование и построение интерфейсов с применением С и ассемблера / Б. Брей. — СПб.: КОРОНА-Век, 2014. — 576 c.
3. Брей, Б. Применение микроконтроллеров PIC 18. Архитектура, программирование и построение интерфейсов с применением С и ассемблера / Б. Брей. — СПб.: КОРОНА-Век, 2008. — 576 c.
4. Иванов, В.Б. Программирование микроконтроллеров для начинающих Визуальное проектирование, язык C, ассемблер / В.Б. Иванов. — СПб.: Корона-Век, 2015. — 176 c.
5. Иванов, В.Б. Программирование микроконтроллеров для начинающих: Визуальное проектирование / В.Б. Иванов. — СПб.: Корона-Век, 2010. — 176 c.
6. Иванов, В.Б. Программирование микроконтроллеров для начинающих. Визуальное проектирование, язык С, ассемблер / В.Б. Иванов. — СПб.: КОРОНА-Век, 2015. — 176 c.
7. Каспер, Э. Программирование на языке Ассемблера для микроконтроллеров семейства i8051 / Э. Каспер. — М.: ГЛТ, 2012. — 192 c.
8. Магда, Ю.С. Программирование и отладка С/С++ приложений для микроконтроллеров ARM / Ю.С. Магда. — М.: ДМК, 2014. — 168 c.
9. Магда, Ю.С. Программирование и отладка C/C++ приложений микроконтроллеров ARM / Ю.С. Магда. — М.: ДМК Пресс, 2012. — 168 c.
10. Прокопенко, В.С. Программирование микроконтроллеров ATMELна языке C / В.С. Прокопенко. — СПб.: Корона-Век, 2015. — 320 c.
11. Прокопенко, В.С. Программирование микроконтроллеров ATMEL на языке C / В.С. Прокопенко. — СПб.: Корона-Век, 2013. — 320 c.
12. Ревич, Ю.В. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера / Ю.В. Ревич. — СПб.: BHV, 2012. — 352 c.
13. Хелибайк, Ч. Программирование PIC- микроконтроллеров на PICBasic / Ч. Хелибайк. — М.: Додэка XXI, 2007. — 336 c.


Второй урок.

Простой код на ассемблере и устройство вкратце.

<< Назад к оглавлению

В данном тексте приведены ссылки на книги. «название книги»:страница обозначает указатель на определенную страницу книги. «название книги»:Гглава — главу. При этом ТО — сокращение для тех. описания контроллера (Datasheet). Например ТО:15 — 15 страница технического описания. ТО:Г3 — третья глава технического описания
 
Эта статья переработана. Существует так же старая версия с оболочкой MPLAB 8.91. Прочесть ее можно здесь.

Вот и ладушки, если вы читаете второй урок, то наверное, в первом вы смогли подготовить инструменты. Или и так без меня все умеете. Теперь небольшое отступление для начинающих. За более подробной
информацией, обращайтесь к серьезным книгам, особенно к техническому описанию контроллера.

Итак, что такое контроллер, и как он работает?
Конечно же, это просто черный жучек с ножками. За неимением никаких других членов, он общается с окружающим миром исключительно напряжением на ножках. Что в общем и демонстрировалось в программе в первом уроке. Просто с определенной переодичностью контроллер зажигал
светодиодик.
В расcматриваемых нами контроллерах память разделена. Программа записывается в отдельное пространство, именуемое памятью программы (PROGRAM MEMORY). Переменные и настройки хранятся в памяти данных (DATA MEMORY). Причем, ячейки памяти, выделенные для использования как переменные называются регистрами общего назначения (GENERAL PURPOSE REGISTERS или GPR) и настройки находятся в регистрах специального назначения (SPECIAL FUNCTIONS REGISTERS или SFR). Память данных поделена на 15 блоков и блоки меняются регистром BSR (BLOCK SELECT REGISTER).
Так же существует EEPROM memory — это флеш память, используемая для длительного хранения информации.
Подробнее о памяти контроллера смотри главу 1 ссылка.

Код программы

Для начала мы будем писать на ассемблере.
Если вы написали команду на ассемблере, то это будет ровно одна команда, записанная в контроллер.
Таким образом вы будете отлично знать, что ваш контроллер делает и как. А вот если вы пишете на C, то на каждую строчку, написанную вами могут приходиться сотни команд, выполненных контроллером. Знать-то нужно и то и другое, но ассемблер даст нам понимание того, что и как работает в контроллере.

Ладно, начнем.
Открываем MPLABX IDE жмем File->New Project. В открывшемся окне выбираем Microchip Embedded Standalone Project

 выбираем семейство контроллеров advanced 8 bit MRUs и наш контроллер, например pic18f2550
Next, Next.Теперь компилятор предлагает нам выбрать соответствующий набор для разработки. К этому моменту должно быть установлено все необходимое.
Первый урок на ассемблере, поэтому выбираем MPASM. Далее. Задаем имя и прочие свойства. Укажите кодировку с русским. Например. UTF-8. Иначе ваши комментарии на кириллице не сохранятся.

И вот проект открыт. По началу в нем есть только makefile. Это файл для сборки проекта. Поэтому щелкаем на Source files->new->empty file
Ну назовем его например main.asm
Переписываем туда программу. Вот код:

Листинг source.asm


  #include <p18f2550.inc> ;подключение заголовков
list p=18f2550 ; выбор контроллера
CONFIG FOSC=INTOSCIO_EC ; Выбран внутренний генератор
  CONFIG MCLRE = OFF ; отключаем сигнал сброса
  CONFIG WDT   = OFF ; отключаем сторожевой таймер

DELAYCOUNTER EQU 0x00  ; задаем две переменные для создания задержки (паузы)
DELAYCOUNTER1 EQU 0x01; в программе. Они по адресу 0x00 и 0x01
A EQU 0; под буквой A будем подразумевать, что используется access bank

ORG 0 ; начинаем с 0 адреса памяти программы
  GOTO main ; перейти на метку main
  ORG 28h ; теперь пишем с 28 адреса. (сделано это для работы с прерываниями)
main ;(начинается программа main- просто метка для нашего удобства)


  CLRF BSR,A;       ; — выбираем нулевой блок памяти данных
  CLRF PORTA,A       ; — обнуляем выход на порту а    ;

  CLRF WDTCON,A; выключаем сторожевой таймер
  MOVLW 0x0F       ; записываем 0x0F в аккумулятор
  MOVWF ADCON1,A    ; перебрасываем значение в ADCON1 — настраиваем порт A на цифровой вход/выход
  CLRF TRISA,A ;- настраиваем порт а — только на выход
  
endloop ; это цикл, в который будет без конца гонять наша программа
  BTG LATA,2,A; мигнуть светодиодом 
  CALL delay255; вызвать паузу
  GOTO endloop; вернуться к началу цикла

delay255 ; функция вызова паузы
  SETF DELAYCOUNTER,A; записать 0xFF в счетчик времени
  GOTO delay; перейти к delay
delay 
  SETF DELAYCOUNTER1,A; записать 0xFF во 2й счетчик времени
delaysub1 ;
  DECFSZ DELAYCOUNTER1,F,A; уменьшить 2й счетчик на 1. если >0
  GOTO delaysub1; то вернуться на шаг назад
  DECFSZ DELAYCOUNTER,F,A; иначе — уменьшить 1й счетчик, если >0
  GOTO delay; вернуться на метку delay
  RETLW 0; иначе — выйти из функции

END ;конец программы
Для контроллера pic18f2550
https://yadi.sk/d/1YkpyyJTVLg2V
Для контроллера pic18f4550
https://yadi.sk/d/FxMGleO_VLgp7 — к сожалению не могу сейчас проверить
для копиляции щелкаем Run->build main project

после компиляции у нас должен в папке проекта появиться HEX файл. Он находится в папке dist\default\production. Его можно и нужно прошить в контроллер. Это та же программа, что и в уроке 1.
На самом деле среда MPLABX умеет работать с программаторами, но у меня PICkit 2 и с ней она работает посредственно, поэтому я прошиваю HEX файл напрямую через PICKIT

Пояснения к коду программы


Начнем потихоньку разбирать что там написано

В самом верху указываем то, какой у нас будет контроллер
#include <pic18f2550. inc>
Мы их рлдключаем для того. чтобы вместо того, чтобы всегда и везде мы записывали цифрами. мы могли использовать некоторые уже привычные нам обозначения.
напирмер, без подключения заголовков. команда записи в регистр выбора блока (BSR) -строка 16 нашей программы выглядела бы так
MOVWF 0FE0;

так… Еще директива. 
list p=18f2550
Она просто говорит
компилятору, какой контроллер будем прошивать. 

Дальше уже интереснее. Нам нужно задать управляющее слово. это — настройки контроллера. 
Задает их директива CONFIG 
По поводу всех настроек контроллера обращаемся так же к техническому описанию. ТО:288


Конфигурационные биты


CONFIG FOSC=INTOSCIO_EC
Эта настройка говорит о том, что мы будем использовать внутренний генератор импульсов. Он — внутри контроллера. Читаем в ТО:25

CONFIG MCLRE = OFF
Здесь мы отключаем сигнал сброса. То есть контроллер будет включаться сразу с подачей на него питания.

CONFIG WDT = OFF
Отключаем сторожевой таймер. Просто. чтобы не «запариваться». Он служит защитой от зависания контроллера. Читаем в ТО:299

Более подробно конфигурационные биты рассмотрены во 2-й главе к этому уроку. ссылка

Тело программы


DELAYCOUNTER EQU 0x00
Эта директива (EQU) ставит в соответствие к DELAYCOUNTER 0x00
То есть мы пишем DELAYCOUNTER, а программа думает «0x00»
Вообще мы будем использовать DELAYCOUNTER как переменную. а 0x00 — просто адрес, где она хранится в общих регистрах.
Кстати. Забыл сказать. 0x00 — это просто число. Так мы записываем числа в 16ричной системе счисления.
то есть 0x6B = 107

Мы используем для нашей программы память, входящую в access RAM, поэтому мы вольны использовать ячейки памяти от 0x00 до 0x5F. А ячейки от 0x60 до 0xFF — это регистры общего назначения.

ORG 0
Этим мы указываем компилятору, чтобы он писал все последующие команды последовательно с адреса 0.

GOTO main
ORG 28h
main

Переходим на метку main. И начиная с 0x28 адреса пишем программу дальше. Метка main — адрес 0x28
Обратите внимание, мы оставили свободное место между адресом программы 0x1 и 0x28. Зачем? Если мы будем в последствии использовать прерывания, то в случае. если прерывание будет требовать на время приостановить программу. оно начнет выполнять команды по адресу 0x8 или 0x18. и это место нужно будет заполнить программой обработки прерывания.

Все последующие команды смотри в главе 3. Команды ассемблера. ссылка

MOVWF ADCON1
Когда мы записываем значение в регистр ADCON1. мы меняем настройки АЦП. По поводу 
использования встроенных устройств контроллера смотри главу 4. ссылка

Пожалуйста, помогите сделать статью лучше. Увидели непонятность, неточность или  ошибку, сообщите в комментарии, или напишите мне. Спасибо. [email protected]

О микроконтроллере PIC

О микроконтроллере PIC

PIC — это название микрочипа. семейство микроконтроллеров (MCU), состоящее из микропроцессора, ввода / вывода порты, таймер (ы) и другое внутреннее интегрированное оборудование. Главный Преимущества использования PIC — небольшое количество внешних компонентов, широкий выбор микросхем доступны размеры (теперь с 5-контактного!), хороший выбор компиляторов (сборка, C, BASIC и т. Д.) Большое количество примеров / исходных текстов руководств и простое программирование. После покупки программная память PIC пуста, и ее необходимо запрограммировать с помощью код (обычно файлы HEX) для использования в схеме.

  • pcbheaven имеет отличный учебник для новичков в программировании PIC.
  • Микроэлектроника Электронная книга PIC Microcontrollers — еще один хороший источник для запуска
  • .
  • Для фрагментов кода и идеи проверить в сети PIClist страницы и архивы списков рассылки.

FAQ

Q: Что я могу сделать с исходным кодом сборки для PIC микроконтроллер?

A: Во-первых, вам нужен компилятор, который берет исходники код в виде asm (сборка), inc (включает) и lkr (скрипт компоновщика) файлы. Вы можете скомпилировать файлы сборки микрочипа с помощью gputils или mpasm, часть МПЛАБ.
(Gputils — это утилиты командной строки, mplab — графическая разработка environment)

Компилятор выведет шестнадцатеричный файл, подходящий для программирования в Устройство. Для этого вам понадобится программатор. Это интерфейс между компьютером и микроконтроллером. Я рекомендую использовать Пикит 2 или 3 с этой целью.

Пожалуйста, прочтите картинку pcbheaven страницы для начала компиляции кода и программирования PIC микроконтроллеры.

Q: Как мне скомпилировать HEX-файл из нескольких исходные файлы (связанный проект или перемещаемый код)?

A: Запустите MPLAB-X и выберите файл / новый проект. Выберите «Встроенный микрочип» в «Категории» и «Автономный проект» в Проекты. Нажмите «Далее», выберите целевой микроконтроллер, который вы видите в принципиальная схема (например, PIC16F628). Нажмите «Далее», игнорируйте Выбрать Заголовок и еще раз нажмите «Далее». Выберите «Симулятор» в «Аппаратных средствах» как Инструмент. Нажмите «Далее» и выберите «mpasm (версия) для компилятора».Нажмите кнопку «Далее и введите название проекта. Щелкните Готово. Выберите Окно / Проекты. в окна проектов, используйте фактический проект и игнорируйте другие (если есть любые). Щелкните правой кнопкой мыши «Файлы компоновщика», выберите «Добавить существующий элемент» и добавить в проект скрипт компоновщика (* .lkr). В окне проектов щелкните правой кнопкой мыши «Исходные файлы», выберите «Добавить существующий элемент» и добавьте все файлы сборки (* .asm) в проект. Щелкните правой кнопкой мыши фактическое имя проекта и выберите «Построить». Ты увидит результат компиляции в «Окне вывода».

А: Запустите MPLAB и выберите проект / мастер проекта. Выберите цель микроконтроллер, который вы видите на принципиальной схеме (например, PIC16F628). Выберите набор инструментов MPASM. Добавить всю сборку (* .asm), заголовочные файлы (* .inc) и сценарий компоновщика (* . lkr) к проекту. Выбрать проект / собрать все. Если будет предложено, выберите создание «перемещаемого кода», а не «абсолютного кода».

Объяснение: Есть два несовместимых типа источников для однофайлового абсолютные и связанные с несколькими файлами проекты, вы не можете писать код, работающий для оба типа.Если вы хотите создать модульный код, который можно в сочетании с другими библиотеками код должен быть написан в связываемый формат, даже если это единственный исходный файл в начало. Но источник связанного формата должен быть скомпилирован иначе, в два этапа: сначала компилируется в промежуточный формат объекта, а затем связывается в файл HEX.

Q: Где документирован весь этот ассемблер?

A: Вы можете найти набор команд микроконтроллера PIC документация в таблицах микроконтроллеров на микрочипе.com. PIC12, PIC16, PIC18, Семейства микроконтроллеров PIC24, PIC32 имеют разную инструкцию наборы. Кроме того, общий синтаксис кода (метки, переменные, макросы и др. ) описано в mpasm документация.

Home — Great Cow BASIC

Наша миссия — создавать лучшие инструменты программирования для микроконтроллеров Microchip PIC и Atmel AVR.

Наше программное обеспечение называется Great Cow BASIC suite . Пакет Great Cow BASIC — это надежный и полнофункциональный компилятор и ассемблер.Использование Great Cow BASIC — это самый быстрый способ программирования 8-битного микроконтроллера Microchip PIC или Atmel AVR для начинающих и профессиональных пользователей.

Great Cow BASIC преследует три основные цели — устранить необходимость в повторяющихся командах сборки, создать эффективный код и упростить выполнение кода, написанного для одного типа микроконтроллера, и его выполнения на микроконтроллере другого типа. Цель дизайна — устранить сложность использования и программирования микроконтроллера.Great Cow BASIC подходит для начинающих, для тех, кто не любит или не хочет изучать язык ассемблера, а также для опытных программистов микроконтроллеров. Great Cow BASIC доступен для Windows, операционных систем Apple и Linux.

У нас есть две версии Great Cow BASIC. Обе версии используют один и тот же общий набор основных инструментов, разница заключается в удобстве использования.

  • Great Cow BASIC IDE
  • Великая корова Графический BASIC

Отличная ОСНОВНАЯ IDE COW

Эта среда IDE называется GCB @ Syn.

GCB @ Syn — это IDE для Great Cow BASIC. Он основан на Synwrite, созданном Алексеем Торгашиным www.uvviewsoft.com/synwrite

адаптирован и модифицирован для GCB и поддерживается Фрэнком Штейнбергом, см. Www.FrankSteinberg.de для получения дополнительной информации о Фрэнке и его великой работе.

GCB @ Syn функции:

  • Интеграция с компилятором Great Cow BASIC
  • Простая замена программатора
  • Редактор SynWrite с подсветкой синтаксиса и сворачиванием кода
  • Список под / функций
  • Автозаполнение
  • Контекстно-зависимая помощь (F1)
  • Многофайловые вкладки и закладки
  • Двойной щелчок по ошибкам компилятора перемещает курсор в строку ошибки исходного кода
  • Микроконтроллер сборки / компиляции / прошивки в один клик (F5, F6, F7, F8)
  • Программное обеспечение последовательного терминала
  • Программное обеспечение для программирования
    • PicKit2 и PicKit3
    • AVRdude и Avrdude-GUI
    • Программатор плат Microchip Xpress
    • Инструмент автоматизации Microchip IPE
    • TinyMultiBootloader +
    • И еще много программистов

В среде IDE используется следующая цепочка инструментов:

  • SynWrite
  • PPS Tool for Microchip Peripheral Pin Select
  • XpressLoader
  • Шпатлевка и клемма
  • TinyMultiBootloader +
  • WinPICgm
  • Графический интерфейс PicKit3
  • IPE-толкатель
  • PicKit2 Gui
  • PicKit2Cmd
  • Микронуклеус
  • Avrdudess
  • Avrdude

    Верх

Отличный COW BASIC SYNTAX

Синтаксис Great Cow BASIC основан на синтаксисе QBASIC / FreeBASIC, но с некоторыми адаптациями для соответствия совершенно другой системе, для которой он компилируется, — микроконтроллеру.

Great Cow BASIC позволит вам программировать большинство 8-битных микроконтроллеров PIC (чипы 10F, 12C, 12F, 16C, 16F, 18C и 18F) и большинство микроконтроллеров AVR (Classic AVR, Tiny AVR и Mega AVR).


Great Cow ОСНОВНЫЕ особенности:

  • Простой, полезный язык
    • Стандартные операторы управления потоком BASIC — If, Select Case, Do, For, While-Loop
    • Поддержка умножения, деления, сложения, вычитания, логических операций и сравнений.
    • типов данных Bit, Byte, Word, Long и Integer и String, в дополнение к массивам байтов и слов.
    • Подпрограммы и функции
    • Встроенный монтаж, в большинстве случаев без каких-либо специальных директив
    • Таблицы данных
    • Комплексная математика
  • Портативный многоразовый код:
    • Поддерживает 8-битные микроконтроллеры PIC и AVR
    • Напишите код для TinyAVR, легко адаптируйте его для 18F
    • Автоматически пересчитывает все команды задержки в зависимости от тактовой частоты чипа
  • Возможности ввода / вывода
  • :
    • Стандартные процедуры ЖК-дисплея и GLCD
    • Подпрограммы для встроенного A / D, I2C, PWM (8 бит, 10 бит, 12 бит и 16 бит), SPI, USART, EEPROM, таймеры
    • Связь RS232 — скорость от 300 до 256000 бит / с с настраиваемыми пользователем четностью, стартовыми и стоповыми битами.
    • Клавиатура PS / 2 для чтения и клавиатура 4×4
  • Другие особенности:
    • Библиотеки для самого большого набора дополнительных компонентов
    • Обширный файл справки и форум
    • Несколько переводов
    • Генерирует стандартный код сборки, совместимый с MPASM, для PIC или код, совместимый с avrasm2, для AVR.

      Верх

Вы уже знакомы с PIC-разработкой в ​​другой среде программирования?

Просветленную историю ищите здесь

ОСНОВНАЯ ИСТОРИЯ Great COW

Great Cow BASIC был первоначально разработан в 2007 году Хью Консидайном, и с годами все большее число разработчиков поддерживают разработку с открытым исходным кодом.Ключевые разработчики и ключевые участники сообщества:

Хью Консидайн Ведущий разработчик
Эван Венн Ответственный за дизайн, разработчик основной библиотеки и менеджер по выпуску
Уильям Рот ЖК-дисплей, таймеры, разработчик библиотек SMT
Тео Лоерманс Разработчик ЖК-дисплеев и библиотек
Крис Ропер Утилиты и контроль качества
Джо Реалмуто Проявитель GLCD
Кент Шафер Проявитель PWM и GLCD
Пит Эверетт Инструмент проявителя PPS
Франк Стейнберг Ведущий разработчик IDE
Бернд Дау Uber Web Master
Стефано Бономи Двухпроводные ЖК-подпрограммы
Джорди Миллар Подпрограммы Swap и Swap4
Финн Стокс 8-битная процедура умножения, код доступа к программной памяти

Если вам интересно, что вы можете делать с Great Cow BASIC. Посмотрите видео ниже — в нем показаны некоторые возможности Great Cow BASIC.

Верх

Великая корова Графический BASIC

Great Cow Graphical BASIC — это редактор программ на основе значков. Это позволяет вам создавать программы Great Cow BASIC без запоминания команд.Это делает его особенно полезным для тех, кто никогда раньше не занимался программированием. И, как и в случае с Great Cow BASIC, это совершенно бесплатно!

Great Cow Graphical BASIC тесно интегрирован с Great Cow BASIC — он будет работать со всеми теми же чипами, а также напрямую загружать и сохранять программы GCBASIC. Вы даже можете копировать и вставлять между Great Cow Graphical BASIC и текстовым редактором с программой Great Cow BASIC в нем! GCGB загрузит библиотеки GCB, и, когда вам удобно оставить значки, ваши программы GCGB можно будет редактировать, как любую другую программу Great Cow BASIC.

В настоящее время Great Cow Graphical BASIC работает только в Windows и требует .NET Framework 1.1 или выше.

Верх

Важные ссылки

Справка Полная справочная система с возможностью поиска — обновляется ежедневно

Forum — форум пользователей содержит огромное количество информации, и вы можете попросить сообщество о помощи и совете.

Микроконтроллеры — Great Cow BASIC поддерживает более 1100+ микроконтроллеров.

Оборудование — это дополнительное оборудование уже поддерживается — этот список растет еженедельно.

Скачать — здесь скачать ПО

Demo Code — здесь у нас есть огромное хранилище демонстрационного кода. Для доступа выберите здесь

Коллекция витрин — и не пропустите коллекцию замечательных проектов, опубликованных пользователями Great Cow BASIC

Никогда не пропустите выпуск или

важное обновление! Лента новостей

Верх

Микроконтроллер

— Какой микропроцессор хорош для начинающих, чтобы научиться сборке?

Я учился на 68HC11 в колледже. С ними очень просто работать, но, честно говоря, большинство микроконтроллеров с низким энергопотреблением будут похожи (AVR, 8051, PIC, MSP430). Самое большое, что усложнит программирование ASM для микроконтроллеров, — это количество и тип поддерживаемых режимов адресации памяти. Сначала вам следует избегать более сложных устройств, таких как процессоры ARM более высокого класса.

Я бы, наверное, порекомендовал MSP430 как хорошую отправную точку. Может быть, напишите программу на C и научитесь, заменяя различные функции встроенной сборкой.Начните с простого, x + y = z и т. Д.

После того, как вы заменили функцию или алгоритм на сборку, сравните и сопоставьте, как вы их кодировали, и что сгенерировал компилятор C. На мой взгляд, это, вероятно, один из лучших способов изучить ассемблер и в то же время узнать, как работает компилятор, что невероятно ценно для встраиваемого программиста. Просто убедитесь, что вы сначала отключили оптимизацию в компиляторе C, иначе вы, вероятно, будете очень сбиты с толку кодом, созданным компилятором. Постепенно включайте оптимизацию и обратите внимание на то, что делает компилятор.

RISC и CISC

RISC означает «вычисления с сокращенным набором команд», он не относится к конкретному набору команд, а просто к стратегии проектирования, которая гласит, что ЦП имеет минимальный набор команд. Несколько инструкций, каждая из которых делает что-то базовое. Это не строго техническое определение того, что нужно «быть RISC». С другой стороны, архитектуры CISC содержат множество инструкций, но каждая «делает больше».

Предполагаемые преимущества RISC заключаются в том, что для вашего процессора требуется меньше транзисторов, что означает меньшее потребление энергии (большое для микроконтроллеров), более дешевое изготовление и более высокие тактовые частоты, что приводит к большей производительности. Более низкое энергопотребление и более дешевое производство, как правило, верны, более высокая производительность на самом деле не достигла поставленной цели в результате усовершенствований конструкции архитектур CISC.

Сегодня почти все ядра ЦП имеют RISC-архитектуру или конструкцию «среднего уровня». Даже с самой известной (или печально известной) архитектурой CISC x86.Современные процессоры x86 являются внутренне RISC-подобными ядрами с прикрепленным к передней части декодером, который разбивает инструкции x86 на несколько инструкций, подобных RISC. Я думаю, что Intel называет это «микрооперациями».

Что касается того, что (RISC или CISC) легче изучить на сборке, я думаю, что это подброс. Выполнение чего-либо с набором инструкций RISC обычно требует больше строк сборки, чем выполнение того же самого с набором инструкций CISC. С другой стороны, наборы инструкций CISC сложнее изучить из-за большего количества доступных инструкций.

Основная причина дурной славы CISC заключается в том, что x86, безусловно, является наиболее распространенным примером, и с ним немного беспорядочно работать. Я думаю, что это в основном результат того, что набор инструкций x86 был очень старым и был расширен полдюжины или более раз при сохранении обратной совместимости. Даже ваш Core i7 с частотой 4,5 ГГц может работать в режиме 286 (и работает при загрузке).

Что касается архитектуры RISC, то я считаю это умеренно спорным. Это определенно архитектура загрузки-магазина.Базовый набор инструкций похож на RISC, но в последних версиях набор инструкций значительно вырос до такой степени, что я лично считаю его скорее чем-то средним между RISC и CISC. Набор инструкций для большого пальца действительно является наиболее «РИСКОМ» из всех наборов инструкций ARM.

PIC микроконтроллеры: глава 3

ГЛАВА 3

Сборка Язык программирования

Введение

3.1 Представление чисел в ассемблере
3.2 Элементы ассемблера
3.3 Написание программы-примера
3.4 Директивы управления

3,5 Файлы, созданные в результате трансляции программы


Введение

Умение общаться огромно важность в любой сфере. Однако это возможно, только если оба партнеры по общению знают один и тот же язык, т.е. следуют одним и тем же правилам во время общения.Используя эти принципы в качестве отправной точки, мы можем также определяют связь, которая происходит между микроконтроллерами и человеком. Язык, на котором микроконтроллер и человек общаются, называется «язык ассемблера». Само название не имеет более глубокого смысла и является аналог названий других языков, напр. Английский или французский. Более точнее говоря, «язык ассемблера» — всего лишь временное решение. Программ написанные на ассемблере должны быть переведены на «язык нулей» и единицы », чтобы микроконтроллер это понял.»Сборка язык «и» ассемблер «- это два разных понятия. Первое представляет набор правил, используемых при написании программы для микроконтроллера, и другое — это программа на персональном компьютере, которая переводит сборку язык на язык нулей и единиц. Программа, которая переведена на «нули» и «единицы» еще называют «машинным языком».

Процесс общения между мужчиной и микроконтроллером

Физически « Программа » представляет собой файл на диске компьютера (или в памяти, если он читается в микроконтроллер) и написан по правилам ассемблера или какой-то другой язык для программирования микроконтроллеров.Человек может понять язык ассемблера, поскольку он состоит из букв и знаков алфавита. Когда при написании программы необходимо соблюдать определенные правила, чтобы достичь желаемый эффект. Переводчик интерпретирует каждую инструкцию, написанную в язык ассемблера как последовательность нулей и единиц, которые имеют значение для внутренняя логика микроконтроллера.
Возьмем для примера инструкция «RETURN», которую микроконтроллер использует для возврата из подпрограмма.
Когда ассемблер переводит, мы получаем 14-битную серию нулей и единиц, которые микроконтроллер умеет интерпретировать.

Пример: ВОЗВРАТ 00 0000 0000 1000

Как и в предыдущем примере, каждая инструкция ассемблера интерпретируется как соответствующий ряду нулей и единиц.
г. место, где находится этот перевод языка ассемблера, называется «исполнительный» файл. Мы часто будем встречать имя файла «HEX».Это имя приходит из шестнадцатеричного представления этого файла, а также из суффикса «шестнадцатеричный» в названии, напр. «test.hex». Как только он сгенерирован, выполнение файл читается в микроконтроллере через программатор.

An язык ассемблера программа написана в программе для текста обработка (редактор) и может создавать файл ASCII на компьютерный диск или в специальной среде, такой как MPLAB, которая будет объяснено в следующей главе.

3. 1 Представление чисел в ассемблер

На ассемблере MPLAB числа могут быть представлены в десятичной, шестнадцатеричной или двоичной форме. Мы проиллюстрируем это с номером 240:

.240 десятичный
0xF0 шестнадцатеричное
b’11110000 ‘ двоичный

Десятичные числа начинаются с точки, шестнадцатеричные с 0x, а двоичное начинается с b с самим числом в кавычках ‘.

3.2 Язык ассемблера элементы

Основные элементы ассемблера являются:

  • Этикетки
  • Инструкции
  • операндов
  • Директивы
  • Комментарии

Этикетки

A Этикетка — текстовое обозначение (обычно легко читаемое слово) для строки в программе или раздела программы, где микроконтроллер может перейти к — или даже к началу набора строк программа. Его также можно использовать для выполнения ветвления программы (например, Goto …….) и в программе может быть даже условие, которое должно выполняться для инструкция Goto, которую нужно выполнить. Важно, чтобы этикетка начиналась с буквой алфавита или с подчеркиванием «_». Длина метка может содержать до 32 символов. Также важно, чтобы этикетка начиналась в первой колонке.

Инструкции

Инструкции уже определены с помощью конкретного микроконтроллер, поэтому нам остается только следовать инструкциям для их использование на языке ассемблера.То, как мы пишем инструкции, также называется инструкция «синтаксис». В следующем примере мы можем распознать ошибка в записи, потому что инструкции movlp и gotto не существуют для микроконтроллер PIC16F84.

Операнды

Операнды — это элементы инструкции для инструкции выполняется. Обычно это регистров или переменных или констант .

Комментарии

Комментарий — это серия слов, которые программист пишет, чтобы сделать программу более понятной и разборчивой.Ставится после инструкция и должна начинаться с точки с запятой «;».

Директивы

Директива аналогична инструкции, но в отличие от инструкции он не зависит от модели микроконтроллера и представляет собой характеристику самого языка ассемблера. Директивы обычно имеют целенаправленное значение через переменные или регистры. За Например, УРОВЕНЬ может быть обозначением переменной в оперативной памяти в адрес 0Dh.Таким образом, переменная по этому адресу может быть доступна через Обозначение УРОВНЯ. Программисту понять это намного проще, чем чтобы он попытался запомнить адрес 0Dh, содержит информацию о УРОВЕНЬ.

3,3 Вт riting a пример программы

Следующий пример иллюстрирует простой программа, написанная на языке ассемблера с соблюдением основных правила.

При написании программы, помимо обязательных правил, есть также некоторые правила, которые не записаны, но которые необходимо соблюдать.Один из них — написать название программы в начале, какой программа, ее версия, дата написания, тип микроконтроллер, для которого он был написан, и имя программиста.

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

Для правильного функционирования мы должны определить несколько параметров микроконтроллера, такие как: — тип осциллятор,
— включен ли сторожевой таймер, а
— включен ли включена внутренняя схема сброса.
Все это определяется следующим директива:

_CONFIG _CP_OFF ​​& _WDT_OFF & PWRTE_ON & XT_OSC

Когда все необходимые элементы определены, мы можем начать писать программа.
Сначала необходимо определить адрес, с которого микроконтроллер запускается после включения источника питания. Это (org 0x00).
Адрес, с которого запускается программа при возникновении прерывания. это (org 0x04).
Так как это простая программа, достаточно будет направьте микроконтроллер в начало программы с помощью « goto» Основная инструкция «.

Инструкции в Основной выберите банк памяти 1 (BANK1) для доступа к TRISB регистр, чтобы порт B можно было объявить как выход (movlw 0x00, movwf ТРИСБ).

Следующим шагом является выбор банка памяти 0 и размещение состояние логической единицы порта B (movlw 0xFF, movwf PORTB), и, следовательно, основной программа закончена.
Нам нужно сделать еще один цикл, в котором будет удерживаться, чтобы он не «блуждал» в случае ошибки. Для этого один бесконечный цикл, в котором микроконтроллер сохраняется, пока мощность связаны. Необходимый «конец» в конце каждой программы информирует переводчик ассемблера, что в программе больше нет инструкций.

3.4 Директивы по управлению

3,1 #DEFINE Меняет одну деталь текста для другого

Синтаксис:
#define [<другой текст>]

Описание:
Каждый раз, когда <текст> появляется в программа, он будет заменен на <другой текст >.

Пример:

#define Turn_on 1
#define Turn_off 0

Аналогичные директивы: #UNDEFINE, IFDEF, IFNDEF

3.2 ВКЛЮЧИТЬ Включите дополнительный файл в программе

Синтаксис:
#include <имя_файла>
#include «имя_файла»

Описание:
Применение этого директива действует так, как если бы весь файл был скопирован в место где была найдена директива include. Если имя файла находится в квадрате скобках, мы имеем дело с системным файлом, и если он внутри цитаты знаков, мы имеем дело с пользовательским файлом. Директива include способствует лучшему расположению основных программа.

Пример:
#include
#include «subprog.asm»

3.3 ПОСТОЯННЫЙ Дает постоянное числовое значение для текстовое обозначение

Синтаксис:
Константа =

Описание:
Каждый раз, когда <имя> появится в программе, оно будет заменено на <значение>.

Пример:
Константа MAXIMUM = 100
Постоянная длина = 30

Аналогично директивы: SET, VARIABLE

3.4 VARIABLE Дает переменную числовое значение в текстовое обозначение

Синтаксис:
Переменная <имя> = <значение>

Описание:
Автор при использовании этой директивы текстовые обозначения меняются с особым ценить.
Отличается от директивы CONSTANT тем, что после применения директиве значение текстового обозначения может быть измененный.

Пример:
уровень переменной = 20
переменное время = 13

Аналогичные директивы: SET, ПОСТОЯННАЯ

3,5 SET Определение ассемблера переменная

Синтаксис:
set

Описание:
To к переменной добавляется выражение . НАБОР директива аналогична EQU, но с именем директивы SET переменной может быть переопределено после определение.

Пример:
набор уровней 0
набор длин 12
набор уровней 45

Аналогичные директивы: EQU, ПЕРЕМЕННАЯ

3,6 EQU Определение ассемблера константа

Синтаксис:
equ <значение>

Описание:
К имени константы — добавленная стоимость <значение>

Пример:
пять экв 5
шесть экв 6
семь экв 7

Аналогичные инструкции: SET

3. 7 ORG Определяет адрес, с которого программа хранится в памяти микроконтроллера

Синтаксис:
<метка> org <значение>

Описание:
Это это наиболее часто используемая директива. С помощью этой директивы мы определить, где какая-то часть программы будет запускаться в программе объем памяти.

Пример:
Start org 000
movlw 0xFF
movwf PORTB

Первые две инструкции, следующие за первой Директива org хранится с адреса 00, а две другие — с адреса 10.

3.8 КОНЕЦ Конец программа

Синтаксис:
конец

Описание:
В конце в каждой программе необходимо разместить директиву end, чтобы сборка переводчик знал бы, что в программа.

Пример:
.
.
movlw 0xFF
movwf PORTB
конец

3,9 ЕСЛИ Условная программа разветвление

Синтаксис:
if

Описание:
If условие в было выполнено, часть программы, которая следует за директивой IF. А если нет, то часть следующая директива ELSE или ENDIF будет выполнен.

Пример:
if level = 100
goto FILL
else
goto DISCHARGE
endif

Аналогичные директивы: #ELSE, ENDIF

3,10 ELSE Альтернатива в программный блок IF с условными терминами

Синтаксис:
Else

Описание:
Используется с директивой IF в качестве альтернативы, если условный термин неверно.

Пример:
Если время <50
goto SPEED UP
else goto SLOW DOWN
endif

Аналогичные инструкции: ENDIF, IF

3,11 ENDIF Конец условной программы раздел

Синтаксис:
endif

Описание:
Директива пишется в конце условного блока, чтобы сообщить сборке переводчик, что это конец условного блок

Пример:
Если level = 100
goto LOADS
else
goto UNLOADS
endif

Подобные директивы: ELSE, IF

3. 12 ПРИ ВЫПОЛНЕНИИ программы раздел, пока выполняется условие

Синтаксис:
, а <условие>
.
endw

Описание:
Строки программы между WHILE и ENDW будет выполняться до тех пор, пока выполняется условие. Если условие перестала быть действительной, программа продолжит выполнение инструкций следующая строка ENDW. Количество инструкций между WHILE и ENDW может быть Не более 100 и количество казней 256.

Пример:
Пока i <10
i = i + 1
endw

3,13 ENDW Конец условного часть программы

Синтаксис:
endw

Описание:
Инструкция записывается в конце условного блока WHILE, так что сборка переводчик знал бы, что это конец условного block

Пример:
while i <10
i = i + 1

endw

Подобные директивы: WHILE

3.14 IFDEF Выполнение детали программы, если был определен символ

Синтаксис:
ifdef <обозначение>

Описание:
Если обозначение было ранее определено (чаще всего #DEFINE инструкция), последующие инструкции будут выполняться до тех пор, пока Директивы ELSE или ENDIF не будут достиг.

Пример:
#define test
.
ifdef test; как прошел тест определено
……; инструкции из этих строк будут выполнять
endif

Аналогичные директивы: #DEFINE, ELSE, ENDIF, IFNDEF, #UNDEFINE

3.15 IFNDEF Выполнение части программа, если был определен символ

Синтаксис:
ifndef <обозначение>

Описание:
Если обозначение не было ранее определено, или если его определение было удалено директивой #UNDEFINE, инструкции, которые следуют будет выполняться до тех пор, пока директивы ELSE или ENDIF не будут достиг.

Пример:
#define test
……….
#undefine тест
……….
ifndef тест; как тест был undefined
……; инструкции из этих строк будут выполнять
endif

Аналогичные директивы: #DEFINE, ELSE, ENDIF, IFDEF, #UNDEFINE

3,16 CBLOCK Определение блока для названных констант

Синтаксис:
Cblock [<термин>]
<метка> [: <инкремент>], <метка> [: <инкремент>]. …..
endc

Описание:
Директива используется для присвоения значений именованным константам. Каждый следующий член получает значение на единицу больше, чем его предшественник. Если параметр также задано, тогда значение, указанное в параметре , добавляется к следующая константа.
Значение параметра является начальным ценить. Если он не указан, он считается нуль.

Пример:
Cblock 0x02
Первый, второй, третий; первый = 0x02, второй = 0x03, третий = 0x04
endc

cblock 0x02
первый: 4, второй: 2, третий; первый = 0x06, второй = 0x08, третий = 0x09
endc

Аналогичные директивы: ENDC

3.17 ENDC Конец константного блока определение

Синтаксис:
endc

Описание:
Директива была используется в конце определения блока констант, поэтому сборка переводчик мог знать, что больше нет константы.

Аналогичные директивы: CBLOCK

3,18 БД Определение однобайтовых данных

Синтаксис:
[

Описание:
Директива резервирует байт в программной памяти. Когда есть еще термины, которые нужно каждому байту, они будут назначены один после еще один.

Пример:
db ‘t’, 00f, ‘e’, ​​’s’, 012

Аналогичные инструкции: DE, DT

3.19 DE Определение байта памяти EEPROM

Синтаксис:
[] de [, <термин>,….., <срок>]

Описание:
Директива используется для определения байта памяти EEPROM. Хотя это было изначально задумано только для памяти EEPROM, его можно использовать для любого другого места в любом объем памяти.

Пример:
org H’2100 ‘
de «Version 1.0», 0

Подобные инструкции: DB, DT

3. 20 DT Определение таблица данных

Синтаксис:
[

Описание: Директива
генерирует RETLW серия инструкций, по одной инструкции на каждую срок.

Пример:
dt «Сообщение», 0
dt первый, второй, третий

Аналогичные директивы: DB, DE

3,21 _CONFIG Настройка конфигурационные биты

Синтаксис:
_ _config or_ _config <адрес>, <термин>

Описание:
Генератор, Определены приложение сторожевого таймера и внутренняя схема сброса.Перед используя эту директиву, процессор должен быть определен с помощью PROCESSOR директива.

Пример:
_CONFIG _CP_OFF ​​& _WDT_OFF & _PWRTE_ON & _XT_OSC

Подобные директивы: _IDLOCS, ПРОЦЕССОР

3,22 ПРОЦЕССОР Определение модель микроконтроллера

Синтаксис:
Процессор <тип_ микроконтроллера>

Описание:
Инструкция устанавливает тип микроконтроллера, на котором программирование сделано.

Пример:
процессор 16F84

3,5 Файлы создано в результате трансляции программы

В результате процесса перевода программа, написанная на языке ассемблера, получаем файлы вида:

  • Исполняемый файл (Program_Name.HEX)
  • Файл программных ошибок (Program_Name.ERR)
  • Файл списка (Program_Name.LST)

Первый файл содержит переведенную программу который был прочитан в микроконтроллере путем программирования.Его содержимое не может передать программисту какую-либо информацию, поэтому она не будет считаться дальше.
Второй файл содержит возможные ошибки, которые были сделаны в процессе написания, и которые были замечены переводчиком ассемблера в процессе перевода. Ошибки можно обнаружить в файле «списка» как Что ж. Этот файл больше подходит, когда программа большая и просматривает файл со списком занимает больше времени.
Третий файл самый полезный программисту.В нем содержится много информации, например, информация о инструкции позиционирования и переменные в памяти, или ошибка сигнализация.

Пример файла ‘списка’ для программы в этом глава следует. Вверху каждой страницы указана информация о имя файла, дата перевода и номер страницы. Первый столбец содержит адрес в памяти программы, где находится инструкция из этой строки. размещен. Второй столбец содержит значение любой переменной, определенной одним из директивы: SET, EQU, VARIABLE, CONSTANT или CBLOCK.Третий столбец зарезервировано для формы переведенной инструкции, которую выполняет PIC. Четвертый столбец содержит инструкции ассемблера и программатор Комментарии. Возможные ошибки появятся между строками после строки в произошла ошибка.


В конце файла «списка» есть таблица символов, используемых в программе. Полезный элемент списка файл представляет собой график использования памяти. В самом конце возникает ошибка статистика, а также количество оставшейся программной памяти.

ассемблер% 20программирование% 20for% 20pic% 2016f690 техническое описание и примечания по применению

2000 — MPC8240

Аннотация: PowerPC 401 SVR4 L208 MPC8260 L00DATA
Текст: Текст файла недоступен

1998 — 00FF

Аннотация: MSP430
Текст: Текст файла недоступен

1999 — УМ0036

Аннотация: z380 Z8 кросс-ассемблер Z893XX Z89C00 Z180 Z89C50
Текст: Текст файла недоступен

2006 г. — AD6900

Резюме: распечатка ADSP-TS201 saa 3010 t ad6903 BF541 AD6531 AD6902 SKPT 17 2/2 ADSP-21020 SKPT 38
Текст: текст файла недоступен

2009 — HCS12 серии Фибоначчи

Резюме: la 5A50 at 5A50 CpuHCS12X HC12 fibonacci HCS12 HC12 HC08 AR 5414 WinEdit32
Текст: Текст файла недоступен


Оригинал
PDF
2010 — ссылка на ассемблер codewarrior

Аннотация: Текст аннотации недоступен
Текст: Текст файла отсутствует


Оригинал
PDF
adsp 2186 набор инструкций

Аннотация: режимы адресации в наборе инструкций adsp-21xx adsp-2186 вычисление adsp 21xx fft ADSP-2187 ASM21
Текст: Текст файла недоступен


Оригинал
PDF easm218x ADSP-2100 ADSP-2181, ADSP-2183, ADSP-2184 / 2184L, ADSP-2185 / 2185L / 2185M, АДСП-2186 / 2186Л / 2186М, ADSP-2187L, АДСП-2188М, АДСП-2189М, набор инструкций adsp 2186 режимы адресации в adsp-21xx набор инструкций adsp-2186 Расчет adsp 21xx fft ADSP-2187 ASM21

Оригинал
PDF SA14-2562-00 MPC8240 PowerPC 401 SVR4 L208 MPC8260 L00DATA
2101P

Аннотация: Three-Five VisualDSP 3.5 Руководство по ассемблеру и препроцессору Пример загрузки 218x
Текст: текст файла недоступен


Оригинал
PDF ADSP-21xx ADSP-218x 2101P Три-пять Руководство по сборщику и препроцессору VisualDSP 3.5 Пример загрузки 218x
ADSP-21xxx

Аннотация: Ассемблер ASM21K
Текст: Нет текста в файле


Оригинал
PDF ADSP-21xxx ADSP-2106x Ассемблер ASM21K
2004 — транзистор а1413

Аннотация: a1413 a2305 4b42 A14129 ls-t73 A18004 a2380 транзистор a1412 a2400
Текст: Нет текста в файле


Оригинал
PDF 02 июня 2004 г. транзистор а1413 a1413 a2305 4b42 A14129 LS-T73 A18004 a2380 транзистор а1412 a2400
CR16B

Резюме: D1492 CR32A 00FF 302F CR16A
Текст: Текст файла недоступен


Оригинал
PDF CR16A CR32A CR16B.CR16B D1492 00FF 302F
1999 — архитектура Sharc ADSP-21xxx

Аннотация: adsp 21xxx sharc processor sharc ADSP-21xxx РЕЖИМЫ АДРЕСАЦИИ ADSP-21xxx sharc ADSP-21xxx F12-F0 режимы адресации ADSP-210XX ADSP-21XXX ПАМЯТЬ ustat2 архитектуры процессора ADSP21xxx SHARC
Текст: текст файла отсутствует


Оригинал
PDF ADSP-21xxx ADSP-21160 АДСП-21060 / 60Л, АДСП-21061 / 61Л, АДСП-21062 / 62Л, ADSP-21065L, Архитектура Sharc ADSP-21xxx процессор adsp 21xxx sharc АДРЕСНЫЕ РЕЖИМЫ sharc ADSP-21xxx Sharc ADSP-21xxx F12-F0 режимы адресации ADSP-210XX ПАМЯТЬ ADSP-21XXX ustat2 архитектуры процессора ADSP21xxx SHARC

Оригинал
PDF MSP430 00FF
2010 — ссылка на ассемблер codewarrior

Аннотация: Текст аннотации недоступен
Текст: Текст файла отсутствует


Оригинал
PDF
1991 — ссылка на ассемблер codewarrior

Аннотация: Текст аннотации недоступен
Текст: Текст файла отсутствует


Оригинал
PDF 08 / RS08 CWMCUS08ASMREF 08 / RS08 ссылка на ассемблер codewarrior
1991 — Режим адресации ADSP-210xx

Аннотация: режимы адресации ADSP-210XX VisualDSP 3.5 Руководство по сборщику и препроцессору Диод F12-F0 КОД 51n ASM21K
Текст: Текст файла отсутствует


Оригинал
PDF ADSP-2106x asm21k) Режим адресации ADSP-210xx режимы адресации ADSP-210XX Руководство по сборщику и препроцессору VisualDSP 3. 5 F12-F0 диод CODE 51n ASM21K
2010 — STR 6754

Аннотация: a2305 a2601 A1413 a13003 str 6754 схема A1303 A2306 a2358 a2400
Текст: Текст файла отсутствует


Оригинал
PDF 08 / RS08 A4001 A4002 A4003 A4004 A4005 08 / RS08 STR 6754 a2305 a2601 A1413 a13003 ул 6754 схема A1303 A2306 a2358 a2400
2010 — Программирование на ассемблере для hc08

Аннотация: Freescale usb mcf51jm128 AN3859 HC08 HCS08 MC9S08QE128 MCF51JM128 RS08
Текст: Текст файла недоступен


Оригинал
PDF base31 Программирование на ассемблере для hc08 Freescale usb mcf51jm128 AN3859 HC08 HCS08 MC9S08QE128 MCF51JM128 RS08
1995 — моторола bsc

Аннотация: DSP56000 DSP56100 DSP56166 DSP96000
Текст: Текст файла недоступен


Оригинал
PDF

Оригинал
PDF UM003601-COR1299 Z89C00 UM0036 z380 Z8 кросс-ассемблер Z893XX Z180 Z89C50
2005 — skpt 1121

Аннотация: SKPT 12 skpt 17 Синтаксис SKPT 11 для записи ассемблерных кодов в инструментах ADSP-210XX SKPT 38 pc 2581 vd ADSP-TS201 SKPT SKPT 17 2/2
Текст: Текст файла недоступен


Оригинал
PDF
2003 — Руководство ассемблера для ADSP-218x ADSP-219x

Аннотация: VisualDSP 3.5 Руководство по ассемблеру и препроцессору ADSP-21990 ADSP-2183 ADSP-2191 ADSP-2195 Пример загрузки 218x ADSP-21991 ADSP-21992 FK50
Текст: Текст файла недоступен


Оригинал
PDF ADSP-218x ADSP-219x Руководство ассемблера для ADSP-218x ADSP-219x Руководство по сборщику и препроцессору VisualDSP 3. 5 ADSP-21990 ADSP-2183 ADSP-2191 ADSP-2195 Пример загрузки 218x ADSP-21991 ADSP-21992 FK50
1995 — моторола 386 процессор

Аннотация: ассемблер g44 motorola
Текст: Файл текста отсутствует


Оригинал
PDF DOS / 386 asm56100.motorola 386 процессор ассемблер g44 моторола
2002 — 4087
lr

Резюме: чувствительность ldr LDR Datasheet ds24 monitor plc projects CODE16 DC24 DC32 DF64
Text: Нет текста в файле


Оригинал
PDF 32-битный lr 4087 чувствительность лдр Лист данных LDR ds24 монитор проекты plc КОД16 DC24 DC32 DF64
1995 — DSP96000

Аннотация: Motorola AR 164 wi 23 d5 motorola CROSS-REFERENCE
Текст: Нет текста в файле


Оригинал
PDF DSP96000 Motorola AR 164 wi 23 d5 Motorola КРОСС-ССЫЛКА

Оригинал
PDF
1997 — ссылка на ассемблер codewarrior

Аннотация: Текст аннотации недоступен
Текст: Текст файла отсутствует


Оригинал
PDF CWMCUS12ZASMREF ссылка на ассемблер codewarrior
2007 — Нет в наличии

Аннотация: Текст аннотации недоступен
Текст: Текст файла отсутствует


Оригинал
PDF

Искусство программирования на языке ассемблера с использованием технологии PIC® (расширенная версия) в Apple Books

Описание издателя

Искусство программирования на языке ассемблера с использованием технологии PIC® полностью охватывает язык ассемблера, используемый при программировании микроконтроллера PIC® (MCU). Используя минимальный набор инструкций, характерный для большинства продуктов PIC®, автор подробно раскрывает нюансы выполнения циклов. Фундаментальные методы проектирования представлены на основе разработки структурированных систем Орра с использованием четырех логических структур управления. Эти управляющие структуры представлены в виде блок-схем, диаграмм Warnier-Orr®, диаграмм состояний, псевдокода и расширенного примера с использованием SysML®. Представлены базовые математические инструкции сложения и вычитания, а также краткое изложение сложных математических процедур, представленных в виде проверенных примечаний по применению утилиты Microchip®.

Приложения предназначены для полноты, особенно для опытных читателей, включая несколько наборов инструкций, наборы символов ASCII, таблицы преобразования десятичного, двоичного и шестнадцатеричного форматов, а также разработку десяти передовых методов. Две таблицы данных (одна полная таблица данных для серии 10F20x и одна частичная таблица данных на серию 16F88x) также представлены в приложениях, чтобы служить в качестве важного справочного материала, позволяя новому встроенному программисту познакомиться с форматом таблиц данных и приобрести навыки, необходимые для оценки таблицы данных продукта для правильного выбора микроконтроллера. семья для любого конкретного проекта.

Искусство программирования на языке ассемблера с использованием технологии PIC® написан для аудитории с широким спектром навыков, начиная от абсолютного новичка и заканчивая встроенным управлением и программистом встроенного C, который не знаком с языком ассемблера.

В этой книге вы познакомитесь со следующими областями:
Символы и терминология, используемые программистами и инженерами в приложениях микроконтроллеров Программирование с использованием языка ассемблера с помощью примеров Знакомство с методами проектирования и разработки Основы математических знаний в шестнадцатеричном формате Ресурсы для сложных математических функций
Подходы к поиску ресурсов
Учит, как начать писать простой код, например.g., PICmicro® 10FXXX и 12FXXX Предлагает уникальные и новаторские подходы к тому, как добавить индивидуальности с помощью усовершенствованных процессоров среднего уровня PICmicro® 16FXXX и 18FXXX среднего уровня Обучает новым знаниям в области программирования и математики, чтобы помочь в формировании навыков. Показывает, как значительно снизить стоимость продукта. за счет достижения 100% контроля Демонстрирует, как добиться оптимизации по сравнению с программированием на C, уменьшить пространство кода, сузить временные циклы, уменьшить размер требуемых микроконтроллеров и снизить общую стоимость продукта

PIC18F.COM — Руководства и образец кода

Шестой июль 2010

Цель учебного пособия : реализовать аналого-цифровое преобразование, как показано в учебном пособии 3 на языке C Прочтите оставшуюся часть этой записи »

размещено в Без рубрики |

16-е Ноябрь 2009

Учебник Цель: Создать и протестировать простую программу на языке C Прочитать оставшуюся часть этой записи »

размещено в 18F4550 C Учебное пособие |

9-е Декабрь 2007

Урок 3, часть 1 Цель: понимание вызовов функций , аналого-цифрового преобразования , прерываний и ШИМ
Прочтите оставшуюся часть этой записи »

размещено в Руководстве по сборке 18F4550 |

Шестой Декабрь 2007

Учебник Цель: Создать и протестировать простую программу сборки Прочитать оставшуюся часть этой записи »

размещено в Руководстве по сборке 18F4550 |

4-й Декабрь 2007

Учебник Цель: Представить и описать установку для разработки

Читать оставшуюся часть записи »

размещено в Руководстве по сборке 18F4550 |

4-й Декабрь 2007

В этом посте я попытаюсь дать краткий обзор микроконтроллера PIC18F4550, его инструкций и их реализации на языке ассемблера. Прочитать остальную часть записи »

размещено в Руководстве по сборке 18F4550 |

4-й Декабрь 2007

Добро пожаловать на PIC18F.com

Когда я первоначально получил образец PIC18F4550 от Microchip, я был взволнован, когда узнал немного о сборке и начал работу над небольшим проектом встроенного управления. К сожалению, в большинстве руководств, которые я нашел, предоставлен код для PIC 16-й серии. Я решил запустить этот сайт, чтобы помочь тем, кто хочет работать с этими замечательными устройствами.

Моя цель — создать несколько обучающих программ, которые становятся все более сложными и которые приведут к крупному проекту (я имею в виду одно, но оно может измениться). Учебники начнутся со сборки и, скорее всего, приведут> к коду C.

Для руководств по сборке мои предположения таковы, что у читателя:

  • Немного интуиции с Windows
  • Некоторое понимание C / C ++ (желательно)
  • Некоторое понимание схем (я постараюсь предоставить внешние ссылки для большинства упомянутых мной новых вещей)
  • Плохое понимание ассемблера (по крайней мере, в начале)

Поскольку большинство основ PIC очень хорошо объяснено в таблице данных PIC, я настоятельно рекомендую просмотреть его. Это можно найти здесь. В частности, в разделе 10 описаны порты ввода-вывода, а в разделе 26.1 — набор команд.

После безуспешной опробования нескольких разработок самодельных программаторов я купил PicKit 2 от Allied Electronics и ОЧЕНЬ доволен им. В отличие от этих самодельных программаторов для последовательного / параллельного порта, это USB-устройство поддерживает программирование, отладку и работу с ноутбуками без каких-либо проблем.

До дальнейшего уведомления я буду работать со следующими объектами:

  • PIC18F4550
  • PicKit 2
  • MPLAB IDE V8.00
  • MPASM V5.14

Я надеюсь выполнить несколько небольших проектов с MPASM, чтобы освоить программирование на ассемблере. Впоследствии я планирую использовать либо компилятор SDCC C, либо компилятор C для студентов, созданный Microchip. Учебники будут сосредоточены на MPASM / PicKit2 с 18F4550, но общие инструкции должны быть применимы для большинства устройств серии 18.