Код: Выделить всё
LIST P=PIC16F84A ; условимся, что резонатор на 10МГц. Пренебрегаю пока командами, отнимающими мало времени на их выполнение
__CONFIG H'3FF2'
STATUS EQU H'0003'
TRISA EQU H'0005'
PORTA EQU H'0005'
TRISB EQU H'0006'
PORTB EQU H'0006'
A1 EQU 0Ch
A2 EQU 10H
org 0 ; начало программы
; подготовительные моменты
bsf STATUS,5 ; переход в Банк 1
movlw b'00011111'
movwf TRISA
clrf TRISB
bcf STATUS,5 ; переход назад в Банк 0
clrf PORTB ; очистка порта
; отслеживание нажатия кнопки
m1 ; цикл меандра
movlw b'11111111'
movwf PORTB ;установил 1 и потратил 2 цикла на 2 операции
movlw b'1100100' ;потратил 4 цикла на 4 операции
movwf A1
movlw b'1100100'
movwf A2
m11 ; подождал 100*100=10000 нопов + 10001 decfsz + 19998 goto. T тактовых = 0.1мкс. Итого '1' втечение 0.1мкс*40000=4000мкс
m111
nop
decfsz A2,1
goto m111
decfsz A1,1
goto m11
clrf PORTB ; 1 цикл
movlw b'1100100' ; 1 цикл
movwf A1 ; 1 цикл
movlw b'1100100' ; 1 цикл
movwf A2 ; 1 цикл
m12 ; подождал 10000 нопов + 10001 decfsz + 19998 goto. T тактовых = 0.1мкс. Итого '0' втечение 0.1мкс*40000=4000мкс
m121
nop
decfsz A2,1
goto m121
decfsz A1,1
goto m12
goto m1 ; 2 цикла
end ; конец программы. Получаю меандр с F=1/8мс=0.125кГц. А на деле F=1/82мс=0.012кГц

