nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
goto loop ;зацикливаем программу
init movlw b'01000000' ;внешнее прерывание на RB0/INT
OPTION ;осуществляется по переднему фронту
movlw b'11111111' ;все разряды PORTB
TRIS PORTB ;на ввод
movlw b'11111101' ;все разряды PORTA кроме первого (RA1)
TRIS PORTA ;на ввод
Return ;вихід з підпрограми ініціалізації
obrob_INT ;обраболювач прерывания INT
incfsz counter_l ;инкремент младшего байта счетчика
goto m1 ;переход если нет переполнения
incf counter_h ;инкремент старшего байта счетчика
m1 movf counter_l,0
bcf INTCON,INTF ;сброс флага прерывания INT
return ;вихід з підпрограми обраболювача прерывания
obrob_RB4 ;обработчик прерывания от RB4
movf PORTB,0 ;чтение состаяния порта В
xorwf oldportb,0 ;сравнение с предыдущем значением порта В
movwf test ;сохраняем результат сравнения
btfss test,4 ;проверяем изминилось ли состояние RB4
goto notRB4 ;если нет переход на конец обработчика
;если изминилось то формируем импульс на выводе RA1 (ti=7*tц)
bcf PORTA,1 ;сброс RA1
bsf PORTA,1 ;установка RA1
nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
nop ;пустая команда
bcf PORTA,1 ;сброс RA1
notRB4 movf PORTB,0 ;чтение состаяния порта В
movwf oldportb ;сохранение для следубщего сравнения
bcf INTCON,RBIF ;сброс флага прерывания
return ;вихід з підпрограми обраболювача прерывания
END ;кінець програми
Тект файлу лістинга цієї програми має наступний вигляд:
MPASM 02.20 Released LAB5.ASM 5-4-2004 21:24:27 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16f84a ;определение типа мк
00002 #include p16f84.inc ;подключение файла p16f84a.inc
00001 LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136 LIST
0000000C 00003 counter_l EQU 0x0c
0000000D 00004 oldportb EQU 0x0d
0000000E 00005 T_W EQU 0x0e
0000000F 00006 T_STATUS EQU 0x0f
00000010 00007 counter_h EQU 0x10
00000011 00008 test EQU 0x11
00009
0000 138B 00010 bcf INTCON, GIE ;запрет прерываний
0001 2811 00011 goto start
00012
0002 00013 int_point
0004 00014 org 0x04 ;начало вектора прерываний
0004 138B 00015 bcf INTCON, GIE ;запрет прерываний
0005 008E 00016 movwf T_W ;сохраняем значение W
0006 0E03 00017 swapf STATUS,W ;сохранение регистра
0007 008F 00018 movwf T_STATUS ;STATUS
0008 188B 00019 btfsc INTCON,INTF ;ожидание появления сигнала на ножке INT
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.