MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Не подскажете о EQU?

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Не подскажете о EQU?
Автор: G_vlad ()
Дата:   11/02/2005 01:30

Ни где не нашел описание команды EQU для определения константы.
Как она определяется?
Мне понятно, с начало название константы, потом команда EQU ,а дальше....
Что означает:
tempC EQU 0x11
tempD EQU 0xCH
tempT EQU 0x0e
count EQU 1

У меня первые шаги в написании программ, уделите немного Вашего драгоценного
времени.


 
 Re: Не подскажете о EQU?
Автор: Rish ()
Дата:   11/02/2005 01:52



http://pic16f84.narod.ru/nach.htm

С уважением, Валерий.



 
 Re: Не подскажете о EQU?
Автор: Гампер ()
Дата:   11/02/2005 01:53

Я тоже начинаю. Завтра с работы могу переслать на Ваш адрес все что я наковырял в сети для
начинающих.
gamper@maxnet.ru


 
 Re: Не подскажете о EQU?
Автор: G_vlad ()
Дата:   11/02/2005 06:09

Большое спасибо!


 
 Re: Не подскажете о EQU?
Автор: G_vlad ()
Дата:   12/02/2005 21:14

Большое спасибо Валерий.
К сожалению у меня остались некоторые не разрешенные вопросы.
Понятно, что EQU присваивает символьным именам определенные значения и в случае
шестнадцатеричного значения определяет адресацию регистра.
TMR0 имеет адрес 01h , то при выполнении команды
TTT EQU 01h имени TTT адресуется регистр по адресу 01h
В связи с этим, при выполнении команды
CLRF TTT
значение TMR0 так же будет очищено, потому, что регистр по адресу 01h общий?

При выполнении команды

STATUS EQU 3
PORTA EQU 5
PORTB EQU 6

Я так понимаю происходит побитное определение символного имени или здесь сокрыт
другой смысл вышеперечисленных команд?

Обьясните пожалюйста!


 
 Re: Не подскажете о EQU?
Автор: Rish ()
Дата:   12/02/2005 22:38

EQU - это не команда, а деректива ассемблера, советую скачать:
Руководство пользователя MPASM
http://www.microchip.ru/files/d-sheets-rus/mpasm.pdf

ТТТ equ 01H

При написании программы облегчает восприятие, можно написать:

CLRF 01h
а, можно:
CLRF TTT
Во втором случае, ассемблер при компиляции подставит вместо ТТТ - 01Н.
А так как, по адресу 01Н находится регистр TMR0, он и будет очищен.
В МПЛАБЕ есть файлы с расширением xxx.INC, на каждый контроллер, например
P16F84а.INC
там обозначены все регистры и т.д.
добавляется этот файл дерективой

include "p16f84а.inc"
гляньте все станет ясно.

>STATUS EQU 3 тоже самое что и запись 03Н - адрес регистра, работать будет но не
красиво.
>PORTA EQU 5
>PORTB EQU 6
Так же, и биты в любом регистре можно обозначить.
Удачи!

С уважением, Валерий.


Отправка отредактированного (12/02/2005 23:29)


 
 Символические константы и
Автор: Bill ()
Дата:   12/02/2005 22:42

для чего они нужны.
В программах константы используются очень широко. Но зачастую бывает так, что одна и та же константа
может иметь в разных фрагментах совершенно разный логический смысл.
Я могу написать
	bcf	PORTA, 3		; Если комментария другого нет, смысл команды неясен

Попробуем прояснить
GREEN_LED	equ	3		; Зеленый светодиод подключается к 3-му разряду порта
RED_LED	equ	4		; Красный светодиод - к 4-му разряду
........
	bcf	PORTA, GREEN_LED	; Включить зеленый светодиод (хотя смысл ясен и без комментария)
	bsf	PORTA, RED_LED		; и выключить красный.

Вроде все просто и понятно, но возникает другая проблема. Допустим Вы хотите изменить номер порта, к
которому подключаются светодиоды. Например, это будет PORTB. Для этого потребуется изменить всего
лишь одну букву в названии порта в двух строчках. А если программа большая и команд обращения к
порту очень много? Тогда потребуется менять одну букву во многих частях программы. Чтобы этого не
делать просто добавим еще одну константу:
GREEN_LED	equ	3	            ; Зеленый светодиод подключается к 3-му разряду
RED_LED	equ	4		; и красный светодиод - к 4-му разряду
LED_PORT	equ	PORTA	; порта A 
........
	bcf	LED_PORT, GREEN_LED	; Включить зеленый светодиод
	bsf	LED_PORT, RED_LED	; и выключить красный.

Теперь, при смене номера порта достаточно изменить одну букву ТОЛЬКО В ОДНОЙ строчке программы (там,
где определяется символическое значение номера порта). Это позволяет сэкономить массу времени и
избавить программиста от лишних ошибок.


 
 Re: Символические константы и
Автор: Dmitry ()
Дата:   12/02/2005 23:09

описано очень доходчиво. но я бы предложил молодым коллегам свой вариант:

#define RED_LED PORTB, 5
#define GREN_LED PORTC, 0

а в программе пишем

bcf GREN_LED
bsf RED_LED

достоинства: любые биты любых портов. при модернизации программы легко перемещать биты не только
внутри одного порта, но из порта в порт; текст программы короче.


 
 Здорово !, как в книжках (+)
Автор: Petr_ ()
Дата:   12/02/2005 23:20

Ясность изложения мысли говорит о ясности мышления.

'С' правда лучше.


 
 Я тоже так делал, но это другая история.
Автор: Bill ()
Дата:   13/02/2005 00:03

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


 
 Маленькие примеры.
Автор: Bill ()
Дата:   13/02/2005 00:18

Я взял их из старого проекта "as is".
;
; Beep signal port and bit definitions
;
#define	Beep_BIT	PORTD,RD3
;
; IIC control port and bit definitions
;
SCL		equ	SCLB	; Clock line
SDA		equ	SDAB	; Data line
I2C_PORT	equ	PORTD	; Data port
I2C_TRIS	equ	TRISD	; Control port




Отправка отредактированного (13/02/2005 00:20)


 
 А еще можно
Автор: back ()
Дата:   13/02/2005 17:29

#define LED PORTB,5
#define on bcf
#define off bsf



on LED
off LED

Но это уже перебор :))


 
 Re: Символические константы и
Автор: G_vlad ()
Дата:   14/02/2005 02:50

Всем, Большое человеческое СПАСИБО.


 
 Re: Символические константы и
Автор: maagalex ()
Дата:   14/02/2005 21:11

А можно попутно вопрос?..-как вставить в програму например 12 NOPов..т е как
сгенерировать нужное
количетво одинаковых команд?..а то распечатываю текст -пара листов бумаги уходит на НОПы



Отправка отредактированного (14/02/2005 21:25)


 
 Ну, наверное так
Автор: Bill ()
Дата:   14/02/2005 21:25

i set 0
     while i < 12
         nop
i set i + 1
     endw



 
 Re: Или так:
Автор: Wowan ()
Дата:   14/02/2005 21:31


fill (NOP), .100 ; 100 штук


 
 Re: Не подскажете о EQU?
Автор: KYV ()
Дата:   16/02/2005 18:50

Кстати вместо tempC EQU 0x11
можно написать tempC = 0x11
Зачем лишние буквы.

Я знаю, что ничего не знаю.
Сократ.


 
 Re: Или так:
Автор: maagalex ()
Дата:   09/03/2005 14:22

Wowan писал(а):

>
> fill (NOP), .100 ; 100 штук
а как написать
BCF XXXX,Y
BTFSC XXXX,YYYY
BCF XXXX,Y
BTFSC XXXX,YYYY
BCF XXXX,Y
BTFSC XXXX,YYYY
........
(в смысле две команды 100 раз)?..



Отправка отредактированного (09/03/2005 14:25)


 
 Ну например так:
Автор: CMantio ()
Дата:   09/03/2005 14:54

VARIABLE	i=D'100'
WHILE	i
	BTFSC	STATUS,Z
	BCF	STATUS,Z
i--
ENDW