'**************************************************************** '* Name : UNTITLED.BAS * '* Author : alex * '* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 14.06.2010 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** @ device pic16F84A,xt_osc define OSC 4 Cnt var word Digit var byte 'пременная-указатель(если Digit=0, то переменной присваивается 'значение первой константы, если Digit= 1 то значение второй константы и т.д. Pattern var byte 'переменная для хранения 7-ми сегментного кода odin var byte dva var byte tri var byte isrbit var bit 'Объявим переменную (битовую), клторая будет указывать программе на то, что произошло прерывание chetire var byte 'добавлено Digit1 var porta.0 Digit2 var porta.1 Digit3 var porta.2 digit4 var porta.3 Pbutton var portb.7 i var byte TRISA = 0 TRISB = $80 'включить все ножки portb нв выход (кроме portb.7- на вход, к нему подключим кнопу) isrbit = 0 '************** Преывания ***************** INTCON = %00100000 ' Разрешить прерывания по переполнению TMR0 OPTION_REG = %00000111 ' Подключить предделитель с коэфф 1:256 TMR0 = 155 on interrupt goto ISR ' При возникновении прерывания перейти на метку ISR INTCON = %10100000 ' Включить прерывания по переполнению TMR0 'cnt = 0 Loop: Cnt = 0 NXT: i = 0 'button Pbutton,0,0,100,i,0,nxt pause 2 if portb.7 = 1 then nxt cnt = cnt + 1 ' инкрементируем переменную счёта digit = cnt dig 3 gosub convert chetire = pattern Digit = cnt dig 2 gosub convert odin = pattern digit = cnt dig 1 gosub convert dva = pattern digit = cnt dig 0 gosub convert tri = pattern for i = 1 to 10000 pause 1 next i If cnt = 9999 then loop if isrbit = 1 then 'Если было прерывание, то isrbit = 0 'сбросим в ноль! gosub subisr 'и перейдем на подпрограмму обработки Endif goto NXT disable Isr: TMR0 = 155 isrbit = 1 'Установим флаг, сигнализирующий о том, что было прерывание INTCON.2 = 0 resume enable convert: lookup digit,[$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F],pattern pattern = pattern^$FF return subisr: 'Подпрограмма, которая должна выполняться после факта прерывания portb = odin DIGIT4 = 0 Digit3 = 0 digit2 = 0 digit1 = 1 pause 4 digit1 = 0 portb = dva DIGIT4 = 0 digit3 = 0 digit2 = 1 digit1 = 0 pause 4 digit2 = 0 portb = tri DIGIT4 = 0 digit3 = 1 digit2 = 0 digit1 = 0 pause 4 digit3 = 0 PORTB = chetire digit4 = 1 digit3 = 0 digit2 = 0 digit1 = 0 pause 4 digit4 = 0 return end