Hjälp att komma över tröskeln till PIC assembler [LÖST]

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
SeniorLemuren
Inlägg: 8440
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hjälp att komma över tröskeln till PIC assembler

Inlägg av SeniorLemuren »

I databladet för 16F84A anges : Operating speed: DC - 20 MHz clock input så det hoppas jag är korrekt.

Jag har testat med att sätta in NOP enligt förslag. Ingen skillnad.

Jag snickrade ihop ett program som är något mindre tillkrånglat och ger samma resultat som det som inte funkar. Det använder också en COUNT som räknar ner till noll innan led tänds. Enda skillnaden är att jag togglar utporten i stället för att använda en separat räknare för tänd resp släck led. Det fungerar felfritt.

Men som jag skrev i ett tidigare inlägg, så är inte sättet programmet är skrivet på det viktiga, utan orsaken till varför det funkar i sim men inte skarpt.

Misstanken var problemet ligger hos det program som inte funkar är att det troligen har något att göra med den låga cycel-hastigheten i sim jämfört med skarpt läge. :humm:

Jag tror jag släpper detta problem tillsvidare och fortsätter frammåt. Tids nog stöter man väl på samma problem igen men då kanske man har mer "choklad på skjortan" som någon myntade tidigare i forumet. :)

Nedanstående funkar och ger samma utput som det andra var tänkt att ge.

Kod: Markera allt

                 processor	16F84A
                  include	p16F84A.inc
                  __config	_HS_OSC & _WDT_OFF & _PWRTE_ON

;********* konstanter********
COUNT             equ         08h
OLDINP            equ         09h            
#define           LED_1       PORTA,1
#define           LED_2       PORTA,2
;******** set port A1 till input resten till out******
                  banksel     TRISA       ;Gå till den bank där TRISA finns.
                  movlw       01h         ;flytta in till arbesregistret
                  movwf       TRISA       ;set portpinnarnas riktning (in/ut läge)
                  banksel     PORTA       ;Gå tillbaka till banken med PORTA 			
;**********här börjar programmet *****************
                  bsf         LED_2       ;Tänd kontroll-led A2, låt stå

start
                  btfss       PORTA,0     ;kolla input från resolvern			
                  goto        resolver0   ;resolvern gick till 0 
;**********här körs slinga för resolver=1*****************					
                  btfsc       OLDINP,0    ;kolla om OLDINP=1 (väntar på en resolvernolla)
                  goto        start       ;om OLDINP=1, börja om från start
                  bsf         OLDINP,0    ;stoppa nedräkning av COUNT och invänta ny nolla
                  decfsz      COUNT,1     ;minska COUNT med 1		
                  goto        start       ;om COUNT är större än 0, börja om från början
                  call        toggleled   ;om COUNT är 0 hoppa till toggleled			
;********** här är slingan för resolver=0**************
resolver0			
                  bcf         OLDINP,0    ;öppna slinga för resolver=1, vänta på ny etta
									
;********** Nästa varv ********************			
                  goto        start       ;börja om	
;*************** subrutiner *******************	
toggleled			
                  movlw       02h	
                  xorwf       LED_1       ;Toggle led 			
                  return				
                  end
                 
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp att komma över tröskeln till PIC assembler

Inlägg av sodjan »

Den äldre PIC16F84 fanns i 4, 10 och 20 MHz varienter.
T.ex :
PIC16F84-04I/P
PIC16F84-10I/P
PIC16F84-20I/P

PIC16F84A fanns i en 4 och en 20 Mhz variant. T.ex
PIC16F84A-04I/P
PIC16F84A-20I/P

4 Mhz varianten var sannolikt billigast och därför kanske också vanligast.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp att komma över tröskeln till PIC assembler

Inlägg av sodjan »

> COUNT equ 08h
> OLDINP equ 09h

Du bör absolut *inte* lägga variabler där det är kontrollregister !
08 och 09 är EEDATA resp EEADR som används för EEPROM hanering.
Se minnesmappen i databladet. RAM ligger på 0Ch - 4Fh.
Användarvisningsbild
SeniorLemuren
Inlägg: 8440
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hjälp att komma över tröskeln till PIC assembler

Inlägg av SeniorLemuren »

Jag har hittat felet, nu funkar det. Tack vare att sodjan :tumupp: påpekade att man inte ska använda register 08h och 09h för eget bruk (kommer sig från ett dåligt exempel i en tutorial.)

Det var inte orsaken men det gav lösningen, när jag kollade i databladet så hittade jag värre saker, jag hade helt sonika fyllt på med fler egna register från 09h och uppåt och använde 0Ah för att hålla reda på om föregående input var 0 eller 1. och det registret skulle man ju ge f..n för det hade med programpekaren att göra :All updates to the PCH register go through the PCLATH register.

Den tröskeln snubblar man inte på igen. 8)

Missade ni det pojkar :D
BMI
Gått bort
Inlägg: 496
Blev medlem: 31 juli 2006, 22:29:08
Ort: Halmstad

Re: Hjälp att komma över tröskeln till PIC assembler

Inlägg av BMI »

Hamnar coden rätt trots att "org 0000" eller "relocatable mode används" ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp att komma över tröskeln till PIC assembler **LÖST

Inlägg av sodjan »

He, där ser man. Kanske jag skulle ha sett tidigare.
Nej, PCL är det sista man vill skriva till okontrollerat.
Det blir lite av en slumpstyrd GOTO... :-)

> Hamnar coden rätt trots att "org 0000" eller "relocatable mode används" ?

Beror på definitionen av "rätt". Det är lite oklart vad du menar.
BMI
Gått bort
Inlägg: 496
Blev medlem: 31 juli 2006, 22:29:08
Ort: Halmstad

Re: Hjälp att komma över tröskeln till PIC assembler **LÖST

Inlägg av BMI »

tja ,var hamnar den om inget angivits.

Edit:Blir start adressen 0000 som default

Edit2: såg att INTE föll bort ,så Sodjan jag förstår din undran..Hehe
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp att komma över tröskeln till PIC assembler **LÖST

Inlägg av sodjan »

Ja, det är nog normalt.
Men det är även inte fel att i alla fall ange vilken modul
som ska ligga på h'0000' så att rätt kod hamnar där. Man
kan ju ha massor av olika "code" segment i applikationen.
Man kan även via LKR filen skapa en "section" som heter
"start" eller liknande och mappa en "code" till den, om man
i alla lägen vill undvika hårdkodade siffror i koden...

Det här ligger dock lite utanför vad Lemuren just nu pysslar med.
Skriv svar