Thanks darrel,
i've got a weird one here... i'm not sure what the hell is going on but something is screwed...
basically, it's a test program, every time TMR1 over flows it toggles an LED, just so that i can see it's working...
it's doing weird things to the ports so i simulated it in oshonsoft's pic simulator...
i toggle the PIR1.0 manually...
What i found is the first overrflow turns PORTB.1 on,
Second overflow turns PORTB.3 on
3 and above overflows turn PORTC3 on and off...
It's not supposed to touch PORTC at all!
Here is that BAS file
Here is the ASM fileCode:ASM device pic16F877A device HS_OSC device WDT_ON device PWRT_ON device BOD_ON device LVP_OFF device WRT_OFF device CPD_OFF device DEBUG_OFF ENDASM Define OSC 24 ' Set clock speed INTCON = 0 ' Disable all interupts TRISE = %00000111 ' Set PortE to all inputs TRISD = %00000000 ' Set PortD to all outputs TRISC = %00000000 ' Set PortC to all outputs TRISB = %00000000 ' Set PortB to all outputs TRISA = %11111111 ' Set PORTA to all input HIGH PORTB HIGH PORTB.0 'pause 5000 low PORTB gosub TMR1setup loop: if PIR1.0 = 1 then ' if TMR1 has overflowed T1CON.0 = 0 ' Stop tmr 1 PIR1.0 = 0 toggle PORTB gosub TMR1setup ' reset and restart TMR1 endif goto loop TMR1setup: TMR1L = 0 ' reset TMR1 low to 0 TMR1H = 0 ' reset TMR1 high to 0 PIE1.0 = 0 ' Disable TMR1 interupt (double check) T1CON.5 = 0 ' Setup TMR1 timings 1:1 T1CON.4 = 0 ' Setup TMR1 timings 1:1 T1CON.3 = 1 ' Oscillator is ON (LP OSC Mode) T1CON.2 = 1 ' do not Synchronize external clock input T1CON.1 = 1 ' External clock from pin RC0 T1CON.0 = 1 ' Enables Timer1 return
And here is the MAC file...Code:; PicBasic Pro Compiler 2.44, (c) 1998, 2003 microEngineering Labs, Inc. All Rights Reserved. PM_USED EQU 1 INCLUDE "16F877A.INC" ; Define statements. #define CODE_SIZE 8 #define OSC 24 RAM_START EQU 00020h RAM_END EQU 001EFh RAM_BANKS EQU 00004h BANK0_START EQU 00020h BANK0_END EQU 0007Fh BANK1_START EQU 000A0h BANK1_END EQU 000EFh BANK2_START EQU 00110h BANK2_END EQU 0016Fh BANK3_START EQU 00190h BANK3_END EQU 001EFh EEPROM_START EQU 02100h EEPROM_END EQU 021FFh R0 EQU RAM_START + 000h R1 EQU RAM_START + 002h R2 EQU RAM_START + 004h R3 EQU RAM_START + 006h R4 EQU RAM_START + 008h R5 EQU RAM_START + 00Ah R6 EQU RAM_START + 00Ch R7 EQU RAM_START + 00Eh R8 EQU RAM_START + 010h FLAGS EQU RAM_START + 012h GOP EQU RAM_START + 013h RM1 EQU RAM_START + 014h RM2 EQU RAM_START + 015h RR1 EQU RAM_START + 016h RR2 EQU RAM_START + 017h _PORTL EQU PORTB _PORTH EQU PORTC _TRISL EQU TRISB _TRISH EQU TRISC #define _PORTB_0 PORTB, 000h #define _PIR1_0 PIR1, 000h #define _T1CON_0 T1CON, 000h #define _PIE1_0 PIE1, 000h #define _T1CON_5 T1CON, 005h #define _T1CON_4 T1CON, 004h #define _T1CON_3 T1CON, 003h #define _T1CON_2 T1CON, 002h #define _T1CON_1 T1CON, 001h INCLUDE "XTALTE~1.MAC" INCLUDE "PBPPIC14.LIB" ASM? device pic16F877A device HS_OSC device WDT_ON device PWRT_ON device BOD_ON device LVP_OFF device WRT_OFF device CPD_OFF device DEBUG_OFF ENDASM? MOVE?CB 000h, INTCON MOVE?CB 007h, TRISE MOVE?CB 000h, TRISD MOVE?CB 000h, TRISC MOVE?CB 000h, TRISB MOVE?CB 0FFh, TRISA HIGH?B PORTB HIGH?T _PORTB_0 LOW?B PORTB GOSUB?L _TMR1setup LABEL?L _loop CMPNE?TCL _PIR1_0, 001h, L00001 MOVE?CT 000h, _T1CON_0 MOVE?CT 000h, _PIR1_0 TOGGLE?B PORTB GOSUB?L _TMR1setup LABEL?L L00001 GOTO?L _loop LABEL?L _TMR1setup MOVE?CB 000h, TMR1L MOVE?CB 000h, TMR1H MOVE?CT 000h, _PIE1_0 MOVE?CT 000h, _T1CON_5 MOVE?CT 000h, _T1CON_4 MOVE?CT 001h, _T1CON_3 MOVE?CT 001h, _T1CON_2 MOVE?CT 001h, _T1CON_1 MOVE?CT 001h, _T1CON_0 RETURN? END
And this is the HEX fileCode:NOLIST ; PicBasic Pro Compiler 2.44, (c) 1998, 2003 microEngineering Labs, Inc. All Rights Reserved. LABEL?L macro Label RST?RP ifdef PM_USED LALL Label XALL else Label endif endm CMPNE?TCL macro Regin, Bitin, Cin, Label if (Cin == 0) CLRWDT? BIT?GOTO 1, Regin, Bitin, Label else if (Cin == 1) CLRWDT? BIT?GOTO 0, Regin, Bitin, Label else L?GOTO Label endif endif endm ASM? macro RST?RP endm ENDASM? macro endm GOSUB?L macro Label local dlabel ifdef DEBUG_STACK CHK?RP DEBUG_STACK ifdef DEBUG_STACK_ADDR bcf STATUS, C rlf DEBUG_STACK, W addlw DEBUG_STACK_ADDR movwf FSR movlw low (dlabel) movwf INDF incf FSR, F movlw (dlabel) >> 8 movwf INDF endif incf DEBUG_STACK, F endif L?CALL Label dlabel endm GOTO?L macro Label L?GOTO Label endm HIGH?B macro Bin MOVE?BA Bin L?CALL HIGHP endm HIGH_USED = 1 HIGH?T macro Regin, Bitin MOVE?CT 1, Regin, Bitin MOVE?CT 0, ((Regin) + 80h), Bitin endm LOW?B macro Bin MOVE?BA Bin L?CALL LOWP endm LOW_USED = 1 RETURN? macro ifdef DEBUG_STACK CHK?RP DEBUG_STACK decf DEBUG_STACK, F endif RST?RP return endm TOGGLE?B macro Bin MOVE?BA Bin L?CALL TOGGLE endm TOGGLE_USED = 1 LIST
I'm struggling to see whats gone wrong...Code::1000000026280F2080040B280F20FF3A80050C289B :100010000F2080060B28FF3A841780052128A800AE :100020000630A8190730840000308A0028080739F4 :10003000820701340234043408341034203440344C :100040008034831303138312640008008B0183162A :1000500007308900880187018601FF3085008312FF :1000600006088A010120061483160610831206086A :100070008A0104208A110A124C2064008A110A1293 :100080000C1C4A2810100C1006088A0108208A113E :100090000A124C208A013D288E018F0183160C1014 :1000A000831290121012901510159014101408005D :02400E00763FFB :00000001FF




Bookmarks