Advertisement
Guest User

ChessClockPIC16F84A

a guest
Jun 14th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     LIST    P=PIC16F84A
  2.     __CONFIG    H'3FF1'
  3.     #include <P16F84A.inc>
  4.     PC      EQU H'0002'
  5.     Reg_1   EQU H'000C'
  6.     Reg_2   EQU H'000D'
  7.     Reg_3   EQU H'000E'
  8.     Time1L  EQU H'0010'
  9.     Time1R  EQU H'0011'
  10.     Time2L  EQU H'0012'
  11.     Time2R  EQU H'0013'
  12.     TimerS  EQU H'0014'
  13.     Timer1_L    EQU H'0015'
  14.     Timer1_R    EQU H'0016'
  15.     Timer1_S    EQU H'0017'
  16.     Timer2_L    EQU H'0018'
  17.     Timer2_R    EQU H'0019'
  18.     Timer2_S    EQU H'001A'
  19.     BlinkS1     EQU H'001B'
  20.     BlinkS2     EQU H'001C'
  21.     BlinkS3     EQU H'001D'
  22.     BlinkS4     EQU H'001E'
  23.     Count   EQU H'000F'
  24.     EEData  EQU 08h
  25.     EECon1  EQU 08h
  26.     EEAdr   EQU 09h
  27.     EECon2  EQU 09h
  28.     OPTIONR EQU 81H ; Option (RP0=1)
  29.     INTCON  EQU 0BH ; регистр флагов прерываний
  30.    
  31. ; Старт выполнения программы       
  32.     org 0
  33.     goto    Start
  34.  
  35. ; Сработало прерывание
  36.     org 4      
  37.     call    Pause20ms   ; Дребезг контактов
  38.     btfsc   PORTB,0     ;
  39.     goto    TestPlayer  ; Проверка кто нажал кнопку
  40. EndInterrupt
  41.     bcf INTCON,INTF
  42.     bsf INTCON,INTE
  43.     bsf OPTION_REG,6
  44.     RETFIE              ; возврат из прерывания
  45.  
  46. TestPlayer
  47.     btfsc   PORTA,0     ; Если левая кнопка нажата, то
  48.     goto    LeftPlayer  ; выполняем счет левого игрока
  49.     btfsc   PORTA,4     ; Если правая кнопка нажата, то
  50.     goto    RightPlayer ; выполняем счет правого игрока
  51.     btfsc   PORTB,0     ; Если центральная кнопка нажата, то
  52.     goto    SetUp       ; Переходим к установкам
  53.     goto    EndInterrupt
  54.     ;RETFIE
  55.    
  56. LeftPlayer
  57.     movf    TimerS, W   ; Считываем значения основных таймеров
  58.     movwf   Timer1_S    ; и копируем их в таймеры
  59.     movf    Time1L, W   ; игрока
  60.     movwf   Timer1_L    ;
  61.     movf    Time1R, W   ;
  62.     movf    Timer1_R    ;
  63.     bcf     PORTA,2     ; Гасим индикатор левого игрока
  64.     bsf     PORTA,1     ; и включаем индикатор правого
  65.     movf    Timer2_S, W ; Копируем значения времени
  66.     movwf   TimerS      ; правого игрока в основной таймер
  67.     movf    Timer2_R, W ;
  68.     movwf   Time2R      ;
  69.     movf    Timer2_L, W ;
  70.     movf    Time2L      ;
  71.     goto    EndInterrupt
  72.     ;   RETFIE
  73.    
  74. RightPlayer
  75.     movf    TimerS, W   ; Считываем значения основных таймеров
  76.     movwf   Timer2_S    ; и копируем их в таймеры
  77.     movf    Time1L, W   ; игрока
  78.     movwf   Timer2_L    ;
  79.     movf    Time1R, W   ;
  80.     movf    Timer2_R    ;
  81.     bsf     PORTA,2     ; Включаем индикатор левого игрока
  82.     bcf     PORTA,1     ; и гасим индикатор правого
  83.     movf    Timer1_S, W ; Копируем значения времени
  84.     movwf   TimerS      ; правого игрока в основной таймер
  85.     movf    Timer1_R, W ;
  86.     movwf   Time1R      ;
  87.     movf    Timer1_L, W ;
  88.     movf    Time1L      ;
  89.     goto    EndInterrupt
  90.    
  91. SetUp
  92.     call    Pause20ms
  93.     btfsc   PORTB,0
  94.     goto    CheckSetUp
  95.     call    ScoreL_0    ; Показываем нули
  96.     call    ScoreR_0    ;
  97. SetUpScore
  98.     bsf     PORTA,2
  99.     bsf     PORTA,1
  100.     btfsc   PORTA,4     ; Увеличиваем на 1 минуту
  101.     goto    TestMinUp   ;
  102.     btfsc   PORTA,0     ; Уменьшаем на 1 минуту
  103.     goto    TestMinDown ;
  104.     decfsz  BlinkS1
  105.     goto    SetUpScore
  106.     decfsz  BlinkS2
  107.     goto    SetUpScore
  108.     bcf     PORTA,2
  109.     bcf     PORTA,1
  110.     decfsz  BlinkS3
  111.     goto    SetUpScore2
  112.     decfsz  BlinkS4
  113.     goto    SetUpScore2
  114.     goto    SetUpScore
  115.  
  116. SetUpScore2
  117.     btfsc   PORTA,4     ; Увеличиваем на 1 минуту
  118.     goto    TestMinUp   ;
  119.     btfsc   PORTA,0     ; Уменьшаем на 1 минуту
  120.     goto    TestMinDown ;
  121.     decfsz  BlinkS3
  122.     goto    SetUpScore2
  123.     decfsz  BlinkS4
  124.     goto    SetUpScore2
  125.     goto    SetUpScore
  126.  
  127. TestExitInterrupt
  128.     btfsc   PORTA,4
  129.     goto    TestExit2
  130.     goto    SetUpScore
  131.    
  132. TestExit2
  133.     btfsc   PORTA,0
  134.     goto    EndSetupInterrupt
  135.     goto    SetUpScore
  136.    
  137. EndSetupInterrupt
  138.     bsf     PORTA,2
  139.     bsf     PORTA,1
  140.     btfsc   PORTB,0
  141.     goto    $-1
  142.     call    Pause1s
  143.     movf    Time1R, W
  144.     movwf   Timer1_R
  145.     movf    Time1R, W
  146.     movwf   Timer2_R
  147.     movf    Time1L, W
  148.     movwf   Timer1_L
  149.     movf    Time1L, W
  150.     movwf   Timer2_L
  151.     movlw   .240
  152.     movwf   TimerS
  153.     movlw   .240
  154.     movwf   Timer1_S
  155.     movlw   .240
  156.     movwf   Timer2_S
  157.     movlw   .1
  158.     movwf   Reg_1
  159.     movlw   .1
  160.     movwf   Reg_2
  161.     movlw   .1
  162.     movwf   Reg_3
  163.     bcf     PORTA,2
  164.     bcf     PORTA,1
  165.     btfss   PORTB,0
  166.     goto    $-1
  167.     btfsc   PORTA,0
  168.     bsf     PORTA,1
  169.     btfsc   PORTA,4
  170.     bsf     PORTA,2
  171.     bcf     INTCON,INTF
  172.     bsf     INTCON,INTE
  173.     bsf     OPTION_REG,6
  174.     RETFIE
  175.    
  176. CheckSetUp
  177.     call    Pause05
  178.     btfsc   PORTB,0
  179.     goto    $-1
  180.     bcf     INTCON,7    ; Запрещаем прерывания
  181.     bcf     INTCON,4    ;
  182.     bcf     OPTION_REG,6
  183.     movlw   .255
  184.     movwf   BlinkS1
  185.     movlw   .255
  186.     movwf   BlinkS2
  187.     movlw   .255
  188.     movwf   BlinkS3
  189.     movlw   .255
  190.     movwf   BlinkS4
  191.     goto    SetUp
  192.    
  193. TestMinUp
  194.     call    Pause20ms
  195.     btfsc   PORTA,4     ; Ждем пока отпустят кнопку
  196.     call    Pause200ms
  197.     btfsc   PORTB,0
  198.     goto    TestExitInterrupt
  199.     movf    Time1R, W   ; Копируем текущее значение правой цифры
  200.     incf    Time1R, F   ; Увеличиваем его на 1
  201.     call    ShowScore   ; Выводим число
  202.     goto    SetUpScore
  203.    
  204. TestMinDown
  205.     call    Pause20ms
  206.     btfsc   PORTA,0     ; Ждем пока отпустят кнопку
  207.     call    Pause200ms
  208.     btfsc   PORTB,0
  209.     goto    TestExitInterrupt
  210.     movf    Time1R, W   ; Копируем текущее значение правой цифры
  211.     decf    Time1R, F   ; Уменьшаем его на 1
  212.     call    ShowScore   ; Выводим правое число
  213.     goto    SetUpScore 
  214.  
  215. ; Проверяем какое число у нас в регистре и выводим на индикатор
  216. ShowScore
  217.     movf    Time1R, W
  218.     bcf     STATUS, Z
  219.     xorlw   .0
  220.     btfsc   STATUS, Z
  221.     call    ScoreR_0
  222.    
  223.     movf    Time1R, W
  224.     bcf     STATUS, Z
  225.     xorlw   .1
  226.     btfsc   STATUS, Z
  227.     call    ScoreR_1
  228.    
  229.     movf    Time1R, W
  230.     bcf     STATUS, Z
  231.     xorlw   .2
  232.     btfsc   STATUS, Z
  233.     call    ScoreR_2
  234.    
  235.     movf    Time1R, W
  236.     bcf     STATUS, Z
  237.     xorlw   .3
  238.     btfsc   STATUS, Z
  239.     call    ScoreR_3
  240.    
  241.     movf    Time1R, W
  242.     bcf     STATUS, Z
  243.     xorlw   .4
  244.     btfsc   STATUS, Z
  245.     call    ScoreR_4
  246.    
  247.     movf    Time1R, W
  248.     bcf     STATUS, Z
  249.     xorlw   .5
  250.     btfsc   STATUS, Z
  251.     call    ScoreR_5
  252.    
  253.     movf    Time1R, W
  254.     bcf     STATUS, Z
  255.     xorlw   .6
  256.     btfsc   STATUS, Z
  257.     call    ScoreR_6
  258.    
  259.     movf    Time1R, W
  260.     bcf     STATUS, Z
  261.     xorlw   .7
  262.     btfsc   STATUS, Z
  263.     call    ScoreR_7
  264.    
  265.     movf    Time1R, W
  266.     bcf     STATUS, Z
  267.     xorlw   .8
  268.     btfsc   STATUS, Z
  269.     call    ScoreR_8
  270.    
  271.     movf    Time1R, W
  272.     bcf     STATUS, Z
  273.     xorlw   .9
  274.     btfsc   STATUS, Z
  275.     call    ScoreR_9
  276.    
  277.     movf    Time1R, W
  278.     bcf     STATUS, Z
  279.     xorlw   .10
  280.     btfsc   STATUS, Z
  281.     call    LeftUp1
  282.    
  283.     movf    Time1R, W
  284.     bcf     STATUS, Z
  285.     xorlw   .255
  286.     btfsc   STATUS, Z
  287.     call    LeftDown1
  288.    
  289.     call    ShowLeftScore
  290.     return
  291.  
  292. LeftUp1
  293.     call    ScoreR_0    ; Показываем на правом индикаторе ноль
  294.     movlw   .0          ; Обнуляем регистр с правым индикатором
  295.     movwf   Time1R      ;
  296.     movf    Time1L, W   ; Добавляем 1 в левый регистр
  297.     incf    Time1L, F   ;
  298.     return
  299.    
  300. LeftDown1
  301.     call    ScoreR_9    ; Показываем на правом индикаторе 9
  302.     movlw   .9          ; Загружаем 9 в регистр с правым индикатором
  303.     movwf   Time1R      ;
  304.     movf    Time1L, W   ; Отнимаем 1 в левом регистре
  305.     decf    Time1L, F   ;
  306.     return
  307.    
  308. ShowLeftScore
  309.     movf    Time1L, W
  310.     bcf     STATUS, Z
  311.     xorlw   .0
  312.     btfsc   STATUS, Z
  313.     call    ScoreL_0
  314.    
  315.     movf    Time1L, W
  316.     bcf     STATUS, Z
  317.     xorlw   .1
  318.     btfsc   STATUS, Z
  319.     call    ScoreL_1
  320.    
  321.     movf    Time1L, W
  322.     bcf     STATUS, Z
  323.     xorlw   .2
  324.     btfsc   STATUS, Z
  325.     call    ScoreL_2
  326.    
  327.     movf    Time1L, W
  328.     bcf     STATUS, Z
  329.     xorlw   .3
  330.     btfsc   STATUS, Z
  331.     call    ScoreL_3
  332.    
  333.     movf    Time1L, W
  334.     bcf     STATUS, Z
  335.     xorlw   .4
  336.     btfsc   STATUS, Z
  337.     call    ScoreL_4
  338.    
  339.     movf    Time1L, W
  340.     bcf     STATUS, Z
  341.     xorlw   .5
  342.     btfsc   STATUS, Z
  343.     call    ScoreL_5
  344.    
  345.     movf    Time1L, W
  346.     bcf     STATUS, Z
  347.     xorlw   .6
  348.     btfsc   STATUS, Z
  349.     call    ScoreL_6
  350.    
  351.     movf    Time1L, W
  352.     bcf     STATUS, Z
  353.     xorlw   .7
  354.     btfsc   STATUS, Z
  355.     call    ScoreL_7
  356.    
  357.     movf    Time1L, W
  358.     bcf     STATUS, Z
  359.     xorlw   .8
  360.     btfsc   STATUS, Z
  361.     call    ScoreL_8
  362.    
  363.     movf    Time1L, W
  364.     bcf     STATUS, Z
  365.     xorlw   .9
  366.     btfsc   STATUS, Z
  367.     call    ScoreL_9
  368.    
  369.     movf    Time1L, W
  370.     bcf     STATUS, Z
  371.     xorlw   .10
  372.     btfsc   STATUS, Z
  373.     call    ResetLeft
  374.    
  375.     movf    Time1L, W
  376.     bcf     STATUS, Z
  377.     xorlw   .255
  378.     btfsc   STATUS, Z
  379.     call    ResetLeft
  380.     return
  381.    
  382. ResetLeft
  383.     call    ScoreL_0
  384.     movlw   .0
  385.     movwf   Time1L
  386.     return 
  387.  
  388. Start
  389. ; Подготовительные моменты
  390.     bsf     STATUS,5    ; Переход в Банк 1
  391.     movlw   b'00010001' ; Включаем ноги PORTA
  392.     movwf   TRISA
  393.     movlw   b'00000001' ; Включаем ноги PORTB
  394.     movwf   TRISB
  395.     bcf     STATUS,5    ; Переход назад в Банк 0
  396.     clrf    PORTB
  397.     clrf    PORTA
  398.     bsf     INTCON,7    ; Разрешаем прерывания
  399.     BSF    INTCON,4            ; разрешаем прерывания по INT
  400.     BSF     OPTION_REG,6        ; Прерывание на RB0 по переднему фронту
  401.  
  402. ;PORTB,0 = Прерывание
  403. ;PORTA,0 = Левая кнопка
  404. ;PORTA,4 = Правая кнопка
  405. ;PORTB,0 = Центральная кнопка (установка)
  406. ;PORTA,2 = Левый светодиод
  407. ;PORTA,1 = Правый светодиод
  408.  
  409. ; Левый сегмент
  410. ; PORTA,3 = 1
  411. ; PORTB,1 = 8
  412. ; PORTB,2 = 2
  413. ; PORTB,3 = 4
  414.  
  415. ; Правый сегмент
  416. ; PORTB,7 = 4
  417. ; PORTB,6 = 2
  418. ; PORTB,5 = 8
  419. ; PORTB,4 = 1
  420.  
  421. ; Тест цифр
  422.     bsf     PORTA,2
  423.     call    ScoreL_0
  424.     call    ScoreR_9
  425.     call    Pause05
  426.     bcf     PORTA,2
  427.     call    ScoreL_1
  428.     call    ScoreR_8
  429.     call    Pause05
  430.     bsf     PORTA,1
  431.     call    ScoreL_2
  432.     call    ScoreR_7
  433.     call    Pause05
  434.     bcf     PORTA,1
  435.     call    ScoreL_3
  436.     call    ScoreR_6
  437.     call    Pause05
  438.     bsf     PORTA,2
  439.     call    ScoreL_4
  440.     call    ScoreR_5
  441.     call    Pause05
  442.     bcf     PORTA,2
  443.     call    ScoreL_5
  444.     call    ScoreR_4
  445.     call    Pause05
  446.     bsf     PORTA,1
  447.     call    ScoreL_6
  448.     call    ScoreR_3
  449.     call    Pause05
  450.     bcf     PORTA,1
  451.     call    ScoreL_7
  452.     call    ScoreR_2
  453.     call    Pause05
  454.     bsf     PORTA,2
  455.     bsf     PORTA,1
  456.     call    ScoreL_8
  457.     call    ScoreR_1
  458.     call    Pause05
  459.     bcf     PORTA,2
  460.     call    ScoreL_9
  461.     call    ScoreR_0
  462.     call    Pause05
  463.     bcf     PORTA,1
  464.     call    ScoreL_0
  465. ; Начало цикла выполнения часов
  466.    
  467. Main
  468.    
  469. WaitButton
  470.     btfsc   PORTA,0
  471.     goto    BeginFactory
  472.     btfsc   PORTA,4
  473.     goto    BeginFactory
  474.     goto    WaitButton
  475.    
  476. BeginFactory
  477.     movlw   .1      ; Установка часов на 15 минут
  478.     movwf   Time1L  ;
  479.     movlw   .5      ;
  480.     movwf   Time1R  ;  
  481. Begin
  482.     movf    Time1R, W   ; Синхронизируем показания
  483.     movwf   Timer1_R    ; таймеров для обоих
  484.     clrw
  485.     movf    Time1R, W   ; игроков
  486.     movwf   Timer2_R;
  487.     movlw   .240        ;
  488.     movwf   Timer1_S    ;
  489.     movlw   .240        ;
  490.     movwf   Timer2_S    ;
  491.     movf    Time1L, W   ;
  492.     movwf   Timer1_L    ;
  493.     movf    Time1L, W   ;
  494.     movwf   Timer2_L    ;
  495.     movlw   .240
  496.     movwf   TimerS 
  497.     clrw
  498. RunGame
  499.     call    ShowScore
  500.     call    Pause250ms
  501.     decfsz  TimerS
  502.     goto    RunGame
  503.     btfsc   PORTA,2     ; Если горит индиктор левого игрока
  504.     call    LeftGamer   ; то снимаем с него минуты
  505.     btfsc   PORTA,1     ; Если горит индикатор правого игрока
  506.     call    RightGamer  ; то снимаем с него минуты
  507.     movlw   .240
  508.     movwf   TimerS
  509.     goto    RunGame     ; зацикливаем
  510.    
  511. LeftGamer
  512.     movf    Timer1_R, W ; Считываем значение правого индикатора
  513.     decf    Timer1_R    ; Уменьшаем на 1
  514.     movf    Timer1_R, W ; Считываем значение правого индикатора
  515.     movwf   Time1R      ; помещаем его в основной таймер
  516.     movf    Time1R, W   ; Считываем значение правого индикатора
  517.     movf    Timer1_L, W ; Считтываем значение левого индикатора
  518.     movwf   Time1L      ; помещаем его в основной таймер
  519.     call    ShowScore   ; Выводим число
  520.     movf    Time1L, W   ; Считываем значение левого индикатора
  521.     movwf   Timer1_L    ; помещаем его в таймер игрока
  522.     movf    Timer1_L, W ; Считываем показания левого индикатора
  523.     bcf     STATUS,Z    ; сравниваем с нулем
  524.     xorlw   .0          ;
  525.     btfsc   STATUS,Z    ; Если обнулен, то проверяем
  526.     call    LeftGamerMin ; правый индикатор
  527.     return
  528.  
  529. LeftGamerMin
  530.     movf    Timer1_R, W ; Считываем показания правого индикатора
  531.     bcf     STATUS,Z    ; Сравниваем с нулем
  532.     xorlw   .0          ;
  533.     btfsc   STATUS,Z    ; Если обнулен, то
  534.     goto    WinGamer ; выиграл правый игрок
  535.     return
  536.    
  537. WinGamer
  538.     btfsc   PORTA,1         ; Проверка на сброс таймера
  539.     call    Check2LeftMin   ;
  540.     btfsc   PORTA,2         ;
  541.     call    Check1LeftMin   ;
  542.     btfsc   PORTA,2         ; Проверка кто выиграл
  543.     goto    LeftBlink       ;
  544.     btfsc   PORTA,1         ;
  545.     goto    RightBlink      ;
  546.     goto    WinGamer        ;
  547.  
  548. Check2LeftMin
  549.     movf    Timer2_L, W ; Считываем показания левого индикатора
  550.     bcf     STATUS,Z    ; сравниваем с нулем
  551.     xorlw   .0          ;
  552.     btfsc   STATUS,Z    ; Если обнулен, то мигаем проигравшим
  553.     goto    Check2RightMin
  554.     goto    RunGame
  555.  
  556. Check2RightMin
  557.     movf    Timer2_R, W ; Считываем показания правого индикатора
  558.     bcf     STATUS,Z    ; сравниваем с нулем
  559.     xorlw   .0          ;
  560.     btfsc   STATUS,Z    ; Если обнулен, то проверяем левый
  561.     return
  562.     goto    RunGame
  563.  
  564. Check1LeftMin
  565.     movf    Timer1_L, W ; Считываем показания левого индикатора
  566.     bcf     STATUS,Z    ; сравниваем с нулем
  567.     xorlw   .0          ;
  568.     btfsc   STATUS,Z    ; Если обнулен, то мигаем проигравшим
  569.     goto    Check1RightMin
  570.     goto    RunGame
  571.  
  572. Check1RightMin
  573.     movf    Timer1_R, W ; Считываем показания правого индикатора
  574.     bcf     STATUS,Z    ; сравниваем с нулем
  575.     xorlw   .0          ;
  576.     btfsc   STATUS,Z    ; Если обнулен, то проверяем левый
  577.     return
  578.     goto    RunGame
  579.  
  580. LeftBlink  
  581.     bcf     PORTA,2     ; Мигаем проигравшим
  582.     call    ScoreR_1
  583.     call    ScoreL_0
  584.     call    Pause05     ;
  585.     bsf     PORTA,2     ;
  586.     call    Pause05     ;
  587.     goto    WinGamer ;
  588.  
  589. RightBlink 
  590.     bcf     PORTA,1     ; Мигаем проигравшим
  591.     call    ScoreL_1
  592.     call    ScoreR_0
  593.     call    Pause05     ;
  594.     bsf     PORTA,1     ;
  595.     call    Pause05     ;
  596.     goto    WinGamer ;
  597.    
  598. RightGamer
  599.     movf    Timer2_R, W ; Считываем значение правого индикатора
  600.     decf    Timer2_R    ; Уменьшаем на 1
  601.     movf    Timer2_R, W ; Считываем значение правого индикатора
  602.     movwf   Time1R      ; помещаем его в основной таймер
  603.     movf    Timer2_L, W ; Считтываем значение левого индикатора
  604.     movwf   Time1L      ; помещаем его в основной таймер
  605.     call    ShowScore   ; Выводим число
  606.     movf    Time1L, W   ; Считываем значение левого индикатора
  607.     movwf   Timer2_L    ; помещаем его в таймер игрока
  608.     movf    Timer2_L, W ; Считываем показания левого индикатора
  609.     bcf     STATUS,Z    ; сравниваем с нулем
  610.     xorlw   .0          ;
  611.     btfsc   STATUS,Z    ; Если обнулен, то проверяем
  612.     call    RightGamerMin ; правый индикатор
  613.     return
  614.  
  615. RightGamerMin
  616.     movf    Timer2_R, W ; Считываем показания правого индикатора
  617.     bcf     STATUS,Z    ; Сравниваем с нулем
  618.     xorlw   .0          ;
  619.     btfsc   STATUS,Z    ; Если обнулен, то
  620.     goto    WinGamer ; выиграл левый игрок
  621.     return
  622.    
  623. ScoreL_0
  624.     bcf     PORTA,3
  625.     bcf     PORTB,1
  626.     bcf     PORTB,2
  627.     bcf     PORTB,3
  628.     return
  629.    
  630. ScoreL_1
  631.     bsf     PORTA,3
  632.     bcf     PORTB,1
  633.     bcf     PORTB,2
  634.     bcf     PORTB,3
  635.     return
  636. ScoreL_2
  637.     bcf     PORTA,3
  638.     bcf     PORTB,1
  639.     bsf     PORTB,2
  640.     bcf     PORTB,3
  641.     return
  642.    
  643. ScoreL_3
  644.     bsf     PORTA,3
  645.     bcf     PORTB,1
  646.     bsf     PORTB,2
  647.     bcf     PORTB,3
  648.     return
  649.    
  650. ScoreL_4
  651.     bcf     PORTA,3
  652.     bcf     PORTB,1
  653.     bcf     PORTB,2
  654.     bsf     PORTB,3
  655.     return
  656.    
  657. ScoreL_5
  658.     bsf     PORTA,3
  659.     bcf     PORTB,1
  660.     bcf     PORTB,2
  661.     bsf     PORTB,3
  662.     return
  663.    
  664. ScoreL_6
  665.     bcf     PORTA,3
  666.     bcf     PORTB,1
  667.     bsf     PORTB,2
  668.     bsf     PORTB,3
  669.     return
  670.    
  671. ScoreL_7
  672.     bsf     PORTA,3
  673.     bcf     PORTB,1
  674.     bsf     PORTB,2
  675.     bsf     PORTB,3
  676.     return
  677.    
  678. ScoreL_8
  679.     bcf     PORTA,3
  680.     bsf     PORTB,1
  681.     bcf     PORTB,2
  682.     bcf     PORTB,3
  683.     return
  684.    
  685. ScoreL_9
  686.     bsf     PORTA,3
  687.     bsf     PORTB,1
  688.     bcf     PORTB,2
  689.     bcf     PORTB,3
  690.     return
  691.    
  692. ScoreR_0
  693.     bcf     PORTB,7
  694.     bcf     PORTB,6
  695.     bcf     PORTB,5
  696.     bcf     PORTB,4
  697.     return
  698.  
  699. ScoreR_1
  700.     bcf     PORTB,7
  701.     bcf     PORTB,6
  702.     bcf     PORTB,5
  703.     bsf     PORTB,4
  704.     return
  705.  
  706. ScoreR_2
  707.     bcf     PORTB,7
  708.     bsf     PORTB,6
  709.     bcf     PORTB,5
  710.     bcf     PORTB,4
  711.     return
  712.  
  713. ScoreR_3
  714.     bcf     PORTB,7
  715.     bsf     PORTB,6
  716.     bcf     PORTB,5
  717.     bsf     PORTB,4
  718.     return
  719.  
  720. ScoreR_4
  721.     bsf     PORTB,7
  722.     bcf     PORTB,6
  723.     bcf     PORTB,5
  724.     bcf     PORTB,4
  725.     return
  726.  
  727. ScoreR_5
  728.     bsf     PORTB,7
  729.     bcf     PORTB,6
  730.     bcf     PORTB,5
  731.     bsf     PORTB,4
  732.     return
  733.  
  734. ScoreR_6
  735.     bsf     PORTB,7
  736.     bsf     PORTB,6
  737.     bcf     PORTB,5
  738.     bcf     PORTB,4
  739.     return
  740.  
  741. ScoreR_7
  742.     bsf     PORTB,7
  743.     bsf     PORTB,6
  744.     bcf     PORTB,5
  745.     bsf     PORTB,4
  746.     return
  747.  
  748. ScoreR_8
  749.     bcf     PORTB,7
  750.     bcf     PORTB,6
  751.     bsf     PORTB,5
  752.     bcf     PORTB,4
  753.     return
  754.    
  755. ScoreR_9
  756.     bcf     PORTB,7
  757.     bcf     PORTB,6
  758.     bsf     PORTB,5
  759.     bsf     PORTB,4
  760.     return
  761.  
  762. ;delay = 1'000'000 machine cycles
  763. Pause1s     movlw       .173
  764.             movwf       Reg_1
  765.             movlw       .19
  766.             movwf       Reg_2
  767.             movlw       .6
  768.             movwf       Reg_3
  769. wr          decfsz      Reg_1, F
  770.             goto        wr
  771.             decfsz      Reg_2, F
  772.             goto        wr
  773.             decfsz      Reg_3, F
  774.             goto        wr
  775.             nop
  776.             nop
  777.             return
  778.            
  779. ;delay = 500'000 machine cycles
  780. Pause05     movlw       .85
  781.             movwf       Reg_1
  782.             movlw       .138
  783.             movwf       Reg_2
  784.             movlw       .3
  785.             movwf       Reg_3
  786. wr05        decfsz      Reg_1, F
  787.             goto        wr05
  788.             decfsz      Reg_2, F
  789.             goto        wr05
  790.             decfsz      Reg_3, F
  791.             goto        wr05
  792.             nop
  793.             nop
  794.             return
  795.  
  796. ;delay = 20'000 machine cycles
  797. Pause20ms   movlw       .248
  798.             movwf       Reg_1
  799.             movlw       .26
  800.             movwf       Reg_2
  801. wr20ms      decfsz      Reg_1, F
  802.             goto        wr20ms
  803.             decfsz      Reg_2, F
  804.             goto        wr20ms
  805.             nop
  806.             return
  807.  
  808. ;delay = 200'000 machine cycles
  809. Pause200ms  movlw       .186
  810.             movwf       Reg_1
  811.             movlw       .4
  812.             movwf       Reg_2
  813.             movlw       .2
  814.             movwf       Reg_3
  815. wr200ms     decfsz      Reg_1, F
  816.             goto        wr200ms
  817.             decfsz      Reg_2, F
  818.             goto        wr200ms
  819.             decfsz      Reg_3, F
  820.             goto        wr200ms
  821.             nop
  822.             return
  823.            
  824. ;delay = 250'000 machine cycles
  825. Pause250ms  
  826.             movlw       .169
  827.             movwf       Reg_1
  828.             movlw       .69
  829.             movwf       Reg_2
  830.             movlw       .2
  831.             movwf       Reg_3
  832. wr250ms     decfsz      Reg_1, F
  833.             goto        wr250ms
  834.             decfsz      Reg_2, F
  835.             goto        wr250ms
  836.             decfsz      Reg_3, F
  837.             goto        wr250ms
  838.             nop
  839.             nop
  840.             return
  841.  
  842. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement