Основы программирования микропроцессоров
intel8051

Правила "хорошего тона" при оформлении текста программы:

При написании программы нужно стремиться, чтобы текст был (для читабельности) разбит на колонки:

метка код операнды комментарии (т.к. программное обеспечение 
может не поддерживать русские символы, 
надёжнее писать латиницей)
<m1>:
<m2>:
  -
  -
mov
mov

END
 -
 -
10, #11
11, #12h

 -
; метка 1
; метка 2
; заносим в ячейку 10 число 11
; заносим в ячейку 11 число 12h

; конец программы

END

без этого слова в конце программа ни за что не откомпилируется.

 Комментарии

пишется после символа ';' до конца строки.

Метка

состоит из названия + символ ':' (пишется слитно), например:

metka:			;метка 
. . . . . .
	JZ metka	;Переход на метку 'metka' если аккумулятор равен нулю

Препроцессор

- позволяет выполнять над текстом программы некоторые действия перед тем, как он подвергается трансляции.

EQU - одна из команд препроцессора. EQU присваивает ячейке символическое
имя и позволяет работать в тексте программы с именем переменной.
ПРИМЕР:
	count	EQU 8		; объявляем переменную 'count'
. . . . . . 
	mov	count, #10	; count = 10;
и т.д.

Возможен и такой вариант объявления переменной:
	count	EQU 8		; объявляем переменную 'count'
	count1	EQU count + 1	; объявляем переменную 'count1'
	count2	EQU count1 + 1	; объявляем переменную 'count2'

Иногда удобнее иметь список переменных отдельно от остальных текстов.
Строки, содержащие объявление переменных, можно сохранить в виде
отдельного файла, с произвольным именем, допустим, 'variable.equ'.
Тогда для подключения variable.equ при трансляции, в основной текст
нужно вставить строчку: 
$variable.equ
(Символ '$' должен быть первым символом в строке и пишется слитно с названием
подключаемого файла!!!)

Трансляция текстов программ в код

Трансляцию текстов программ будем осуществлять программами работающими в командном режиме.
Программы сохраняем под именами из 8-ми символов с расширением a51
Программа a8051.exe формирует из файла *.a51 файл объёктного кода *.obj
 Формат командной строки для трансляции файла *.a51:
> a8051   progname.a51   -  по этой команде будет сформирован файл 'progname.o51'
В результате получаем файл progname.o51, содержащий объектный код.
Если набрать
> a8051.exe progname.a51 listing
,
то дополнительно к файлу 'progname.o51'  будет сформирован отчёт (листинг) под именем 'listing.lst', содержащий сведения об ошибках и пр.
Чтобы получить шестнадцатеричный код, необходимый для прошивки памяти контроллера, надо запустить программу-линковщик xlink.exe 
Формат командной строки для линковщика:
> xlink.exe    -f    xlink.xcl
после её выполнения образуется в 16-тиричный hex-файл 'progname.hex'
в файле 'xlink.xcl' указывается  имя файла 'progname' (при этом, если проект состоит из нескольких файлов, то указываются несколько имён, и эти файлы (*.o51) объединяются в 1 файл *.hex)

Содержание файла 'xlink.xcl':

-! ******************************************************************** -!
-! -!
-! link batch file -!
-! ******************************************************************** -!

-! processor type ..................... -!
-c8051
-! segments order ..................... -!
-Z(CODE)RelCODEsegment=60
-! objects loading .................... -!
progname 
-! output file ........................ -!
-o progname
-! map file ........................... -!
-l gen.map
-! cross references ................... -!
-xsm
 

Отладчик

Чтобы визуально проследить происходящие в микроконтроллере процессы используется специальная программа - отладчик. Описание отладчика FD51.EXE с картинками см. здесь.

Примеры очень простых программ:

Программа #1
a1 EQU 10h ;
a2 EQU a1+1 ;
  mov a1, #11h ;
  mov a2, #01h ;
  mov A, a1 ;
  add A, a2 ;
  mov a2, A ;
  sjmp $ ;
  END   ;

Программа #2
  arr equ 0 ;
  summ equ 0 ;
  cntr equ 0 ;
      ;
  mov R0, #arr+0 ;
  mov cntr, #10 ;
  mov summ, #0 ;
lable: mov A, @R0 ;
  jnz n ;
  inc summ ;
n: inc R0   ;
  djnz cntr, lable ;
  END    

Программа #3
Пример использования макроопределения
  Macro %Macro1 ; начало макроопределения
  mov A, \0 ; действие с первым параметром (аргументом макроопеределения)
  add A, \1 ; действие со вторым параметром
  mov sum, A ;
  EndMac   ; конец макроопределения
       
sum EQU 10h ; начало основной программы
  %Macro1 11, 12 ; вызов макроопределения с парамеьтрами #1, #2
  %Macro1 11, 13 ; вызов макроопределения с парамеьтрами #1, #2
  END    

Программа #4
метка код операнды комментарии 

Программа ###





m1:
count

mov
mov
mov 
mov
mov

inc
inc
djnz

sjmp $
END
EQU 8

R0, #80h
R1, #12h
count, #10
A, R1
@R0, A

R0
R1
count, m1
; ob'yavlyaem peremennuyu 'count'

; zanosim v R0 chislo 80h
; zanosim v R1 chislo 80h
; count = 10;
; zanosim v Akkumulyator dannyey iz R1
; zanosim iz Akkumulyatora dannyey v yacheyku,
; adres kotoroy v R0
; R0 = R0 + 1
; R0 = R0 + 1
; count = count - 1; esli cunt <> 0 perexod k m1 


; konetz

 программок пока маловато, но скоро добавим ещё :)

 

Hosted by uCoz