Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

16c84 code on 16f84a

Status
Not open for further replies.

serj.t.s

New Member
I'm trying to program a 16F84A with old 16C84 code:
Code:
; PROGRAM TIL STYRING AF PULSER TIL PI DETEKTOR
; REV. 4.0
; REV. 13/06-98
; AF MARK PAULS
;
; Ved opstart allerførste gang holdes RA4 (port A.4) høj og 
; derved intialiseres rec, puls, wait tiden i EE prommen. 
; Hvis RA4 er lav under start aflæses EE prommen istedet.
; Bemærk at RA4 har dobbelt funktion idet den ved høj (efter 
; start kan bruges (via RA0,RA1) til justering af antal pulser
; HUSK at sætte lav igen inden næste ON/OFF.
; 
;
;
;	LIST  P=16C84, F=INHX8M


	include "p16c84.inc" ;
; uP PIC16C84 include modul ver. 1.00
 
;----------------- DIV -----------------
   
  	ORG      0            ;Dummy origin
  	goto     INIT;        ;hop til INIT

;-------------Constanter--------------

d1         equ  .20         ; pulstid i us
d2         equ  .10         ; (wait before rec.) vent på respons i us
d3         equ  .5          ; modtag i ms
d4         equ  .40         ; (ms wait before next) vent ms inden n‘ste puls
delay      equ  .6;         ; delay til 1 ms timer
loop       equ  0Ch         ; RAM 0C
xus        equ  10h         ; RAM 10
xms        equ  11h         ; RAM 11
puls_time  equ  15h         ; RAM 15
w_b_r      equ  16h         ; RAM 16
rec_time   equ  17h         ; RAM 17
w_b_n      equ  18h         ; RAM 18


; RAM 11        ;benyttes af x ms timer
; RAM 12,13     ;benyttes af   us timer
; RAM 14        ;8 flag, F0..F7
; RAM 15        ;puls_time
; RAM 16        ;w_b_r
; RAM 17        ;rec_time
; RAM 18        ;w_b_n
;
; EEADR 00      ;s‘ttes 0 ved opstart

;---------------- TIMER ------------------
wait_1us;                  ; ca 1us wait
     	nop;
	return

wait_xus                   ;vent x mikrosek.
J4
	call     wait_1us   
	decfsz   xus,1        ;T‘l xus-1
	goto     J4
	return

wait_1ms;    ;1 ms timer
	movlw    .5           ;antal gennemloeb for 1 ms
	movwf    13           ;flyt w til RAM 13
J2 	movlw    delay;       ;w = delay (korrigering)
	movwf    12           ;flyt w til RAM 12
J1 	decfsz   12,1         ;T‘l RAM12-1 eller fors‘t
	goto     J1           ;repeat
	decfsz   13           ;T‘l RAM13-1 eller slut
	goto     J2           ;repeat
	return	

wait_xms;                  ;Vent x millisek
J3     	call     wait_1ms   
     	decfsz   xms,1        ;T‘l xms-1
     	goto     J3
	return

;----------- EEPROM MODUL TIL PIC16C84
;Rev 1.00
;d.27/07-95
; note: use timer

wadr           	equ 2Fh           ; adresse i RAM 2F
value         	equ 2Eh           ; Data i RAM 2E

WR_EEPROM                       ; skriv EEPROM (data i RAM 2E+adr i RAM 2E)
     	movf     wadr,W             ; w=adr
     	movwf    EEADR             ; EEADR=w
     	movf     value,W            ; w=data
     	movwf    EEDATA            ; EEDATA=w
     	; --- write sequnce
     	bsf      STATUS,RP0        ; EEPROM write enable
	bcf      INTCON,GIE	   ; disable interupts
	movlw    0x55              ; w=55h
	movwf    EECON2            ; EECON2=w
	movlw    0xAA              ; w=AAh
	movwf    EECON2            ; EECON2=w
	bsf      EECON1,WR         ; EECON1=write
	movlw    .100              ;load tid skrivning
	movwf    xms               ;flyt w til xms
	call     wait_xms          ;vent i ms
    ; --- end
;return

RD_EEPROM                       ; adr.skal v‘re i RAM 2F 
	movf      wadr,W 	; data afleveres i RAM 2E
	movwf     EEADR         ; EEADR=w (adr)
	bsf	  STATUS,RP0	; bank 1
	bsf       EECON1,RD     ; set RD bit (slukker selv)
	bcf	  STATUS,RP0	; bank 0
	movf      EEDATA,W      ; w=data
	movwf     value         ; data=w
   ; --- end
	return    
;-------------- END EEPROM MODUL


;------------ DATA ÆNDRINGER -----------
Update 
	btfsc    5,4		;tjek først bit 4
	goto     pulsjust		;juster antal pulser
	btfsc    5,0               ;Hvis bit 0 er sat
	incf     rec_time,1        ;"step up" rec. time + 1
	btfsc    5,1               ;Hvis bit 1 er sat
	decfsz   rec_time,1        ;"step down" rec. time - 1
	btfsc    5,2               ;Hvis bit 2 er sat
	incf     w_b_r,1           ;"step up" wait before rec + 1
	btfsc    5,3               ;Hvis bit 3 er sat
	decfsz   w_b_r,1           ;"step down" wait before - 1
	goto slut                  ;ellers slut     

	;hvis 5.4
pulsjust
	btfsc    5,0               ;Hvis bit 0 og 4 er sat
	incf     puls_time,1       ;"step up" puls + 1
	btfsc    5,1               ;Hvis bit 1 og 4 er sat
	decfsz   puls_time,1       ;"step down" puls - 1
	GOTO     slut		;hop til slut

slut
	;opsæt adresse + data til EEPROM ændring
	;gem antal pulser
	movf     puls_time,W	;flyt til W
	movwf    value		;value = rec_time
	movwf    wadr       	;set adresse
	movlw    01h		;til 01 hex i EE
	CALL     WR_EEPROM	;skriv i EE   
	;gem ventetid før modtagning
	movf     w_b_r,W	;flyt til W
	movwf    value		;value = rec_time
	movwf    wadr         	;set adresse
	movlw    02h		;til 02 hex i EE
	CALL     WR_EEPROM	;skriv i EE
	;gem modtager tid
	movf     rec_time,W	;flyt til W
	movwf    value		;value = rec_time
	movwf    wadr           ;set adresse
	movlw    03h		;til 03 hex i EE
	CALL     WR_EEPROM	;skriv i EE  

	;timer start  
	movlw    04h
	movwf    loop              ;sæt 2 i RAM 0C 
T_1                         
	nop                        ;VENT 1 sek
	movlw   .255;              ;1/4 sek load
	movwf    xms               ;flyt w til xms
	call     wait_xms          ;vent i w_b_n ms
	decfsz   loop,1            ;loop 
	goto T_1
	;end
	return

DEFAULT
	movlw      d1              ; w= delay 1
	movwf      puls_time       ; Puls tid  = w
	movwf      d2              ; w= delay 2
	movwf      w_b_r           ; wait before receive
	movwf      value           ; data (EE) = w
	movlw      d3              ; w= delay 3
	movwf      rec_time        ; record time
	movwf      value           ; data (EE) = w
	movlw      d4              ; w= delay 4
	movwf      w_b_n           ; ventetid (slettes sidenhen)
	CALL	Update		; skriv til EE
	goto MAIN  


;--------------INIT-------------------
INIT
	;output init
	movlw    B'11111111'  	;set w= 0D
	movwf    PORTB       	;flyt w til port B
	movlw    B'00000000'  	;set w= 00
	tris     PORTB       	;set alle I/O retning til ud
	;input init
	movlw    B'11111'     	;set bit 0..4 til input
	tris     PORTA       	;sæt port A
	;init RAM/EEPROM
	btfsc      PORTA,4      ;Hvis port A bit 0 læs default
	goto       DEFAULT
	movlw      01h;        ;w=01h
	movwf      wadr        ;adr=w
	call       RD_EEPROM   ;Læs EE
	movf       value,W     ;w=data fra EEPROM
	movwf      puls_time   ;puls=w
	movlw      02h;        ;w=02h
	movwf      wadr        ;adr=w
	call       RD_EEPROM   ;Læs EE
	movf       value,W     ;w=data fra EEPROM
	movwf      w_b_r       ;wait before receive
	movlw      03h;        ;w=03h
	movwf      wadr        ;adr=w
	call       RD_EEPROM   ;Læs EE
	movf       value,W     ;w=data fra EEPROM
	movwf      rec_time    ;record time
	movlw      d4          ;w=d4     (slettes sidenhen)
	movwf      w_b_n       ;ventetid (slettes sidenhen)
	goto     MAIN;            ;HOP TIL HOVEDLØKKE





;---------------- PULS -------------------
puls 
	bcf      PORTB,0          ;s‘t bit 3 = 0 (output)
	movf     puls_time,0       ;flyt puls_time til w
	movwf    xus               ;flyt tid til RAM11
	call     wait_xus          ;vent i x us
	bsf      PORTB,0
	return

;--------------- MODTAG ------------------
Receiver
	bcf      PORTB,3          ;s‘t bit 0 = 0 (modtager åbner)
	movf     rec_time,0        ;flyt tid i us til w
	movwf    xus                ;flyt tid i RAM16
	call     wait_xus          ;vent i x us
	bsf      PORTB,3          ;luk modtager
	return


;-----------------MAIN--------------
MAIN
	; Puls
	call     puls         ;kald puls rutine
	; vent
	movf     w_b_r,W      ;load w med ventetid
	movwf    xus          ;flyt w til xus
	call     wait_xus     ;vent i w_b_r us
	; modtag  
	call     Receiver     ;åben modtager
	; vent     
	movf     w_b_n,W      ;load tid til næste puls
	movwf    xms          ;flyt w til xms
	call     wait_xms     ;vent i w_b_n ms
	; aflæs input
	btfsc    5,0          ;hvis up aktiv
	call     Update       ;kald update
	btfsc    5,1          ;hvis down aktiv
	call     Update       ;kald update
	btfsc    5,2          ;hvis up aktiv
	call     Update       ;kald update
	btfsc    5,3          ;hvis down aktiv
	call     Update       ;kald update
	; repeat
	goto     MAIN
	end
;SLUT

The only change I made was change the include filename to 16f84A.inc but mplab gives me the next error:
Verify failed (MemType = Program, Address = 0x0, Expected Val = 0x285E, Val Read = 0x3FFF)

My question is should this code be directly compatible, if so what can possibly be wrong? Thanks.
 
well...

i'm also new to pic controllers...

but i know one thing.. the difference between 16f84 & 16f84a...

the difference is nothing... just a review of initial design...

Although you are asking for 16c84... i'm not sure.. but i feel no difference...

read this.. " second question.. first para.. "
Regards,

simran..:)
 
The F84 was just a later version of the C84, and cured a protection loophole in the C84 - as far as I can remember the only difference was in the config fuses, and the programming algorithm.

The verify fail at 0x00 message usually means the PIC isn't being switched to programming mode.
 
serj.t.s said:
The only change I made was change the include filename to 16f84A.inc
Have you update the LIST directive too?
Looks like you're experiencing problems programming the device.
I assembled your code and the hex file was built by MPLAB... just a couple of warnings showed up because the TRIS instruction is no longer recommended.
You'll have to set the configuration bits too.
 
Status
Not open for further replies.

Latest threads

New Articles From Microcontroller Tips

Back
Top