På PORTA.0 och PORTA.1 sitter två lysdioder. (En på varje pinne.) Dessa är kopplade med varsitt 330-ohms motstånd. Från MCLR går ett 10k motstånd till +5V. Det sitter avstörnings-kondingar över PIC'ens matningspänning. Resten av labbplattan är tom.
Jag stötte på något konstigt när jag debuggade en kod. Snabb problem-beskrivning:
Detta blinkar med båda lysdioderna samtidigt:
while true
PORTA = $FF
delay_ms(500)
PORTA = $00
delay_ms(500)
wend
-------
Om jag däremot gör såhär:
while true
PORTA.0 = 1
PORTA.1 = 1
delay_ms(500)
PORTA.0 = 0
PORTA.1 = 0
delay_ms(500)
wend
Så blinkar bara lysdioden på PORTA.1 (Den andra är släckt hela tiden.)
Byter jag plats på PORT-raderna så det blir såhär:
while true
PORTA.1 = 1
PORTA.0 = 1
delay_ms(500)
PORTA.1 = 0
PORTA.0 = 0
delay_ms(500)
wend
så blinkar bara lysdioden på PORTA.0 (Den andra är släckt hela tiden.)
Varför?? Det går förstås att komma runt, men det vore bra att veta varför det blir såhär.
Bifogar hela test-koden ifall någon vill kika:
Kod: Markera allt
'Använder interna oscillatorn.
'INTI02_OSC_1H är satt i Project -> Edit -> Device Flags.
'INTERN OSCILATOR SÄTTS HÄR!
OSCCON.IDLEN = 0 ' Run-mode enabled; CPU-core is clocked in Run-modes, but not in Sleep-mode.
OSCCON.IRCF2 = 1 ' 8MHz! Internal Oscillator Frequency. (Source drives clock directly.)
OSCCON.IRCF1 = 1 ' 8MHz! Internal Oscillator Frequency. (Source drives clock directly.)
OSCCON.IRCF0 = 1 ' 8MHz! Internal Oscillator Frequency. (Source drives clock directly.)
OSCCON.SCS1 = 1 ' Internal oscillator.
'Utgångar och rensar PORT A
TRISA = 0
PORTA = 0
'PORT A2 - A4 = Digitala in.
ADCON1 = %00001100
'Stäng av komparator..
CCP1CON = $0
'Stäng av interrupt..
INTCON = $0
PIE1 = $0
PIE2 = $0
'Low-voltage-detect = OFF -Bara för att vara säker. :-)
LVDCON.LVDEN = 0
main:
while true
PORTA.0 = 1
PORTA.1 = 1
delay_ms(500)
PORTA.0 = 0
PORTA.1 = 0
delay_ms(500)
wend
end.