Свежие обсуждения
Микроконтроллеры

Не моргает диодиком PIC16F873

Решил на досуге освоить пики, поскольку имеются халявные микросхемы PIC16F873.

код программы ниже, компилирую в MLAB 8
ни в симуляторе ни на живом пике состояние RB4 и RB5 не меняется. В чем дело - не пойму. Заремил все, кроме команд переключения битиков.
Живой пик вроде тактируется, шьется, но не работает ;(
Прошу больно не пинать ногами за чайниковский вопрос - с пиками дела не имел, все больше с 51-ми и АВРами.
Да, кстати еще - несмотря на то, что пишу в TRISB 0xCF, там (вижу на симуляторе) лежит 0xC0.

;test1
LIST P=16F873
#include "P16F873.INC"
__config _RC_OSC & _WDT_OFF & _DEBUG_OFF & _BODEN_OFF & _WRT_ENABLE_OFF
;
LED1 EQU 4
LED2 EQU 5

Rbank0 Macro
BCF STATUS,RP0 ;банк 0
BCF STATUS,RP1
endm
Rbank1 Macro
BSF STATUS,RP0 ;банк 1
BCF STATUS,RP1
endm
Rbank2 Macro
BCF STATUS,RP0 ;банк 2
BSF STATUS,RP1
endm
Rbank3 Macro
BSF STATUS,RP0 ;банк 3
BSF STATUS,RP1
endm

ORG 0
GOTO INIT
;
INIT
Rbank0
BCF STATUS,IRP ;банк 0
MOVLW b'11001111' ;настройка порта B
Rbank1
MOVWF TRISB^80h
Rbank0
CLRF PORTB ;сброс порта B
GOTO START

START
LOOP
;Rbank2
BSF PORTB,LED1
;Rbank0
;CALL DELAY
BCF PORTB,LED1
BSF PORTB,LED2
;Rbank0
;CALL DELAY
;Rbank2
BCF PORTB,LED2
;Rbank0
;CALL DELAY
GOTO LOOP

;задержка 1000 циклов
DLY0 EQU 127
DLY1 EQU 126
DELAY
MOVLW 250
MOVWF DLY0
DELAY1
NOP
NOP
DECFSZ DLY0,1
GOTO DELAY1
RETURN

END

 

Чёт больно накрутили...
---------------------------------
The configuration bits in the file are Invalid and may cause problems if programmed. Do you want to set them to their default value? Please note that you will need to either rebuild the file or export memory again to correct the file.
Сообщение перед компиляцией. Исправляйте.

LOOP
BSF PORTB,LED1
BCF PORTB,LED1
BSF PORTB,LED2
BCF PORTB,LED2
GOTO LOOP

Вот тут и колбасится прога. Переключая выводы с каждым тактом.

 

Что в этом куске Вы делаете?
....
BSF PORTB,LED1
;Rbank0
;CALL DELAY
BCF PORTB,LED1
BSF PORTB,LED2
;Rbank0
;CALL DELAY
;Rbank2
BCF PORTB,LED2
...
установили 1 и через 1 такт установили 0. Почему паузы закоментировали?

Цикл задержки работает как положенно? Зацикливаний в нем нет?

 

должно работать, только десятичные константы следует записывать с точкой
DLY0 EQU .127
DLY1 EQU .126
DELAY
MOVLW .250

советую пользоваться директивой banksel
banksel TRISB
banksel PORTB
и т. д.

 

У Дона спросите, он спец по этой теме
Распишет с защитным кодом, чтобы мигало даже после ядрёного взрыва

 

Не распишет, он авэ'эрщик

 

В среде mplab 7.60 работает с небольшими изменениями, смотрите в файле.

145113.asm

 

7,52 тоже

 

Спасибо! Нашел ошибку в описании проекта. Там длугой пик был назначен. Меня MPAsm честно предупреждал об этом, но я дурак не прочитал внимательно варнинги. Отдельное спасибо за директиву banksel.
Кстати, интересно мне, какой имбецил придумывал архитектуру и систему команд для пиков? Даже в АВР все проще и логичнее, не говоря уже о всяких 51-х, моторолах, и прочих аналог девайсов... Американец наверное ;)

 

изначально архитектура была 12битной - что наложило определённые ограничения, но вероятно должно было удешевить контроллер(меньше площадь).