Консультация № 180728
13.11.2010, 20:28
0.00 руб.
14.11.2010, 03:42
0 2 0
Здравствуйте, уважаемые эксперты. Помогите, пожалуйста, написать задачу на Ассемблере для вывода чисел 1,2,3,5 на индикатор микроконтроллера PIC16F84 последовательно с интервалом в полсекунды.
Спасибо!

Обсуждение

давно
Посетитель
7438
7205
14.11.2010, 03:43
общий
У Вас есть описание команд микроконтроллера PIC16F84? Может есть примеры программ?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
14.11.2010, 04:06
общий
Адресаты:
Здравствуйте, Игорь Витальевич!
Могу привести примеры программ. Компилируем мы их на MPLab.
1. Написание программы для реализации совместного зажигания и погасания (мигания) сегмента E на всех четырех семисегментных индикаторах.
Листинг программы

; Регистры общего назначения
STATUS EQU 03h
PORTB EQU 06h
; Управляющие регистры портов ввода-вывода
TRISB EQU 06h ; для порта В
; Биты регистра STATUS
RP0 EQU 05h ; бит выбора страницы
; Биты регистра PORTB
DAT EQU 04h ; бит данных
SYN EQU 05h ; бит синхронизации
; Рабочие регистры
Cnt1 EQU 0ch
Cnt2 EQU 0fh
Cnt3 EQU 1bh
WORK1 EQU 0dh
WORK2 EQU 0eh
W1 EQU 1ah
;
org 00h ; начало исполняемого кода
GOTO START
org 04h ; программа обработки прерываний
retfie ; отсутствует
; Основная программа
START
; Инициализация PORTB
BSF STATUS,RP0 ; выбор банка 1
MOVLW B'11001111' ; настройка порта В
MOVWF TRISB ; установка RB4, RB5 на вывод
BCF STATUS,RP0 ; выбор банка 0
;
BSF PORTB,DAT ; установка битов DAT, SYN
BSF PORTB,SYN ; в регистр PORTB
CALL POGASIT ; вызов подпрограмм
BGIN
CALL ZAZHECH
CALL PAUS
CALL POGASIT
CALL PAUS
GOTO BGIN
;
; Подпрограмма «Пауза»
PAUS
MOVLW D'250' ; занесение 250 регистров
MOVWF WORK1 ; в счетчик WORK1
M01
CLRF WORK2 ; очистка регистра
M02
DECFSZ WORK2,1 ; уменьшить счетчик WORK2, если он
GOTO M02 ; не равен 0, то вернуться на метку M02
DECFSZ WORK1,1 ; уменьшить счетчик WORK, если он
GOTO M01 ; не равен 0, то вернуться на метку M01
RETURN ; возврат из подпрограммы
;
; Подпрограмма «Зажечь»
ZAZHECH
MOVLW D'4' ; занесение 4 регистров
MOVWF Cnt1 ; в счетчик Cnt1
M03
CALL ZAZHECH1 ; вызов подпрограммы «Зажечь 1»
DECFSZ Cnt1,1 ; уменьшить счетчик Cnt1, если он
GOTO M03 ; не равен 0, то вернуться на метку M03
RETURN ; возврат из подпрограммы
;
; Подпрограмма «Зажечь 1»
ZAZHECH1
MOVLW B'11110111' ; занесение в W1 кода
MOVWF W1 ;
MOVLW D'8' ; занесение 8 регистров
MOVWF Cnt2 ; в счетчик Cnt2
M04
BCF PORTB,DAT ; установка в 0 RB4
BTFSC W1,0 ; если в регистре W1 0, то пропускаем
BSF PORTB,DAT ; команду, если нет, то установка RB4 в 1
M05
; синхронизация PORTB
BCF PORTB,SYN
BSF PORTB,SYN
RRF W1,1 ; сдвиг вправо, через перенос
DECFSZ Cnt2,1 ; пропустить команду, если в Cnt2 0
GOTO M04 ; переход на метку M04
RETURN ; возврат из подпрограммы
;
; Подпрограмма «Погасить»
POGASIT
MOVLW D'32' ; занесение 32 регистров
MOVWF Cnt3 ; в счетчик Cnt3
M00
; синхронизация PORTB
BCF PORTB,SYN
BSF PORTB,SYN
DECFSZ Cnt3,1 ; пропустить команду, если в Cnt3 0
GOTO M00 ; переход на метку M04
RETURN ; возврат из подпрограммы
END ; конец программы

--------------------------------------------------------------------------------------------------------------
2. "БЕГУНОК": ПОСЛЕДОВАТЕЛЬНО ЗАГОРАЮТСЯ ВСЕ СЕГМЕНТЫ

; РЕГИСТРЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ
STATUS EQU 03h
PORTB EQU 06h
TRISB EQU 06h
; БИТЫ РЕГИСТРА STATUS
RP0 EQU 05h
;БИТЫ РЕГИСТРА PORTB
DAT EQU 04h
SYN EQU 05h
; РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ
CNT1 EQU 0Ch
CNT2 EQU 0Dh
CNT3 EQU 0Eh
; НАЧАЛО ПРОГРАММЫ
ORG 00h
GOTO START
ORG 04h
RETFIE
; САМА ПРОГРАММА
START
BSF STATUS,RP0 ;ПЕРЕВОД В 1 БАНК
MOVLW B'11001111';УСТАНОВКА RP4, RP5 В 0
MOVWF TRISB
BCF STATUS,RP0 ;ПЕРЕХОД ОБРАТНО В 0 БАНК
BSF PORTB, DAT ;ОЧИСТКА
BSF PORTB, SYN
MOVLW D'32' ; ПЕРЕСЫЛАЕМ В СЧЕТЧИК '32'
MOVWF CNT1
M00 ; ОСНОВНОЙ ЦИКЛ
BCF PORTB,SYN
BSF PORTB,SYN
DECFSZ CNT1,1
GOTO M00
M01
BCF PORTB,DAT
BCF PORTB,SYN
BSF PORTB,SYN
BSF PORTB,DAT
MOVLW D'32' ; ПЕРЕСЫЛАЕМ В СЧЕТЧИК '32'
MOVWF CNT1
M02
CALL PAUSE
BCF PORTB,SYN
BSF PORTB,SYN
DECFSZ CNT1,1
GOTO M02
GOTO M01
;ПОДПРОГРАММА ПАУЗЫ
PAUSE MOVLW D'150'
MOVWF CNT2
MP00
CLRF CNT3
MP01
DECFSZ CNT3,1
GOTO MP01
DECFSZ CNT2,1
GOTO MP00
RETURN

END

Форма ответа