Sei sulla pagina 1di 4

LIST ; ; ; ; ; ; ; ; ; onics ; ; 7) ; ; ; ; ONICS ; ; ; ; ; ; ; ; ; ;

P=12C508, R=HEX TITLE 'Scale1' - MAIN PROGRAM FOR RUNNING MAGENTA PIPE DESCALER MK1' COPYRIGHT: CICUIT DESIGN, ARTWORK, AND SOFTWARE - MAGENTA ELECTRONICS MAGENTA ELECTRONICS LTD. 135 HUNTER STREET, BURTON ON TRENT, STAFFORDSHIRE DE14 2ST UK. TEL. 44 (0)1283 565435 FAX. 546932 EMAIL: MAGENTA_ELECTRONICS@COMPUSERVE.COM http://ourworld.compuserve.com/homepages/magenta_electr FULL KITS FOR THIS PROJECT - REF 868 PRICE POSTAGE UK 3.00, AIR MAIL 8.50 POWER SUPPLY 3.99 PUBLISHED IN OCTOBER 1997 EVERYDAY AND PRACTICAL ELECTR ASSEMBLER: MPASM v01.50 DEVELOPED USING MPLAB FOR WINDOWS/16 3.22.02 SET CHIP CONFIGURATION TO: MCLR - ENABLE, CP - OFF, WATCHDOG - OFF, INT. RC OSC VERSION 1 RELEASED 26/8/97 #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE INDF TMR0 PCL STATUS FSR OSCCAL GPIO 0000 0001 0002 0003 0004 0005 0006 ; ; ; ; ; ; ; ;FREQUENCY TABLE POINTER ;FREQUENCY COUNTING REGISTER 22.95 (SEPT 9

; #DEFINE TABPNT 0007 #DEFINE FCOUNT 0008 ; ; ; ; ; ; ; ; DEFINE GPIO BITS #DEFINE 0006,0 #DEFINE OUTPUT 0006,1 #DEFINE 0006,2 #DEFINE 0006,4 #DEFINE 0006,5 DEFINE STATUS REGISTER #DEFINE CARRY 0003,0 #DEFINE DCARRY 0003,1 #DEFINE ZERO 0003,2 #DEFINE RPAGE 0003,5 ORG MOVWF OSC. GOTO ; START ;AFTER POWER ON, OR RESET GO TO 'START' 0X00 OSCCAL

;OUTPUT SIGNAL

;CARRY FLAG ;DECIMAL CARRY FLAG ;ZERO FLAG ;REGISTER PAGE SELECT ;LOAD CALIBRATION VALUE FOR INTERNAL

ORG 0008 ;BEGIN CODE AT 0008 ; ;Clear registers 10 - 20: ; START MOVLW 0x10 ; INITIALISE FSR MOVWF FSR ; NXREG CLRF INDF ; CLEAR INDICATED REGISTER INCF FSR,1 ; STEP ON TO NEXT BTFSC FSR,4 ; CHECK TO SEE IF COMPLETE (HEX 20 REA CHED) GOTO NXREG ; LOOP UNTIL ALL REGISTERS ARE CLEAR ; ;Set up i/o ports ; MOVLW 0x0 ; SET UP INITIAL VALUES TO 0 IN W MOVWF GPIO ; WRITE TO GPIO PORT LATCHES MOVLW B'00111101' ; SET GPIO 1 TO OUTPUT - OTHERS TO INPUT TRIS GPIO ; WRITE TO 'TRIS' REGISTER ; ;Set up OPTION register contents ; MOVLW B'11000111' ; SET UP OPTION BITS - 1/256 PRESCALER T O TIMER OPTION ; TRANSFER TO OPTION REGISTER ; ;Initialise timer and frequency table pointer ; MAIN MOVLW 0X01 ;LOAD START VALUE FOR STEP TIMER MOVWF MOVLW MOVWF TMR0 0X23 TABPNT ; ;INITIALISE FREQUENCY TABLE POINTER ;

; ; ;****CODE FROM 'FREQ' DOWN TO END OF 'OFLOOP' IS CRITICAL FOR OUTPUT FREQUENCIES ;****DO NOT ALTER NUMBER OF MACHINE CYCLES ; FREQ CALL TABLE ;GET VALUE FOR FREQUENCY COUNTER MOVWF FCOUNT ;LOAD FREQUENCY COUNTER BSF OUTPUT ;TURN ON OUTPUT ; FTIMH MOVF TMR0,0 ;TEST FOR TIME UP BTFSC GOTO DECFSZ GOTO CALL MOVWF NOP NOP BCF ; FTIML BTFSC MOVF ZERO ZERO NXTF FCOUNT,1 FTIMH TABLE FCOUNT OUTPUT TMR0,0 ;TEST FOR TIME UP ;CONTINUE UNTIL TIMER IS ZERO ;CONTINUE UNTIL TIMER IS ZERO ;TIMER IS ZERO SO JUMP TO END ROUTINE ;DECREMENT FREQUENCY COUNTER ;LOOP UNTIL ZERO ;GET VALUE FOR FREQUENCY COUNTER ;LOAD FREQUENCY COUNTER ;NOPS ADDED TO MATCH ON AND OFF TIME

GOTO DECFSZ GOTO GOTO NXTF IMER MOVLW MOVWF DECF BTFSS GOTO BCF FLOOP BTFSS GOTO ; GOTO ; TABLE MOVF ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MOVF

NXTF FCOUNT,1 FTIML FREQ 0X01 TMR0 TABPNT,1 ZERO FREQ OUTPUT TMR0,0 ZERO FLOOP MAIN

;TIMER IS ZERO SO JUMP TO END ROUTINE ;DECREMENT FREQUENCY COUNTER ;LOOP UNTIL ZERO ;CONTINUE UNTIL TIMER IS ZERO ;RELOAD LOAD START VALUE FOR STEP T ; ;STEP ONE DOWN IN TABLE ;NOT ZERO SO DO NEXT FREQUENCY ;END OF TABLE SO TURN OFF FOR ONE STEP ;TEST TIMER FOR TIME UP ;TIMER IS ZERO SO JUMP TO END ROUTINE ;NOT ZERO SO LOOP UNTIL TIME IS UP ;SEQUENCE ENDED SO BEGIN AGAIN

ORG

0080 TABPNT,0 PCL 0X38 0X35 0X32 0X2F 0X2C 0X29 0X27 0X24 0X22 0X20 0X1E 0X1C 0X1B 0X1A 0X19 0X18 0X17 0X16 0X15 0X14 0X13 0X12 0X11 0X10 0X0F 0X0E 0X0D 0X0C 0X0B 0X0A

;LOAD TABLE POINTER INTO W ;ADD W TO CURRENT LOCATION ;RETURN WITH LOCATION CONTENTS IN W

RETLW RETLW RETLW RETLW RETLW RETLW ; ORG DATA DATA DATA DATA DATA DATA DATA ; DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA

0X09 0X08 0X07 0X06 0X05 0X04 0100 'M' 'A' 'G' 'E' 'N' 'T' 'A' 'E' 'L' 'E' 'C' 'T' 'R' 'O' 'N' 'I' 'C' 'S'

; ; ; THE FOLLOWING TWO LINES OF CODE WERE USED DURING DEVELOPMENT USING A WI NDOWED CHIP ; THEY ARE NECESSARY BECAUSE THE OSCILLATOR CALIBRATION CONSTANT IS ERASE D BY UV ; AND SO HAS TO BE REMEMBERED AND RELOADED EACH TIME. THE NORMAL PLASTIC CHIP ; HAS ITS CALIBRATION VALUE IN THE SAME LOCATION, BUT CANNOT BE ERASED. ; ;*** ORG 01FF ;***** ONLY FOR EPROM CHIP - INSERT C ALIBRATION CONSTANT ;*** DATA 0C50 ;***** 0C50 RETLW #50 IN EEPROM CHIP 1 ; ; ; ; THE CONFIGURATION WORD STORED AT 0FFF SETS UP THE OPERATING MODE ; ; IN THIS CASE: MCLR - ENABLED, CODE PROTECTION - OFF, ; WATCHDOG - DISABLED, INTERNAL RC OSCILLATOR. ; ; NOTE THAT SOME VERSIONS OF MPASM GIVE AN ERROR MESSAGE BECAUSE OF THE H IGH ; ADDRESS LOCATION, BUT STILL LOAD THE CODE CORRECTLY. ; ORG 0FFF ;SET UP CONFIGURATION - GIVES ERROR MESSA GE - BUT IGNORE DATA 0X1A ; END

Potrebbero piacerti anche