Материалы сайта
Это интересно
Стробоскопический аналого-цифровой преобразователь
MOV DX, ACPFLAG ; Производим установку MOV AL, 1 ; маски прерывания OUT DX, AL STI ; Разрешаем прерывание ASSUME DS: DATASG MOV DX, ACPREAD ; Производим чтение IN DX, AL ; случайных данных MOV DX, ACPSTRT ; Начальный запуск OUT DX, AL ; АЦП CHK: MOV AL, ENDFLG ; Проверка окончания обмена JZ CHK MOV ENDFLG, 0 ; Сброс флага окончания обмена ; Задается условие проверки окончания процесса. ; Если процесс продолжается, то переход к метке AGAIN, ; В противном случае на ENDPROG AGAIN: MOV DX, ACPSTRT ; Запуск АЦП OUT DX, AL JMP CHK ; И переход к следующему циклу ENDPROG: ASSUME DS: INTTAB ; Восстановление исходных MOV AX, WORD PTR KBSAVE ; параметров в таблице MOV WORD PTR KBADDR, AX ; векторов прерываний MOV AX, WORD PTR KBSAVE + 2 MOV WORD PTR KBADDR + 2, AX POP DS ; Восстановление сегмента данных CSAEG ENDS END BEGIN ; Окончание программы ; Подпрограмма обработки прерывания CALC PROC NEAR PUSH AX ; Сохраняем регистры PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH DS PUSH ES PUSHF MOV DX, ACPREAD ; Производим чтение из АЦП IN DX, AL PUSH AX ; Осуществляем передачу данных ; через стек для последующей ; обработки CALL EXECUTE ; Вызов подпрограммы обработки POP AX ; Получение данных из стека MOV DX, ACPWRITE ; Запись в модуль OUT DX, AX MOV ENDFLG, 0FFH ; Вскидывание флажка POPF ; Восстановление регистров POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX IRET ; Выход из прерывания CALC ENDP Пример подпрограммы обмена с неготовностью. TITLE CTRNAM (EXE) STCKSG SEGMENT PARA ‘Stack’ ; Инициализация сегмента стека DW 32 DUP (?) STCKSG ENDS ;---------------------------------------------------- DATASG SEGMENT PARA ‘Data’ ; Инициализация сегмента данных ACPSTRT EQU 14300H ; Адрес запуска АЦП ACPREAD EQU 14301H ; Адрес чтения из модуля ACPWRITЕ EQU 14302H ; Адрес записи в модуль ACPFLAG EQU 14303H ; Адрес маски DATASG ENDS ;---------------------------------------------------- CODESG SEGMENT PARA ‘Code’ BEGIN PROC FAR ASSUME CS:CODESG, DS:DATASG, SS:STCKSG, ES:DATASC PUSH DS SUB AX, AX ; Проводим PUSH AX ; начальную MOV AX, DATASC ; инициализацию MOV DS, AX ; сегментов MOV ES, AX MOV DX, ACPFLAG ; Производим установку MOV AL, 0 ; маски прерывания OUT DX, AL MOV DX, ACPREAD ; Производим чтение IN DX, AL ; случайных данных STRT: MOV DX, ACPSTRT ; Запуск OUT DX, AL ; АЦП MOV DX, ACPFLAG ; Производим чтение CHK: IN DX, AL ; готовности AND AL, 10000000B ; Накладываем маску JZ CHK ; Готово к обмену? PUSH AX ; Осуществляем передачу данных ; через стек для последующей ; обработки CALL EXECUTE ; Вызов подпрограммы обработки POP AX ; Получение данных из стека MOV DX, ACPWRITE ; Запись в модуль OUT DX, AX ; Задается условие проверки окончания процесса. ; Если процесс продолжается, то переход к метке AGAIN, ; В противном случае на ENDPROG AGAIN: JMP STRT ; Переход на следующий цикл ENDPROG: POP DS CSEG ENDS END BEGIN ----------------------- Лист Изм Лист № докум. Подп Дата