Микроконтроллеры | не подключается макрос к pic17c756a в MPASMе |
|
---|---|---|
Сколько не мучался, какие только директивы не подключал, все равно не замечает макрос, точнее замечает, но ничего не выполнив , идет далее. листинг. list P=17c756, x=ON TEST EQU H'50' PROBA MACRO VAL1 CLRF VAL,f ORG 0000h ORG 0030h RESET: MOVLW H'01' PROBA TEST GOTO RESET END |
|
|
Попробуйте так: PROBA MACRO VAL1 Этот макрос предписывает контроллеру очистить тот регистр, который будет указан программистом вместо VAL1 при вызове макроса. |
|
|
Спасибо, огромное, все идет! |
|
|
Ребят, еще один вопрос. Листинг. list P=17c756, x=ON TEST EQU H'50' ORG 0000h ORG 0030h RESET: CLRF VAL1,f IF !(VAL1<=0x01) INCF VAL3,f ; Почему-то он сюда попадает GOTO RESET END |
|
|
Еще в тему: если писать if, потом еще if, еще if , а потом else, то к какому ifу он будет относиться и хватит ли одного endifа? |
|
|
Макрос выполняется (разворачивается) во время компиляции. Он понятия не имеет, какое значение занесено в какой регистр mirn: IF !(VAL1<=0x01) INCF VAL3,f ; Почему-то он сюда попадает |
|
|
, понял, спасибо!!! А можно как - нибудь "изменить", чтобы все-таки работало выражение? |
|
|
Как сравнивать значения регистров? например так: IFLT macro f, k ;Перейти к метке k, если значение в регистре f меньше чем значение в аккумуляторе W subwf f, W btfss STATUS, C goto k endm IFGE macro f, k ;Перейти к метке k, если значение в регистре f больше либо равно W subwf f, W btfsc STATUS, C goto k endm Ну и погнали: movlw #0 IFGE VAL1, skip ; идём на skip, если VAL1 > 0 INCF VAL3,F skip: movlw #8 IFGE VAL3, skip2 ; идём на skip, если VAL3 > 8 И так далее... |
|
|
Спасибо огромное!!! |
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |