Скачиваний:
84
Добавлен:
13.03.2016
Размер:
50.69 Кб
Скачать

Лекция 13

6.3. Программирование на ассемблере 8052

Язык ассемблера - это язык, в котором каждое высказывание соответствует ровно одной машинной команде. Иными словами, существует взаимно однозначное соответствие между машинными командами и операторами в программе на ассемблере. Система команд в лекции 12 была представлена на языке ассемблера.

Язык ассемблера позволяет использовать символические имена для представления адресных констант и констант данных вместо чисел.

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

Программа на ассемблере может работать только с данным типом ЦП, а программа, написанная на языке высокого уровня, потенциально может работать на разных типах ЦП.

Ассемблер довольно труден, время написания программ гораздо больше, много времени занимает отладка.

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

Рассмотрим текст на ассемблере МК 8052. “ ; ” является разделителям для комментария.

$PAGEWIDTH(132); указание компилятору о ширине ;ассемблерного текста

$OBJECT; указание компилятору о создании

;объектного файла

$NOSYMBOLS; указание компилятору о том, что

;не надо различать прописные и строчные буквы

;Далее следует объявления адресных констант

;регистров специальных функций одного из клонов

;МК DS520, используемого в лабораторных работах

;--------DS520------------

;Reg. equate table

;Директива EQU определяет новый символ, равный

;данному выражению

P0 EQU 80H; P0 – символический

;адрес порта 0. При компиляции будет заменен на 80Н.

SP EQU 81H

DPL EQU 82H

DPH EQU 83H

DPL1 EQU 84H

DPH1 EQU 85H

DPS EQU 86H

PCON EQU 87H

TCON EQU 88H

TMOD EQU 89H

TL0 EQU 8AH

TL1 EQU 8BH

TH0 EQU 8CH

TH1 EQU 8DH

CKCON EQU 8EH

P1 EQU 90H

EXIF EQU 91H

SCON EQU 98H

SBUF EQU 99H

P2 EQU 0A0H

IE EQU 0A8H

SADDR0 EQU 0A9H

SADDR1 EQU 0AAH

P3 EQU 0B0H

IP EQU 0B8H

SADEN0 EQU 0B9H

SADEN1 EQU 0BAH

SCON1 EQU 0C0H

SBUF1 EQU 0C1H

ROMSIZE EQU 0C2H

PMR EQU 0C4H

STATUS EQU 0C5H

TA EQU 0C7H

T2CON EQU 0C8H

T2MOD EQU 0C9H

RCAP2L EQU 0CAH

RCAP2H EQU 0CBH

TL2 EQU 0CCH

TH2 EQU 0CDH

PSW EQU 0D0H

WDCON EQU 0D8H

ACC EQU 0E0H

EIE EQU 0E8H

B EQU 0F0H

EIP EQU 0F8H

;Директива BIT определяет новый символ для

;битовой области равный данному выражению

;*** Bit equate table

IT0 BIT 88H

IE0 BIT 89H

IT1 BIT 8AH

IE1 BIT 8BH

TR0 BIT 8CH

TF0 BIT 8DH

TR1 BIT 8EH

TF1 BIT 8FH

P1_0 BIT 90H

P1_1 BIT 91H

P1_2 BIT 92H

P1_3 BIT 93H

P1_4 BIT 94H

P1_5 BIT 95H

P1_6 BIT 96H

P1_7 BIT 97H

RI BIT 98H

TI BIT 99H

RB8 BIT 9AH

TB8 BIT 9BH

REN BIT 9CH

SM2 BIT 9DH

SM1 BIT 9EH

SM0 BIT 9FH

EX0 BIT 0A8H

ET0 BIT 0A9H

EX1 BIT 0AAH

ET1 BIT 0ABH

ES BIT 0ACH

ET2 BIT 0ADH

ES1 BIT 0AEH

EA BIT 0AFH

P3_0 BIT 0B0H

P3_1 BIT 0B1H

P3_2 BIT 0B2H

P3_3 BIT 0B3H

P3_4 BIT 0B4H

P3_5 BIT 0B5H

P3_6 BIT 0B6H

P3_7 BIT 0B7H

PX0 BIT 0B8H

PT0 BIT 0B9H

PX1 BIT 0BAH

PT1 BIT 0BBH

PS BIT 0BCH

PT2 BIT 0BDH

PS1 BIT 0BEH

RI_1 BIT 0C0H

TI_1 BIT 0C1H

RB8_1 BIT 0C2H

TB8_1 BIT 0C3H

REN_1 BIT 0C4H

SM2_1 BIT 0C5H

SM1_1 BIT 0C6H

SM0_1 BIT 0C7H

C_RL2 BIT 0C8H

C_T2 BIT 0C9H

TR2 BIT 0CAH

EXEN2 BIT 0CBH

TCLK BIT 0CCH

RCLK BIT 0CDH

EXF2 BIT 0CEH

TF2 BIT 0CFH

P BIT 0D0H

FL BIT 0D1H

OV BIT 0D2H

RS0 BIT 0D3H

RS1 BIT 0D4H

F0 BIT 0D5H

AC BIT 0D6H

CY BIT 0D7H

RWT BIT 0D8H

EWT BIT 0D9H

WTRF BIT 0DAH

WDIF BIT 0DBH

PFI BIT 0DCH

EPFI BIT 0DDH

POR BIT 0DEH

SMOD_1 BIT 0DFH

EX2 BIT 0E8H

EX3 BIT 0E9H

EX4 BIT 0EAH

EX5 BIT 0EBH

EWDI BIT 0ECH

PX2 BIT 0F8H

PX3 BIT 0F9H

PX4 BIT 0FAH

PX5 BIT 0FBH

PWDI BIT 0FCH

;Далее могут следовать объявления символических

;имен пользователя.

DATA1 EQU 48

DATA2 EQU 120

; . . .

;Директива ORG n указывает компилятору, что следующую команду

;необходимо поместит по адресу n.

ORG 0

JMP BEGIN; BEGIN –адресная константа (метка)

;местоположения следующей команды.

ORG 0003H

JMP ISR_ IT0; переход на подпрограмму обслуживания

;прерывания от внешнего прерывания

. . .

ORG 100

BEGIN: MOV SP,#200; перемещение вершины стека в ячейку 200

; . . .

MOV R0,#DATA1

MOV R1,#DATA2

MOV B,#20

CALL COPYB; копируем 20 байт, начиная с адреса DATA1 в

;область, начиная с ячейки DATA2

; . . .

COPYB:MOV A,@R0; эта подпрограмма копирует данные

MOV @R1,A; из области, на которую указывает R0,

INC R0; в область, на которую указывает R1,

INC R1; через B в подпрограмму передается

DJNZ B, COPYB; количество копируемых байт

RET

; . . .

; директива DB (DW) выделяет память для одного или нескольких байт

;(слов) и помещает в них указанные значения

TXT: DB 0,1,2,3

. . .

ISR_ IT0: PUSH ACC

. . .

POP ACC

RETI

. . .

END; директива конца программы

Соседние файлы в папке ВстроенныеСистемы