Autor Tema: Ayuda con Bootloader Screamer y PARSIC  (Leído 2070 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Ayuda con Bootloader Screamer y PARSIC
« en: 04 de Mayo de 2012, 01:19:35 »
Compañeros, recien empiezo a usar este Bootloader (Screamer 1.4) para programar el PIC16F877A. Resulta que he conseguido programar el PIC mediante este Boot con varios compiladores (MPASM, CCS, PicBasicPRO, FlowCODE), el unico que me ha dado guerra es PARSIC. Introduzco al inicio del codigo ASM el comado "GOTO main" seguido de "ORG 4", entonces el programa se carga en el PIC pero no hace nada. Quizas estoy colocando mal estas instrucciones aunque ya he probado a colocarlas en otras partes del codigo. Especificamente estoy tratando con el programa basico de hacer destellar un LED colocado sobre el bit 0 del puerto B (RB0) a una frecuencia de 1Hz y ciclo de trabajo del 50%. Lo cierto es que el codigo ASM generado por PARSIC para este sencillo programa en bastante denso, pero la interface es bastante atractiva (para fines didacticos parece exelente) es por esto que me empeñado en hacerle funcionar pero no he dado pie con bola. Si alguien sabe de algun truco por favor compartalo.

Saludos...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ayuda con Bootloader Screamer y PARSIC
« Respuesta #1 en: 05 de Mayo de 2012, 01:29:52 »
Muy bien ya lo tengo. Era solo cosa de estudiar un poco el codigo que PARSIC genera. Este es el codigo que genera PARSIC de forma directa:

Código: [Seleccionar]
; Source created with Parsic Version 3.x

; at              : 12/06/2010 03:05:31 a.m.


; Project File    : C:\Parsic\samples\samp01.PIC

; Project Version : 1.0.1

; Created         : 12/06/2010 03:01:57 a.m.

; Last change     : 12/06/2010 03:05:29 a.m.

PROCESSOR 16F84A

INCLUDE P16F84A.INC

RADIX DEC


__IDLOCS H'0100'

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

; Diverses

ZERO EQU Z ; ZERO-Flag
CARRY EQU C ; CARRY-Flag


; Variable

SYS_WSAV = 12 ; located in Bank 0, 1
SYS_SSAV = 13 ; located in Bank 0, 1
DELAY = 14 ; located in Bank 0, 1
DELAY_HI = 15 ; located in Bank 0, 1
RAM = 16 ; located in Bank 0, 1

ERRORLEVEL -302 ; disable warning (Bankswitching)
ERRORLEVEL -306 ; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

ORG 0

CLRF STATUS ; switch to RAM-Bank 0
GOTO SYS_INIT
NOP
NOP

;****************************************
;Interrupt-Adress
;****************************************

MOVWF SYS_WSAV ; save register
SWAPF STATUS,W
CLRF STATUS ; bank 0
MOVWF SYS_SSAV

BCF INTCON,T0IF ; Interrupt quitieren

INCFSZ DELAY,F
GOTO SYS_INT_LABEL_0
INCF DELAY_HI,F

SYS_INT_LABEL_0

EXITINT

SWAPF SYS_SSAV,W ; Register zurück
MOVWF STATUS
SWAPF SYS_WSAV,F
SWAPF SYS_WSAV,W

RETFIE


;****************************************
; Subroutines
;****************************************


;****************************************
;Initialisierung
;****************************************


SYS_INIT

MOVLW B'00100000'
MOVWF INTCON

; Set output before direction

BCF STATUS,RP0 ; Bank 0
MOVLW B'00000000'
MOVWF PORTA

MOVLW B'00000000'
MOVWF PORTB

MOVLW 15
BSF STATUS,RP0 ; Bank 1
MOVWF OPTION_REG


; Richtung setzen

MOVLW B'11111111'
MOVWF TRISA

MOVLW B'11111110'
MOVWF TRISB

; init vars


; Clear RAM

MOVLW 12
MOVWF FSR
CR1
CLRF INDF
INCF FSR,F
MOVFW FSR
SUBLW 80
BTFSS STATUS,ZERO
GOTO CR1


BCF STATUS,RP0 ; Bank 0
CLRF TMR0
BCF INTCON,T0IF
BSF INTCON,GIE ; Interrupt freigeben

;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

;***************************************************
; Timer -> DELAY
;***************************************************

MOVLW 3 ; Test auf >=
SUBWF DELAY_HI,W ;F-W -> W
BTFSS STATUS,ZERO
GOTO LABEL_DELAY_CHECK
MOVLW 209
SUBWF DELAY,W ;F-W -> W
LABEL_DELAY_CHECK
BTFSS STATUS,CARRY
GOTO LABEL_DELAY_ENDE

LABEL_DELAY_RESET
MOVLW 3 ; Test auf >=
SUBWF DELAY_HI,F ;F-W -> F
MOVLW 209
SUBWF DELAY,F ;F-W -> F
BTFSS STATUS,CARRY
DECF DELAY_HI,F

LABEL_DELAY_SET ; toggel output
BCF STATUS,RP0 ; Bank 0
BTFSC PORTB,0
GOTO LABEL_DELAY_CLR
BSF PORTB,0
GOTO LABEL_DELAY_ENDE
LABEL_DELAY_CLR
BCF PORTB,0
LABEL_DELAY_ENDE

;****************************************

GOTO MAIN


END


Estas son las lineas que hay que agregar para que el Screamer Bootloader pueda cargar el codigo dentro del PIC:

Código: [Seleccionar]
; Source created with Parsic Version 3.x

; at              : 04/05/2012 06:30:29 p.m.


; Project File    : C:\Parsic\samples\blink.PIC

; Project Version : 1.0.0

; Created         : 04/05/2012 06:29:57 p.m.

; Last change     : 04/05/2012 06:30:25 p.m.

PROCESSOR 16F877

INCLUDE P16F877.INC

RADIX DEC


__IDLOCS H'0100'

__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _BODEN_OFF & _XT_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO EQU Z ; ZERO-Flag
CARRY EQU C ; CARRY-Flag


; Variable

TR1 = 32 ; located in Bank 0
TR1_HI = 33 ; located in Bank 0
RAM = 34 ; located in Bank 0
SYS_WSAV = 115 ; located in Bank 0, 1, 2, 3
SYS_SSAV = 116 ; located in Bank 0, 1, 2, 3
SYS_PSAV = 117 ; located in Bank 0, 1, 2, 3

ERRORLEVEL -302 ; disable warning (Bankswitching)
ERRORLEVEL -306 ; disable warning (Pageswitching)

;****************************************
;Programmanfang
;****************************************

[b]org 0x00
goto inicio

org 0x04
goto rsi

org 0x05

inicio:[/b] CLRF STATUS ; switch to RAM-Bank 0
MOVLW HIGH SYS_INIT ; set page
MOVWF PCLATH
GOTO SYS_INIT

;****************************************
;Interrupt-Adress
;****************************************

[b]rsi:[/b] MOVWF SYS_WSAV ; save register
SWAPF STATUS,W
CLRF STATUS ; bank 0
MOVWF SYS_SSAV
MOVFW PCLATH
MOVWF SYS_PSAV
CLRF PCLATH

BCF INTCON,T0IF ; Interrupt quitieren

BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
INCFSZ TR1,F
GOTO SYS_INT_LABEL_0
INCF TR1_HI,F

SYS_INT_LABEL_0

EXITINT
MOVFW SYS_PSAV
MOVWF PCLATH

SWAPF SYS_SSAV,W ; Register zurück
MOVWF STATUS
SWAPF SYS_WSAV,F
SWAPF SYS_WSAV,W

RETFIE


;****************************************
; Subroutines
;****************************************


;****************************************
;Initialisierung
;****************************************


SYS_INIT

MOVLW B'00100000'
MOVWF INTCON

; Set output before direction

BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
MOVLW B'00000000'
MOVWF PORTA

MOVLW B'00000000'
MOVWF PORTB

MOVLW B'00000000'
MOVWF PORTC

MOVLW B'00000000'
MOVWF PORTD

MOVLW B'00000000'
MOVWF PORTE

MOVLW 143
BSF STATUS,RP0 ; Bank 1
MOVWF OPTION_REG

MOVLW 6 ; all Digital
MOVWF ADCON1

; Richtung setzen

MOVLW B'11111111'
MOVWF TRISA

MOVLW B'11111110'
MOVWF TRISB

MOVLW B'11111111'
MOVWF TRISC

MOVLW B'11111111'
MOVWF TRISD

MOVLW B'00000111'
MOVWF TRISE

; init vars


; Clear RAM

BCF STATUS,IRP
MOVLW 32
MOVWF FSR
CR1
CLRF INDF
INCF FSR,F

BTFSS FSR,7
GOTO CR1
BSF FSR,5
CR2
CLRF INDF
INCF FSR,F
MOVLW H'F0'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR2
BSF STATUS,IRP
MOVLW 16
MOVWF FSR
CR3
CLRF INDF
INCF FSR,F
MOVLW H'70'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR3
MOVLW 144
MOVWF FSR
CR4
CLRF INDF
INCF FSR,F
MOVLW H'F0'
SUBWF FSR,W
BTFSS STATUS,ZERO
GOTO CR4


BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
CLRF TMR0
BCF INTCON,T0IF
BSF INTCON,GIE ; Interrupt freigeben

;**********************************
;******* Haupt-Programm ***********
;**********************************

MAIN

;***************************************************
; Timer -> TR1
;***************************************************

MOVLW 1 ; Test auf >=
BCF STATUS,RP0 ; Bank 0
BCF STATUS,RP1 ; Bank 0
SUBWF TR1_HI,W ;F-W -> W
BTFSS STATUS,ZERO
GOTO LABEL_TR1_CHECK
MOVLW 232
SUBWF TR1,W ;F-W -> W
LABEL_TR1_CHECK
BTFSS STATUS,CARRY
GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET
MOVLW 1 ; Test auf >=
SUBWF TR1_HI,F ;F-W -> F
MOVLW 232
SUBWF TR1,F ;F-W -> F
BTFSS STATUS,CARRY
DECF TR1_HI,F

LABEL_TR1_SET ; toggel output
BTFSC PORTB,0
GOTO LABEL_TR1_CLR
BSF PORTB,0
GOTO LABEL_TR1_ENDE
LABEL_TR1_CLR
BCF PORTB,0
LABEL_TR1_ENDE

;****************************************

GOTO MAIN


END


Espero que le sirva a alguien. Por cierto, tengo algunos ejemplillos de PARSIC que me gustaria compartir, asi que tan pronto me organize abrire un tema nuevo para tal fin. Hasta pronto.
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: Ayuda con Bootloader Screamer y PARSIC
« Respuesta #2 en: 05 de Mayo de 2012, 01:38:59 »
No me aparecieron las negrista, mmmm, sigo sin saber usar correctamenta las herramientas del foro. Espero que se entienda.
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"


 

anything