Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 13:04   #1
balik
Новичок
Джуниор
 
Регистрация: 21.09.2010
Сообщений: 2
По умолчанию Тестирование имс

Здравствуйте. Я студент и у меня контрольная по процессорам. Задача - тестирование имс, у меня это дешифратор. Но в обще-то это всё лишнее, я просто хочу уточнить вопрос касающийся синтаксиса языка. Какой должна быть команда CJNZ P2.(R2), EXIT, чтобы программа взяла значение висящее на входе порта P2.R2 и обработала его?
Полный текст программы:
Код:
; TEST65 – подпрограмма тестирования ИМС К155ИД11 с номером N=65
; Выходной параметр: флаг F0 – при F0 = 1 результат тестирования 
; положительный (НОРМА), при F0 = 0 – отрицательный (БРАК)



TEST65:   CLR       P3.2                     ; P3.2 < -0, подать питание на ИМС 
                  CALL    DELAY            ; Вызов подпрограммы задержки
                  MOV R0, #-01H
CLR P1.6
SETB P1.7

LOOP:      INC R0
CJE R0, #08H, NEXT1
CJE R0, #09H, NEXT2
MOV 20H, R0

REPEAT: INC 20H      ; вспомогательная подпрограмма – заполнение единицами
SETB P2.#20H
CJNE #20H, #08H, REPEAT


MOV R1, R0
DEC R1
MOV R2, #-01H    	; загрузить счётчик
TEST:       INC R2
CJE R2, #R0, CONDITION
INC R1
LR R1	; сдвиг кода влево для пропуска первого входа
MOV P1, R1
CJNZ P1.5, EXIT
CJNZ P2.#R2, TEST
CJZ P2.#R2 EXIT

CONDITION:   DEC R2
NOLIK:  INC R2
CJE R2, #08H, LOOP
CJNZ P2.#R2, EXIT
CJZ P2.#R2, NOLIK

NEXT1:     SETB P1.6
CJZ P1.5, EXIT
MOV R2, #0
MANYA1:     CJE R2, #08H, LOOP
CJNZ P2.#R2, EXIT
INC R2
CJNE R2, #08H, MANYA1

NEXT2:    CLR P1.7
CJNZ P1.5, EXIT
MOV R2, #0
MANYA2:     CJE R2, #08H, OKI
CJZ P2.#R2, EXIT
INC R2
CJNE R2, #08H, MANYA2
OKI:            SETB F0 			; Установить флаг F0 < -1 (НОРМА)
SETB P3.2 			 ; Отключить питание ИМС
RET				; Возврат из подпрограммы


EXIT:          CLR F0                          ; Сбросить флаг F0 < -0 (БРАК)
SETB    P3.2                  ; Отключить питание ИМС
RET                                ; Возврат 
END                               ; Конец текста программы

Последний раз редактировалось balik; 21.09.2010 в 20:14.
balik вне форума Ответить с цитированием
Старый 24.09.2010, 21:55   #2
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Погугли и посмотри документацию по аппаратуре.
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.
BVOG вне форума Ответить с цитированием
Старый 29.09.2010, 03:20   #3
xrnd
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 18
Радость

Какой процессор ты программируешь?
xrnd вне форума Ответить с цитированием
Старый 30.09.2010, 12:29   #4
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

процессор КР580?
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 03.10.2010, 01:16   #5
balik
Новичок
Джуниор
 
Регистрация: 21.09.2010
Сообщений: 2
Смущение

спасибо всем за отзывы. Пожалуй, теперь ваша помощь не требуется... Программа, естественно учебная, написана на ассемблере для семейства МК-51. Используется процессор К1816ВЕ751. Тестируемая ИМС К155ИД11 (дешифратор для линейного заолнения светодиодной шкалы). Предыдущий листинг программы был приведен с грубыми ошибками - поэтому программу переписал, можно сказать, заново. Слишком вольно отнесся к языку ассемблера, а у микроконтроллеров МК-51 кроме прочего ограниченный список команд.

Код:
; TEST65 – подпрограмма тестирования ИМС К155ИД11 с номером N=65
; Выходной параметр: флаг F0 – при F0 = 1 результат тестирования 
; положительный (НОРМА), при F0 = 0 – отрицательный (БРАК)

TEST65:   CLR       P3.2                  ; P3.2 < -0, подать питание на ИМС 
                  CALL    DELAY            ; вызов подпрограммы задержки
                  MOV R0, #-01H	     ; начальное значение входного кода
MOV 20H, #0H        ; переслать 0 в ячейку ПД 20Н

CLR P1.6		; установка нормального
SETB P1.7		; режима работы

LOOP:      INC R0			; инкремент входного кода
MOV P1, R0		; вывести код в порт P1 (подать на входы ИМС)
     MOV A, R0		; переслать (R0) в аккумулятор
CLR C			; сбросить флаг переноса С
SUBB A, #08H 	; переслать в аккумулятор (А)-8
JZ NEXT1		; переход к подпрограмме NEXT1, если (А)=0
DEC A			; декремент аккумулятора
     JZ NEXT2		; переход к подпрограмме NEXT2, если (А)=0
MOV A, P1.5		; переслать в аккумулятор значение вывода P1.5
JNZ EXIT		; выход, если (А)≠0
     MOV A, R0		; переслать в аккумулятор (R0)
 CLR C			; сбросить флаг переноса С
SUBB A, #07H	; переслать в аккумулятор (А)-7
CPL A			; инвертировать значение аккумулятора А
MOV 21H, A		; переслать (А) в ячейку ПД 21Н
MOV R1, #0H		; начальное значение счётчика сдвига
MOV R2, #01H	; переслать в регистр R2 значение аккумулятора
JZ TEST			; переход к подпрограмме TEST, если (A)=0

SLIDE:	MOV A, R2		; переслать в аккумулятор значение регистра R2
SETB C			; установить 1 во флаге переноса С
RLC A			; сдвиг аккумулятора влево
MOV R2, A		; переслать в регистр R2 значение аккумулятора
INC R1			; инкремент счётчика
MOV A, R1		; переслать в аккумулятор значение регистра R1
CJNE A, 21H, SLIDE	; цикл SLIDE, если (A)≠(21H)

TEST:	MOV A, 20H		; переслать в аккумулятор, значение (20Н)
ADD A, R2		; переслать в аккумулятор, значение (20Н)+(R2)
MOV 20H, A		; переслать (А) в ячейку ПД 20Н
MOV A, P2		; переслать в аккумулятор код на выходе ИМС
CJNE A, 20H, EXIT	; выход, если (А)≠(20Н)
CALL LOOP		; цикл LOOP


NEXT1:    SETB P1.6		; установить 1 на выходе Р1.6
MOV A, P1.5		; переслать в аккумулятор значение выхода Р1.5
JZ EXIT			; выход, если (A)=0
MOV A, P2	; переслать в аккумулятор (А) значение на выходе ИМС
JNZ EXIT		; выход, если (A)≠0
CALL  LOOP		; цикл LOOP

NEXT2:    CLR P1.7		; установить 1 на выходе порта Р1.7
MOV A, P1.5		; переслать в аккумулятор значение вывода P1.5
JNZ EXIT		; выход, если (A)≠0
MOV A, P2	; переслать в аккумулятор (А) значение на выходе ИМС
CJNE A, #0FFH, EXIT	; выход, если (А)≠0FFH

     SETB F0 			; установить флаг F0 < -1 (НОРМА)
SETB P3.2 			 ; отключить питание ИМС
RET				; возврат из подпрограммы

EXIT:          CLR F0                          ; сбросить флаг F0 < -0 (БРАК)
SETB    P3.2                  ; отключить питание ИМС
RET                                ; возврат 
END                               ; конец текста программы

Последний раз редактировалось balik; 03.10.2010 в 01:45.
balik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестирование на Си AlexeyGulin Фриланс 3 21.05.2010 10:59
Тестирование Panik666 Фриланс 8 26.01.2010 21:54
Программирование ИМС Lutcifer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.03.2007 14:22