# PIC mikrokontrolleri >  PIC16F876A PORTB reaģēšana uz PORTA inputa

## SharkyLV

Šobrīd mācos PIC programmēšanu, un nejauši uzskrēju uz šī foruma. Īsāk sakot, man ir problēma ar vienkārši kodu, kurš nestrādā... un es nezinu kādpēc.
Uz RA1 (pin 3, PORTA bit 1) ir poga. Uzspiežot, voltage uz RA1 iet 5V->0V  
Uz visiem PORTB piniem ir LED. kopā 8, kā atceros.
Šim kodam būtu jāiededzina visas gaismiņas, ja poga ir nospiesta.

Lieta tāda, ka es nezinu, kur kļūda, jo nezkapēc es nevaru nomainīt debuggerā PORTA bitus. Lai arī ierakstu 0x02, aiziet uzreiz uz 0x00

Lietoju šo forumu pirmo reizi, tāpēc neesmu pārliecināts, ka esmu iedevis visu informāciju un vai vispār šeit griežas ar šādiem jautājumiem.

Būšu pateicīgs par jebkādu informāciju,
Paldies.



```

	title "PIC16F876A test program
	#include "P16F876A.inc" ; This "header file" contains all 
							; the PIC16F879A special function
							; register names and addresses.
		org		0
		goto	START
		org		04h

;		Interupt Service Routine
;
INT_ISR
		bcf INTCON, T0IF

		movlw .17 ; 50us?
		movwf TMR0

                btfss PORTA, 1
                goto SET_LED
		retfie

SET_LED   movlw 0xFF
               movwf PORTB ;light all LEDs
               retfie

;		Main Program
;
START
		clrf	TMR0
		bsf		STATUS, RP0
		
		clrf	TRISB
		bsf 	TRISA, 1 ; set bit 1 as an input
		bcf		OPTION_REG, T0CS

		bcf		STATUS, RP0

		clrf	PORTB
		clrf	PORTC
		clrf    PORTA
		bsf PORTB, 2
		movlw .10  ; 50us?
		movwf TMR0
		bsf INTCON, T0IE ; active interrupt
		bsf INTCON, GIE
IDLE 	goto	IDLE	;simple loop
		end
```

----------


## JDat

Pirmais minējums no aizmigušas galvas:


```
 bsf    TRISA, 1 ; set bit 1 as an input
      bcf      OPTION_REG, T0CS
```

 Vietā uzraksti:


```
 bcf      OPTION_REG, T0CS
          bsf    TRISA, 1 ; set bit 1 as an input
```

 Ja nepalīdz, tad sorry, pa dienu mēģināru uzmest aci iekš datasheet.

----------


## next

Peec reseta tas pins straadaa kaa analogaa ieeja, vajag paarkonfigureet.

----------


## SharkyLV

next, bet nu man arī it kā vajag to RA1 pinu kā analogo ieeju.
JDat, paldies. Rīt izmēģināšu.

----------


## next

Neredzu kodaa ADC izmantoshanu.
RTFM

----------


## SharkyLV

next, man nevajag ADC.  
es simply pārbaudu vai RA1 aiziet uz low_voltage (b'0') un ja tā, tad uzlieku 0xFF (b'11111111') uz PORTB un iededzinu visas 8 LED.

neesmu tas, kas raksta uz aklo. biju pārlasījis datasheet par PORTA izmantošanu. tur pat ir dota koda daļiņa. bet joprojām neiet.

problēmas ar PORTA nevajadzētu būt, jo uz RA0, ja nemaldos, man ir potentiometer un viņš darbojas.

lai arī kā, iespējams, ka es kļūdos, tāpēc pielabo mani, ja tā.

----------


## Vikings

Tev vajag lasīt nevis analogo, bet digitālo signālu. Nezinu sīki par konkrēto proci, bet cik atceros no PICiem tad ja pins iekonfigurēts kā analogā ieeja tad viņš nelasās kā digitālā. Tādēļ kaut kādā porta vai ADC konfigurācijas reģistrā atslēdz pina analogo funkciju un ja nav citu lažu tad visam jāaiziet.

----------


## next

Datashitus lasi?  Kaa domaa, kas te rakstiits?

----------


## JDat

ir tāda lieta kā simulators. Tas softiskais darbojas bez reāliem dzelžiem. Tur soli pa solim izpilda katru koda gabaliņu un skaties vai reģistri mainās tā kā plānots. Pa fikso tiešma izskatās ka no sākuma jāpaŗslēdzas uz citu banku un tikai tad var mainīt TRISA un TRISB utt. Tikai option reģistra vietā jāuzstāda pareizā vērtība status reģistra RP1 un RP0 bitiem. Līdzīgi ar Analog IN atslēgšanu.

Te ir datu lapa: http://ww1.microchip.com/downloads/e...Doc/39582b.pdf
punkti kas jāapskata (lpp man nerāda):
2.2.2.1
4.0
example 4-1
Noteikti ir arī citas nianses.

Uz aci paskatoties, ir aizdomas ka vēl daudz jautājumu būs. Ir aizdomas ka ar Interruptiem ar kaut kas nav korekti. Varbūt kļūdos. Ir brīvdiena. Es negribu domāt.  :: 

Nav vienkāršāk paņemt kādu grāmatu un soli pa solim iziet cauri strādājošam kodam. Es pirmajā piegājienā klāt interruptiem neķēros. Sāku ar vienkāršākām lietām...

----------


## SharkyLV

Liels paldies. Ļoti noderēs.

Lieta tāda, ka sāka mācīt Interfacing kopš aprīļa, taču iepriekš kodējam NXP LPC2378, ja nemaldos. Pie tam viss notika iekš C. Tas bija salīdzinoši viegli.
Tagad paralēli sāka ņemties ar PIC, kur jāprogrammē šajā 'Assembly'. Un šeit es neko nejēdzu.

Jo vairāk, viņi neiesaka nekādas grāmatas. Viņi saka, ka katram kontrollerim ir savi darbību nosaukumi utt, tāpēc viņi grib mūs iemācīt mācīties no datasheetiem. Kā sapratu.

Par simulatoru. Jā, es biju pievērsis uzmanību viņam (ISIS proteus ?), bet kā skatos viņs ir par maksu. Un mums šeit universitātē  ir ļoti stingra politika uz autortiesībām.  Viņi vēro trafiku. Heh, negribās nedz piratēt, nedz pirkt. 
Varbūt vari ieteikt kādu freeware alternatīvu?

----------


## JDat

nez. iesāku ar grāmatu no 636 veikala. Kaut gan asm principus zināju no x86 procesoru programmēšanas. grāmatā soli pa solim un pieleca 90 %. Pārējais uzmanīga datasheet lasīšana.

----------


## sharps

Pareizi jaanoinicializee PORTA. PIC16F87x seerijai bija taada fishka ar digitaalaam un analogaam ieejaam.




```

BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Bank0
CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
MOVLW 0xCF ; Value used to
; initialize data
; direction
MOVWF TRISA ; Set RA<3:0> as inputs
; RA<5:4> as outputs
; TRISA<7:6>are always
; read as '0'.
```

 veel njem veeraa taadu lietu kaa pogas drebezgs. iisaak sakot jaaveic pogas dupulta testeeshanas ar zinaamu laika aizturi.

----------

