SHARE
TWEET

Untitled

a guest Aug 25th, 2019 97 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. PROCESSOR   16F1718
  3.     RADIX       dec
  4.  
  5.     INCLUDE "p16f1718.inc"
  6.  
  7.     __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _MCLRE_ON & _BOREN_ON & _FCMEN_OFF
  8.     __config _CONFIG2, _PLLEN_OFF & _ZCDDIS_ON & _PPS1WAY_OFF
  9.  
  10. P5  EQU 0x70        ; RB5, cC, F1(5), C1(5)
  11. P6  EQU 0x71        ; RB6, HL, F1(6), C1(6)
  12. TS1A    EQU 0x72        ; RB2, dD, F1(2), C1(2)
  13. TS1B    EQU 0x73        ; RB3, eE, F1(3), C1(3)
  14.  
  15. S1A EQU 0x74        ; RA4, fF, F2(4), C2(4)
  16. S1B EQU 0x75        ; RA3, gG, F2(3), C2(3)
  17.  
  18. TS2A    EQU 0x76        ; RC2, iI, F3(2), C3(2)
  19. TS2B    EQU 0x77        ; RC3, jJ, F3(3), C3(3)
  20.  
  21. C1  EQU 0x78
  22. C2  EQU 0x79
  23. C3  EQU 0x7A
  24.  
  25. F1  EQU 0x7B        ; (not) IOCBF flags
  26. F2  EQU 0x7C
  27. F3  EQU 0x7D
  28.  
  29. T0  EQU 0x7E        ; initialized to 0x04 in init
  30.  
  31.     ; reset vector
  32.  
  33.     PAGESEL init
  34.     GOTO    init
  35.  
  36.     ; interrupt vector
  37.  
  38.     ORG __VECTOR_INT
  39.  
  40.     BTFSS   INTCON,IOCIF
  41.     BRA _iocx
  42.  
  43.     BANKSEL IOCAF
  44.     MOVLW   0xFF
  45.     XORWF   IOCBF,W
  46.     ANDWF   IOCBF,F
  47.     MOVWF   F1
  48.    
  49.     MOVLW   0xFF
  50.     XORWF   IOCAF,W
  51.     ANDWF   IOCAF,F
  52.     MOVWF   F2
  53.  
  54.     MOVLW   0xFF
  55.     XORWF   IOCCF,W
  56.     ANDWF   IOCCF,F
  57.     MOVWF   F3
  58.  
  59.     BTFSC   F1,5
  60.     BRA _iocb5x     ; bra to the next number
  61.     MOVFW   P5
  62.     BNZ _bncb5      ; bouncing here
  63.     MOVFW   T0 
  64.     MOVWF   P5
  65.  
  66.     BTFSS   C1,5
  67.     BRA _higb5
  68.  
  69.     BSF IOCBP,IOCBP5
  70.     BCF IOCBN,IOCBN5
  71.     BCF C1,5   
  72.  
  73.     MOVLW   'c'
  74.     CALL    dbg
  75.  
  76.     BRA _iocb5x
  77.  
  78. _higb5: BSF IOCBN,IOCBN5
  79.     BCF IOCBP,IOCBP5
  80.     BSF C1,5
  81.  
  82.     MOVLW   'C'
  83.     CALL    dbg
  84.    
  85. _iocb5x:BTFSC   F1,6
  86.     BRA _iocb6x     ; bra to the next number
  87.     MOVFW   P6
  88.     BNZ _bncb6      ; bouncing here
  89.     MOVFW   T0 
  90.     MOVWF   P6
  91.  
  92.     BTFSS   C1,6
  93.     BRA _higb6
  94.  
  95.     BSF IOCBP,IOCBP6
  96.     BCF IOCBN,IOCBN6
  97.     BCF C1,6   
  98.  
  99.     MOVLW   'L'
  100.     CALL    dbg
  101.  
  102.     BRA _iocb6x
  103.  
  104. _higb6: BSF IOCBN,IOCBN6
  105.     BCF IOCBP,IOCBP6
  106.     BSF C1,6
  107.  
  108.     MOVLW   'H'
  109.     CALL    dbg
  110.    
  111. _iocb6x:BTFSC   F1,2
  112.     BRA _iocb2x     ; bra to the next number
  113.     MOVFW   TS1A
  114.     BNZ _bncb2      ; bouncing here
  115.     MOVFW   T0 
  116.     MOVWF   TS1A
  117.  
  118.     BTFSS   C1,2
  119.     BRA _higb2
  120.  
  121.     BSF IOCBP,IOCBP2
  122.     BCF IOCBN,IOCBN2
  123.     BCF C1,2   
  124.  
  125.     MOVLW   'd'
  126.     CALL    dbg
  127.  
  128.     BRA _iocb2x
  129.  
  130. _higb2: BSF IOCBN,IOCBN2
  131.     BCF IOCBP,IOCBP2
  132.     BSF C1,2
  133.  
  134.     MOVLW   'D'
  135.     CALL    dbg
  136.    
  137. _iocb2x:
  138.     BTFSC   F1,3
  139.     BRA _iocb3x     ; bra to the next number
  140.     MOVFW   TS1B
  141.     BNZ _bncb3      ; bouncing here
  142.     MOVFW   T0 
  143.     MOVWF   TS1B
  144.  
  145.     BTFSS   C1,3
  146.     BRA _higb3
  147.  
  148.     BSF IOCBP,IOCBP3
  149.     BCF IOCBN,IOCBN3
  150.     BCF C1,3
  151.  
  152.     MOVLW   'e'
  153.     CALL    dbg
  154.  
  155.     BRA _iocb3x
  156.  
  157. _higb3: BSF IOCBN,IOCBN3
  158.     BCF IOCBP,IOCBP3
  159.     BSF C1,3
  160.  
  161.     MOVLW   'E'
  162.     CALL    dbg
  163.    
  164. _iocb3x:
  165.     BANKSEL IOCAF
  166.     BTFSC   F2,4
  167.     BRA _ioca4x     ; bra to the next number
  168.     MOVFW   S1A
  169.     BNZ _bnca4      ; bouncing here
  170.     MOVFW   T0 
  171.     MOVWF   S1A
  172.  
  173.     BTFSS   C2,4
  174.     BRA _higa4
  175.  
  176.     BSF IOCAP,IOCAP4
  177.     BCF IOCAN,IOCAN4
  178.     BCF C2,4
  179.  
  180.     MOVLW   'f'
  181.     CALL    dbg
  182.  
  183.     BRA _ioca4x
  184.  
  185. _higa4: BSF IOCAN,IOCAN4
  186.     BCF IOCAP,IOCAP4
  187.     BSF C2,4
  188.  
  189.     MOVLW   'F'
  190.     CALL    dbg
  191.    
  192. _ioca4x:
  193.     BTFSC   F2,3
  194.     BRA _ioca3x     ; bra to the next number
  195.     MOVFW   S1B
  196.     BNZ _bnca3      ; bouncing here
  197.     MOVFW   T0 
  198.     MOVWF   S1B
  199.  
  200.     BTFSS   C2,3
  201.     BRA _higa3
  202.  
  203.     BSF IOCAP,IOCAP3
  204.     BCF IOCAN,IOCAN3
  205.     BCF C2,3
  206.  
  207.     MOVLW   'g'
  208.     CALL    dbg
  209.  
  210.     BRA _ioca3x
  211.  
  212. _higa3: BSF IOCAN,IOCAN3
  213.     BCF IOCAP,IOCAP3
  214.     BSF C2,3
  215.  
  216.     MOVLW   'G'
  217.     CALL    dbg
  218.    
  219. _ioca3x:
  220.     BANKSEL IOCCF
  221.     BTFSC   F3,2
  222.     BRA _iocc2x     ; bra to the next number
  223.     MOVFW   TS2A
  224.     BNZ _bncc2      ; bouncing here
  225.     MOVFW   T0 
  226.     MOVWF   TS2A
  227.  
  228.     BTFSS   C3,2
  229.     BRA _higc2
  230.  
  231.     BSF IOCCP,IOCCP2
  232.     BCF IOCCN,IOCCN2
  233.     BCF C3,2
  234.  
  235.     MOVLW   'i'
  236.     CALL    dbg
  237.  
  238.     BRA _iocc2x
  239.  
  240. _higc2: BSF IOCCN,IOCCN2
  241.     BCF IOCCP,IOCCP2
  242.     BSF C3,2
  243.  
  244.     MOVLW   'I'
  245.     CALL    dbg
  246.    
  247. _iocc2x:
  248.     BTFSC   F3,3
  249.     BRA _iocc3x     ; bra to the next number
  250.     MOVFW   TS2B
  251.     BNZ _bncc3      ; bouncing here
  252.     MOVFW   T0 
  253.     MOVWF   TS2B
  254.  
  255.     BTFSS   C3,3
  256.     BRA _higc3
  257.  
  258.     BSF IOCCP,IOCCP3
  259.     BCF IOCCN,IOCCN3
  260.     BCF C3,3
  261.  
  262.     MOVLW   'j'
  263.     CALL    dbg
  264.  
  265.     BRA _iocc3x
  266.  
  267. _higc3: BSF IOCCN,IOCCN3
  268.     BCF IOCCP,IOCCP3
  269.     BSF C3,3
  270.  
  271.     MOVLW   'J'
  272.     CALL    dbg
  273.    
  274. _iocc3x:
  275.     BRA _iocx
  276.  
  277. _bncb5: MOVLW   '5'
  278.     CALL    dbg
  279.     BRA _iocb5x
  280.  
  281. _bncb6: MOVLW   '6'
  282.     CALL    dbg
  283.     BRA _iocb6x
  284.  
  285. _bncb2: MOVLW   '2'
  286.     CALL    dbg
  287.     BRA _iocb2x
  288.  
  289. _bncb3: MOVLW   '3'
  290.     CALL    dbg
  291.     BRA _iocb3x
  292.  
  293. _bnca4: MOVLW   '4'
  294.     CALL    dbg
  295.     BRA _ioca4x
  296.  
  297. _bnca3: MOVLW   '1'
  298.     CALL    dbg
  299.     BRA _ioca3x
  300.  
  301. _bncc2: MOVLW   '7'
  302.     CALL    dbg
  303.     BRA _iocc2x
  304.  
  305. _bncc3: MOVLW   '8'
  306.     CALL    dbg
  307.     BRA _iocc3x
  308.  
  309. _iocx:  BANKSEL PIR1
  310.     BTFSS   PIR1,TMR1IF
  311.     BRA _tmr1x
  312.  
  313.     BCF PIR1,TMR1IF
  314.  
  315.     ; time set
  316.  
  317.     BANKSEL TMR1H       ; FFFF - 7 (in hex) ... 31k*258us=8
  318.     MOVLW   0xFF        ; 258us delay
  319.     MOVWF   TMR1H  
  320.     MOVLW   0xF8   
  321.     MOVWF   TMR1L  
  322.    
  323.     MOVFW   P5
  324.     BZ  _tmr1b5x    ; if there is nothing we check next
  325.     DECF    P5,F
  326.  
  327. _tmr1b5x:
  328.     MOVFW   P6
  329.     BZ  _tmr1b6x    ; if there is nothing we check next
  330.     DECF    P6,F
  331.  
  332. _tmr1b6x:
  333.     MOVFW   TS1A
  334.     BZ  _tmr1b2x    ; if there is nothing we check next
  335.     DECF    TS1A,F
  336.  
  337. _tmr1b2x:
  338.     MOVFW   TS1B
  339.     BZ  _tmr1b3x    ;if there is nothing we finish interrupt
  340.     DECF    TS1B,F
  341.  
  342. _tmr1b3x:
  343.     MOVFW   S1A
  344.     BZ  _tmr1a4x    ;if there is nothing we finish interrupt
  345.     DECF    S1A,F
  346.  
  347. _tmr1a4x:
  348.     MOVFW   S1B
  349.     BZ  _tmr1a3x    ;if there is nothing we finish interrupt
  350.     DECF    S1B,F
  351.  
  352. _tmr1a3x:
  353.     MOVFW   TS2A
  354.     BZ  _tmr1c2x    ;if there is nothing we finish interrupt
  355.     DECF    TS2A,F
  356.  
  357. _tmr1c2x:
  358.     MOVFW   TS2B
  359.     BZ  _tmr1x      ;if there is nothing we finish interrupt
  360.     DECF    TS2B,F
  361.  
  362. _tmr1x: RETFIE
  363.  
  364. init:   BANKSEL LATA
  365.     CLRF    LATA
  366.     CLRF    LATB
  367.     BSF LATB,7      ; RB7 default high
  368.     CLRF    LATC
  369.  
  370.     BANKSEL TRISA
  371.     MOVLW   10011011b   ; RA2,RA5,RA6 out
  372.     MOVWF   TRISA
  373.     MOVLW   01111111b   ; RB7 out
  374.     MOVWF   TRISB
  375.     MOVLW   11111111b   ; all in
  376.     MOVWF   TRISC
  377.  
  378.     BANKSEL INLVLA
  379.     BSF INLVLA,3    ; ST thresholds
  380.     BSF INLVLA,4
  381.     BSF INLVLB,2
  382.     BSF INLVLB,3
  383.     BSF INLVLC,2
  384.     BSF INLVLC,3
  385.  
  386.     ; setup Pin Properties
  387.  
  388.     BANKSEL ANSELA
  389.     CLRF    ANSELA
  390.     CLRF    ANSELB
  391.     CLRF    ANSELC
  392.  
  393.     BANKSEL OPTION_REG
  394.     BCF OPTION_REG,NOT_WPUEN
  395.  
  396.     ; initialize
  397.  
  398.     MOVLW   0x04   
  399.     MOVWF   T0
  400.  
  401.     CLRF    P5
  402.     CLRF    P6
  403.     CLRF    TS1A
  404.     CLRF    TS1B
  405.     CLRF    S1A
  406.     CLRF    S1B
  407.     CLRF    TS2A
  408.     CLRF    TS2B
  409.     CLRF    F1
  410.     CLRF    F2
  411.     CLRF    F3
  412.  
  413.     ; setup IOC
  414.  
  415.     BANKSEL IOCAP
  416.     MOVLW   10011011b
  417.     ;MOVWF  IOCAP       ; we check falling edge first (N)
  418.     MOVWF   IOCAN
  419.     MOVLW   0xFF
  420.     MOVWF   C2
  421.  
  422.     MOVLW   01111111b
  423.     ;MOVWF  IOCBP
  424.     MOVWF   IOCBN
  425.     MOVLW   0xFF
  426.     MOVWF   C1
  427.  
  428.     MOVLW   11111111b
  429.     ;MOVWF  IOCCP
  430.     MOVWF   IOCCN
  431.     MOVLW   0xFF
  432.     MOVWF   C3
  433.  
  434.     ; enable IRQ
  435.  
  436.     BANKSEL INTCON
  437.     BSF INTCON,IOCIE    ; enable IOC IRQ
  438.     BSF INTCON,PEIE ; enable peripheral IRQ--
  439.     BSF INTCON,GIE  ; enable global IRQ
  440.     BANKSEL PIE1
  441.     BSF PIE1,TMR1IE ; enable
  442.  
  443.     ; configure timer1 
  444.  
  445.     BANKSEL T1CON
  446.     BSF T1CON,6    
  447.     BSF T1CON,7
  448.     BSF T1CON,TMR1ON    ; enable Timer1 On bit
  449.     MOVLW   0xFF   
  450.     IORWF   TMR1H,F
  451.     IORWF   TMR1L,F
  452.  
  453.     ; setup EUSART Asynchronous Mode
  454.  
  455.     BANKSEL TX1STA
  456.     MOVLW   0           ; Baud rate 1Mbps
  457.     MOVWF   SPBRG
  458.  
  459.     BSF TX1STA,BRGH ; High speed baud rate
  460.     BSF RC1STA,SPEN
  461.     BSF TX1STA,TXEN ; Configures TX1STA
  462.  
  463.     BANKSEL OSCCON    
  464.     MOVLW   01111000b   ; IRCF to 16MHz
  465.     MOVWF   OSCCON
  466.  
  467.     BANKSEL RB7PPS
  468.     MOVLW   10100b      ; Output Source Selection TX/CK
  469.     MOVWF   RB7PPS
  470.     GOTO    main
  471.  
  472. dbg:    BANKSEL TX1STA
  473. dbgl:   BTFSS   TX1STA,TRMT
  474.     GOTO    dbgl
  475.     MOVWF   TX1REG
  476.     RETURN
  477.  
  478. wait:   BANKSEL OSCSTAT
  479. waitl:  BTFSS   OSCSTAT,HFIOFS
  480.     GOTO    waitl
  481.     RETURN
  482.  
  483. main:   CALL    wait
  484.     MOVLW   'A'
  485.     CALL    dbg
  486.  
  487. idle:   GOTO    idle       
  488.     end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top