|
INSIDER - Examples |
|
2003-12-06 |
There are three examples available:
PIC Example: Using MACRO; EXAMPLE 1: macro INSIDER UserReg ; This macro sends UserReg register contents to INSIDER's display. ; UserReg contents remains unchanged; no other register is required, ; W is unused, no stack level is necessary. ; 40 instructions and 40 instruction cycles are required. ; INSIDER setup (DIP switch positions): ; * CP = 0 (falling edge) ; * EU = 0 (enable unused) ; * EF = 0 (enable = clock enable) ; * EP = 0 (enable active low) ;----------------------------------------------------------------------- ; HARDWARE DEFINITION list F=INHX8M, P=16F84A, R=HEX ; compiler directives __config 0x3FFB ; configuration word ;----------------------------------------------------------------------- ; User Pins (Tris: 0x3F) #define ICLK PORTB,7 ; INSIDER clock #define IDATA PORTB,6 ; INSIDER data ; Special Function Registers INDF equ 00h TMR0 equ 01h ; bank 0 ROPTION equ 01h ; bank 1 PCL equ 02h STATUS equ 03h FSR equ 04h PORTA equ 05h ; bank 0 PORTB equ 06h ; bank 0 TRISA equ 05h ; bank 1 TRISB equ 06h ; bank 1 #define ZERO STATUS,2 ; Zero flag #define DC STATUS,1 ; DC flag #define CARRY STATUS,0 ; C flag ; User registers UserReg1 equ 0x0C UserReg2 equ 0x0D ;----------------------------------------------------------------------- ; macro definition Insider macro OutReg bcf IDATA ; bit 7 btfsc OutReg, 7 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 6 btfsc OutReg, 6 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 5 btfsc OutReg, 5 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 4 btfsc OutReg, 4 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 3 btfsc OutReg, 3 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 2 btfsc OutReg, 2 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 1 btfsc OutReg, 1 bsf IDATA bsf ICLK bcf ICLK bcf IDATA ; bit 0 btfsc OutReg, 0 bsf IDATA bsf ICLK bcf ICLK endm Bnk0 macro ; set bank 0 bcf STATUS,5 endm Bnk1 macro ; set bank 1 bsf STATUS,5 endm ;----------------------------------------------------------------------- org 0x00 goto Start ; 1st instruction - jump to program start org 0x10 ; program start Start: Bnk1 movlw 0x3F movwf TRISB ; set-up port B direction Bnk0 ; (INSIDER pins RB6 and RB7 are outputs) clrf PORTB ; set log.0 levels on INSIDER pins movlw 0x1A movwf UserReg1 ; put data to UserReg1 movlw 0x3F movwf UserReg2 ; put data to UserReg2 nop nop ; ...user's code Insider UserReg1 ; show UserReg1 value on INSIDER's display nop nop ; ...user's code Insider UserReg2 ; show UserReg2 value on INSIDER's display nop nop ; ...user's code Stop: goto Stop end PIC Example: Using CALL; EXAMPLE 2: call INSIDER, W=parameter ; This subroutine sends W register contents to INSIDER's display. ; One user register (IReg) and one stack level is required. ; W register contents remains unchanged. ; 20 instructions are required. ; INSIDER setup (DIP switch positions): ; * CP = 0 (falling edge) ; * EU = 0 (enable unused) ; * EF = 0 (enable = clock enable) ; * EP = 0 (enable active low) ;----------------------------------------------------------------------- ; HARDWARE DEFINITION list F=INHX8M, P=16F84A, R=HEX ; compiler directives __config 0x3FFB ; configuration word ;----------------------------------------------------------------------- ; User Pins (Tris: 0x3F) #define ICLK PORTB,7 ; INSIDER clock #define IDATA PORTB,6 ; INSIDER data ; Special Function Registers INDF equ 00h TMR0 equ 01h ; bank 0 ROPTION equ 01h ; bank 1 PCL equ 02h STATUS equ 03h FSR equ 04h PORTA equ 05h ; bank 0 PORTB equ 06h ; bank 0 TRISA equ 05h ; bank 1 TRISB equ 06h ; bank 1 #define ZERO STATUS,2 ; Zero flag #define DC STATUS,1 ; DC flag #define CARRY STATUS,0 ; C flag ; INSIDER auxiliary register IReg equ 0x0C ; pracovni registr Insideru ; User register UserReg equ 0x0D ;----------------------------------------------------------------------- Bnk0 macro ; set bank 0 bcf STATUS,5 endm Bnk1 macro ; set bank 1 bsf STATUS,5 endm ;----------------------------------------------------------------------- ; Startup org 0x00 goto Start ; 1st instruction - jump to program start ;----------------------------------------------------------------------- ; INSIDER procedure org 0x05 Insider:movwf IReg ; save W to IReg movlw 0x08 ; preset cycle length ICykl: rlf IReg,f bcf IDATA btfsc CARRY ; set pin IDATA bsf IDATA bsf ICLK bcf ICLK ; falling edge writes bit to INSIDER btfss CARRY ; check CARRY bit state goto Ic0 ; CARRY is 0 addlw -1 ; CARRY was 1, W=W-1 bsf CARRY ; restore CARRY state Istop: btfss ZERO goto Icykl ; repeat 8 times rlf IReg,f ; restore IReg register movf IReg,w ; restore W register return Ic0: addlw -1 ; CARRY was 0, W=W-1 bcf CARRY ; restore CARRY state goto Istop ;----------------------------------------------------------------------- Start: Bnk1 movlw 0x3F movwf TRISB ; set-up port B direction Bnk0 ; (INSIDER pins RB6 and RB7 are outputs) clrf PORTB ; set log.0 levels on INSIDER pins nop nop ; ...user's code movlw 0x1A call Insider ; show W value on INSIDER's display nop nop ; ...user's code movlw 0xA6 ; put data to UserReg movwf UserReg ; ... movf UserReg,w ; read UserReg call Insider ; show UserReg value on INSIDER's display nop nop ; ...user's code Stop: goto Stop end FPGA Xilinx Example SchematicsFPGA - EXAMPLE: block sends data to INSIDER in 2-wire mode INSIDER setup (DIP switch positions):
|
© ASIX s.r.o., 1991-2003. All rights reserved. |