Kod till PIC16F877A-- Edit: 887

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Visst har funderat på att använda PIC16F886-I/SO men det finns ju ingen som har den hemma så får förbli 16f876a ett tag till... Verkar som grossisterna inte fattat att den finns...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

:dead: Nu har jag tänkt helt fel! :S Jag har hela tiden menat 887, jag har bara blandat ihop dem :S:S Också har jg bestält en uppsättning med 877A :verysad:

Har du något blink-a-LED program till 887 också??

//Daniel A
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Det skall inte vara någon större skillnad på dem. Troligen går koden rakt av om du ändrar referenserna. Möjligen måste du confa något SFR som hör klockorna till, men kör du kristall så går det troligen rakt av.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK... :-)
Man skulle kunna önska att de ändade lite mer i numrena på dom... :-)

887 är väldigt lik 877(A).

__CONFIG raden behöver sannolikt kompletteras/justeras.
Kolla INC filen och sidan om CONFIG registret i databladet.

Sedan kan det vara så (har inte kollat) att 887 (*om* man kör med
INTOSC) går igång med lite konstig hastighet. Även om INTOSC kan köra
upp till 8 MHz, så är det inte alla modeller som har det som default. Så en
liten justering av OSCCON kan behövas.

Jag tror att 887 har fler pinnar med analoga funktionen än vad 877A
har/hade, så kolla vad det står på POTRx sidorna om att stänga av ADC
och komparatorer.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag ska ta mig i nack skinnet o göra det nu snart.

//Daniel A
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag tänkte köra lite med 877A eftersom jag har ett lager hemma nu. Men jag såg precis att det inte finns någin internOSC (?) :S Hur stabilt kan man köra med RC tekniken?? Hur snabb kan man få den? Eller ska jag direkt gå o köpa lite kristaller av dig (sodjan)??

Edit: Skulle jag kunna köra med en sån här: 74-640-01 och 65-848-58 (http://www.Elfa.se)

Edit 2: Eller klarar den bara 20Mhz kristal??


//Daniel A
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag har hittat en exempel kod til 887 :happy:

Kod: Markera allt

;**********************************************************************
;   This file is a basic code template for assembly code generation   *
;   on the PIC16F887. This file contains the basic code               *
;   building blocks to build upon.                                    *
;                                                                     *
;   If interrupts are not used all code presented between the ORG     *
;   0x004 directive and the label main can be removed. In addition    *
;   the variable assignments for 'w_temp' and 'status_temp' can       *
;   be removed.                                                       *
;                                                                     *
;   Refer to the MPASM User's Guide for additional information on     *
;   features of the assembler (Document DS33014).                     *
;                                                                     *
;   Refer to the respective PIC data sheet for additional            *
;   information on the instruction set.                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Filename:	    xxx.asm                                           *
;    Date:                                                            *
;    File Version:                                                    *
;                                                                     *
;    Author:                                                          *
;    Company:                                                         *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files required:                                                  *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:                                                           *
;                                                                     *
;                                                                     *
;                                                                     *
;                                                                     *
;**********************************************************************


	list		p=16f887	; list directive to define processor
	#include	<p16f887.inc>	; processor specific variable definitions


; '__CONFIG' directive is used to embed configuration data within .asm file.
; The labels following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

	__CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
	__CONFIG    _CONFIG2, _WRT_OFF & _BOR21V



;***** VARIABLE DEFINITIONS
w_temp		EQU	0x71		; variable used for context saving
status_temp	EQU	0x72		; variable used for context saving
pclath_temp	EQU	0x73		; variable used for context saving

;**tle spodaj daš vse blabla EQU 0xZZ, kje jih lahko daš, poglej v datasheet.

stevec		EQU	0x20		;general purpose stevec
stevec_1	EQU	0x21		;števec, ko delam z RAMom

;**tle spodaj daš vse #define krneki neki druzga, kar jih maš.

#define		RS		PORTE,0
#define		E		PORTE,1

;tle spodaj daš pa še tabele za EPROM, èe ga tvoj PIC ima. Narediš tako:

		org  		0x2100       
		de  		"ASCII v tabeli"

;ali pa tako

		org  		0x210E       
		de  		0x00,0x01,0xFF


;**********************************************************************
	ORG     0x000             ; processor reset vector

	nop
  	goto    main              ; go to beginning of program


	ORG     0x004             ; interrupt vector location

	movwf   w_temp            ; save off current W register contents
	movf	STATUS,w          ; move status register into W register
	movwf	status_temp       ; save off contents of STATUS register
	movf	PCLATH,w	  ; move pclath register into w register
	movwf	pclath_temp	  ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere
;sem noter grejo interrupti. Rutine kveèjemu jih poklièeš od tle,
;ne pa uporabljat GOTO.

	movf	pclath_temp,w	  ; retrieve copy of PCLATH register
	movwf	PCLATH		  ; restore pre-isr PCLATH register contents
	movf    status_temp,w     ; retrieve copy of STATUS register
	movwf	STATUS            ; restore pre-isr STATUS register contents
	swapf   w_temp,f
	swapf   w_temp,w          ; restore pre-isr W register contents
	retfie                    ; return from interrupt



main

; remaining code goes here


;Tle noter pa naprej kuckaš, kaj bo kje. Zaèneš nekako tako


;PORTA ON
;Nastavi PORTA na digitalen input

		BCF 		STATUS,RP0 			;Bank 0
		BCF 		STATUS,RP1 			;
		CLRF 		PORTA 				;Init PORTA
		BSF 		STATUS,RP0 			;Bank 1
		BCF 		STATUS,RP1 			;
		MOVLW 		0x07 				;Set RA<2:0> to
		MOVWF 		CMCON0 			;digital I/O
		CLRF 		ANSEL 				;Make all PORTA I/O
		MOVLW 		0xFF 				;Set RA<7:0> as inputs
		MOVWF 		TRISA 				;
		BCF 		STATUS,RP0 			;Bank 0
		BCF 		STATUS,RP1 			;
;in tako nastaviš vso periferijo, ki jo misliš rabit. 
;Vse inicializacije, tudi za LCD, daš tle, ali kot rutina
;ali kot klic rutine.
;potem narediš pa
start

;nekaj kode, ki more skoz laufat
;in se ti izvaja skozi. Kot while(1){} v C - ju
		call		subrutina1

		goto		start
;potem pa tu pišeš subrutine
subrutina1
		;kup ukazov
		nop

		return


	END                       ; directive 'end of program'
Jag ska försöka rensa upp koden och göra ett enkelt blink-a-LED program till den :)

//Daniel A
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Edit 2: Eller klarar den bara 20Mhz kristal??

*Det* är en sak där databladet brukar vara helt 100% kristallklart...
Var det inte det i detta fall ??
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Helt kristalklart tycker jag inte det var.. Men jag fick syn på det efter att jag hade "edit 1" därför skrev jag "edit 2".

Mvh. Daniel A
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Men jag fick syn på det efter att jag hade "edit 1" ...

OK, men om du fick syn på det då, så förstår jag inte frågan i "Edit 2".
Eller var det bara en dubbelkoll att det du hade fått syn på stämmde ?

Generellt sätt gäller att PIC16 har 20 Mhz som max hastighet
och PIC18 40 Mhz (med ett par undantag)...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Det var för att dubbelkolla, eftersom jag hade för mig att nano-watt prylarna kunde ha snabbare kristal, men nu kom jag på att jag hade förväxlat dem igen, 877A har ju inte nano-watt... :wacko:

Varför är 32,7....Mhz så billiga?? Den billigaste 20Mhz är ju många många ggr dyrare.. :cry:

//Daniel A
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> att nano-watt prylarna kunde ha snabbare kristal

Nja, en skillnad är att nanowatt modellerna normalt har en 8 MHz
INTOSC, mot 4 MHz för de med den äldre interna oscillatorn, för
de som har den. Kristall alternativen är dock de samma.

På vissa nyare PIC18 med nanowatt så kan denna 8 MHz INTOSC
även "växlas upp" till 32 Mhz via en 4x PLL. Trevligt...
Jag har dock inte sett denna finnes på någon PIC16 (än)...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag känner mig minst saggt lite korkad.. Först nu förstår jag att PIC'en bara vill ha fasta världen på kristallen.... Är det någon som har testat köra på något annat värde, tex. 19,1700Mhz?

//Daniel A
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

squiz3r skrev:Jag känner mig minst saggt lite korkad.. Först nu förstår jag att PIC'en bara vill ha fasta världen på kristallen.... Är det någon som har testat köra på något annat värde, tex. 19,1700Mhz?
På vad sätt, menar du, att t.ex 19.1700MHz inte skulle vara ett fast värde?
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag menar att i data bladet står det att 4 8 och 20Mhz går.

Mvh. Daniel A
Skriv svar