;; ;; spreadspace pic utils ;; ;; ;; Copyright (C) 2011 Christian Pointner ;; ;; This file is part of spreadspace pic utils. ;; ;; spreadspace pic utils is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; any later version. ;; ;; spreadspace pic utils is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with spreadspace pic utils. If not, see . ;; ;; ------------------------------------- ;; PREAMBLE LIST p=16F1847 include "p16f1847.inc" __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF ;; ------------------------------------- ;; DEFINES ;; constants BUF_STARTH EQU 020h BUF_STARTL EQU 000h BUF_ENDH EQU 023h BUF_ENDL EQU 0BFh ;; I/O Pins ;; PortA C1m EQU .0 C2p EQU .1 AMP_OUT EQU .2 ADC_IN EQU .3 CCP4 EQU .4 ;; PortB SDI EQU .1 SDO EQU .2 INT EQU .3 SCK EQU .4 CS EQU .5 FILTER_EN EQU .7 ;; variables ;; all Pages CNT0 EQU H'0070' CNT1 EQU H'0071' CNT2 EQU H'0072' TMP EQU H'0073' FLAGS EQU H'007F' ;; bits ;; FLAGS UNDERRUN EQU .0 OVERRUN EQU .1 ;; ------------------------------------- ;; OFFSET org .0 goto init ;; ------------------------------------- ;; Interrupts org .4 movlb b'00000000' btfsc PIR1,SSP1IF goto int_spi retfie int_spi bsf PORTA,7 bcf PIR1,SSP1IF movlb b'00000100' movf SSP1BUF,w incf TMP,f movf TMP,w movwf SSP1BUF movlb b'00000000' bcf PORTA,7 retfie ;; ------------------------------------- ;; SUBROUTINES wbuf_reset movlw BUF_STARTH movwf FSR0H movlw BUF_STARTL movwf FSR0L bcf FLAGS,OVERRUN return ;; ------------------- wbuf_next btfsc FLAGS,UNDERRUN goto wbuf_move_ptr movf FSR1H,w xorwf FSR0H,w btfss STATUS,Z goto wbuf_move_ptr movf FSR1L,w xorwf FSR0L,w btfss STATUS,Z goto wbuf_move_ptr bsf FLAGS,OVERRUN return wbuf_move_ptr bcf FLAGS,UNDERRUN addfsr FSR0,1 movf FSR0H,w sublw BUF_ENDH btfss STATUS,C goto wbuf_wraparound btfss STATUS,Z return movf FSR0L,w sublw BUF_ENDL btfsc STATUS,C return wbuf_wraparound movlw BUF_STARTH movwf FSR0H movlw BUF_STARTL movwf FSR0L return ;; ------------------- rbuf_reset movlw BUF_STARTH movwf FSR1H movlw BUF_STARTL movwf FSR1L bsf FLAGS,UNDERRUN ;; ------------------- rbuf_next btfsc FLAGS,OVERRUN goto rbuf_move_ptr movf FSR0H,w xorwf FSR1H,w btfss STATUS,Z goto rbuf_move_ptr movf FSR0L,w xorwf FSR1L,w btfss STATUS,Z goto rbuf_move_ptr bsf FLAGS,UNDERRUN return rbuf_move_ptr bcf FLAGS,OVERRUN addfsr FSR1,1 movf FSR1H,w sublw BUF_ENDH btfss STATUS,C goto rbuf_wraparound btfss STATUS,Z return movf FSR1L,w sublw BUF_ENDL btfsc STATUS,C return rbuf_wraparound movlw BUF_STARTH movwf FSR1H movlw BUF_STARTL movwf FSR1L return ;; ------------------------------------- ;; INIT init ;; BANK 4 movlb b'00000100' movlw b'01000000' movwf SSP1STAT movlw b'00010000' movwf SSP1CON3 movlw b'00100100' movwf SSP1CON1 ;; BANK 3 movlb b'00000011' clrf ANSELA clrf ANSELB ;; BANK 2 movlb b'00000010' ;; BANK 1 movlb b'00000001' movlw b'01111111' movwf TRISA movlw b'01110011' movwf TRISB ; movlw b'01011000' ; 1 MHz ; movlw b'01100000' ; 2 MHz movlw b'01101000' ; 4 MHz ; movlw b'01110000' ; 8 MHz ; movlw b'01111000' ; 16 MHz movwf OSCCON movlw b'00001000' movwf PIE1 ;; BANK 0 movlb b'00000000' clrf PIR1 movlw b'11000000' movwf INTCON bcf PORTA,7 bcf PORTB,3 ;; ------------------------------------- ;; MAINLOOP main ;; movlw .255 ;; movwf CNT0 ;; outer1 ;; movlw .255 ;; movwf CNT1 ;; outer ;; movlw .20 ;; movwf CNT2 ;; inner ;; decfsz CNT2,f ;; goto inner ;; decfsz CNT1,f ;; goto outer ;; decfsz CNT0,f ;; goto outer1 ;; movlw b'00001000' ;; xorwf PORTB,f goto main ;; ------------------------------------- ;; END end