Kod till PIC16F877A-- Edit: 887
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.

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.
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 (?)
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

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
Jag har hittat en exempel kod til 887
Jag ska försöka rensa upp koden och göra ett enkelt blink-a-LED program till den 
//Daniel A

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 pie subrutine
subrutina1
;kup ukazov
nop
return
END ; directive 'end of program'

//Daniel A
> 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)...
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)...
> 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)...
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)...