Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.6.2013
Репутация: нет Всего: нет
|
Ребят подскажите что к чему возможно ошибка из-за переполнения битов. У меня почему то не получается её исправить. Заранее благодарен. Код |
D1 BIT P1.0; Обозначение битов портов D2 BIT P1.4 D3 BIT P1.7 D4 BIT P3.4
ORG 0003H; Адрес вектора прерываний INT0 JMP START; Переход на начало выполнения программы JMP INTERAPTION; Переход на метку для работы с прерыванием
START: MOV P2,#00H; Обнуление порта Р2, выключение светодиодов VD0-VD7 MOV P3,#04H; В порте Р3.2 находится единица MOV TMOD,#01010001B; Настройка таймеров-счетчиков (т/с0-таймер, т/с1-счетчик) MOV TCON,#00000100B; Определение вида прерывания (по переходу из 1 в 0) MOV IE,#00000001B; Разрешение прерывания INT0 SETB EA; Разрешение всех прерываний
OSN_PROGRAMMA: ; Загораются нечетные светодиоды M1: MOV A,#0AAH; Включено 4 светодиода нечетных MOV R1,#02H; Nechet_svet: MOV P2,A; MOV R2,A; SETB TR0; Включение счетчика WAIT_M_1: MOV A,TL0;
PR_D1: JNB D1,D_1; Если замкнут первый датчик переход на подпрограмму PR_D2: JNB D2,D_2; Если замкнут второй датчик переход на подпрограмму PR_D3: JNB D3,D_3; Если замкнут третий датчик переход на подпрограмму PR_D4: JNB D4,D_4
CLR TR0; MOV TL0,#00H; MOV A,R2; XRL A,#0FFH;
DJNZ R1, Nechet_svet
CJNE A,#03H,WAIT_M_1;
;Подпрограмма обработки прерывания INTERAPTION: PUSH ACC; запись в стек А PUSH 01H; запись в стек R1 PUSH P2; запись в стек P2 PUSH TL0; запись в стек TL0 MOV P2, #00H; Очистка порта P2 MOV TL0,#00H; Очистка TL0 CLR TR0; выключение счетчика
SETB TR0; включение счетчика POP TL0; чтение из сетка TL0 POP P2; чтение из стека P2 POP 01H; чтение из стека R1 POP ACC; чтение из стека А RETI; выход из прерывания
JMP OSN_PROGRAMMA
;Датчик D1 замкнут, отсчет 100 импульсов D_1: ;Включение светодиодов первого и второго MOV TL0,#00H; Очистка TL0 S_1: MOV P2,#01H; включаем 0 светодиод MOV P2,#02H; включаем 1 светодиод MOV A, TL0 CJNE A,#1EH,S_1; Ждем до 30 импульса ;Включение светодиодов 5,6 S_2: MOV P2,#10H; включаем 4 светодиод MOV P2,#20H; включаем 5 светодиод MOV A, TL0 CJNE A,#46H,S_2; Ждем до 70 импульса ;Включение светодиодов 6,7 S_3: MOV P2,#40H; включаем 6 светодиод MOV P2,#80H; включаем 7 светодиод MOV A, TL0 CJNE A,#64H,S_3; Ждем до 100 импульса JMP PR_D1
;Попеременный огонь третьего и четвертого светодиода на 2 импульс D_2: OGON: MOV P2,#04H; ВКЛЮЧЕН 3 СВЕТОДИОД MOV R1,#02H MOV P2,#08H; ВКЛЮЧЕН 4 СВЕТОДИОД MOV R1,#02H SETB TR0; включение счетчика WAIT_OG: MOV A, TL0 CJNE A,#02H,WAIT_OG; ждем 2 импульс CLR TR0; выключение счетчика MOV TL0,#00H; Очистка TL0 MOV A,R2 DJNZ R1,OGON; JMP PR_D2
; Горят все светодиоды D_3: MOV P2,#00H; Включен ПЕРВЫЙ светодиод MOV R1,#0AH SETB TR0; включение счетчика WAIT_D3: MOV A, TL0 CJNE A,#0AH,WAIT_D3; ждем 10 импульс CLR TR0; выключение счетчика MOV TL0,#00H; Очистка TL0 MOV P2,#0FFH; DJNZ R1, D_3; JMP PR_D3
;Бегущий огонь НА 4-Й ИМПУЛЬС D_4: MOV A,#0FEH; Определяем что должен быть включен 0 светодиод MOV R1,#08H BEG_OGON: MOV P2, A; Включаем 0 светодиод MOV R2,A SETB TR0; включение счетчика WAIT_B_O: MOV A, TL0 CJNE A,#04h, WAIT_B_O; ждем 4 импульс CLR TR0; выключение счетчика MOV TL0,#00H; Очистка TL0
MOV A,R2 RL A; DJNZ R1,BEG_OGON; JMP PR_D4
END
|
Присоединённый файл ( Кол-во скачиваний: 1 )
14.txt 3,44 Kb
|