??? 12/11/09 07:40 Read: times |
#171550 - I got (I)T2 working !!! Responding to: ???'s previous message |
Hello everybody!
I was trying to use T2 interrupt alongwith counter to call Inputs & Display subroutines after counter becomes Zero. I was Setting or Clearing LEDs in Display subroutine according to ACC bits loaded during Inputs subroutine. I was using LEDs at P1.0 & P1.1 alongwith other LEDs. Earlier code used T2 in auto reload, (not in plain timer mode)which I think used to cause flickerring the LED at P1.0. Also, when LED at P1.1 was toggled in Display subroutine, the ISR_T2 didn't work & program remained in Main loop. It was after I went through your (everyone who helped) messages, I was able to run the complete program successfully. I'm putting here the ISR_T2 code for your reference, wherein I've tried to improve upon comments side. Hope I am on the right track! ;DEFINE SFRs RELATED TO TIMER2 T2MOD EQU 0C9H ; T2CON EQU 0C8H ; RCAP2H EQU 0CBH ; RCAP2L EQU 0CAH ; TL2 EQU 0CCH ; TH2 EQU 0CDH ; CTR EQU 2AH ; USED AS COUNTER FOR T2 INTERRUPT TR2 BIT 0CAH ; EXF2 BIT 0CEH ; TF2 BIT 0CFH ; ;*********************************************************************** ;*********************************************************************** ORG 0000H ; LJMP BOOT ; INITIALIZATION ORG 002BH ; SJMP ISR_T2 ; JUMP TO ISR_T2 ORG 0030H ; INTERRUPT SERVICE ROUTINE FOR T2 ISR_T2: PUSH PSW ; CLR TR2 ; STOP TIMER2 CLR TF2 ; CLEAR TIMER2 FLAG CLR EXF2 ; (CLR EXF2 => T2CON.6) DJNZ CTR, EXIT ; DON'T CALL INPUTS SUBROUTINE UNLESS COUNTER=0 ; CTR IS USED AS COUNTER ACALL INPUTS ; ELSE GET INPUTS IN ACCUMULATOR ACALL DISPLAY ; & DISPLAY LEDs ACCORDINGLY MOV CTR, #10H ; RESET COUNTER TO 10h JNB 2DH, EXIT1 ; IS FAULTY CONDITION? IF NO, JMP (2Dh used to aknowledge Fault) MOV CTR, #20H ; FAULT=YES, THEN INCREASE TIME TO CALL INPUTS & DISPLAY EXIT1: JNB 30H, EXIT ; IS INSIDE MAIN LOOP, IF NO, JMP (30h used to aknowledge Main loop) MOV CTR, #40H ; YES, THEN FURTHER INCREASE TIME TO CALL INPUTS & DISPLAY EXIT: MOV TL2, #32H ; MOV TH2, #32H ; SETB TR2 ; START TIMER2 POP PSW ; RETI ; RETURN FROM INTERRUPT Though T2_ISR and the whole program is running well,I would like to know, whether using P1.0 & P1.1 for toggling LEDs during display subroutine along with T2 in auto reload mode was the problem! As it seems, when T2 used as plain timer, is working well! Thanks! Sandy |
Topic | Author | Date |
Problem using Timer2 in 89S52! | 01/01/70 00:00 | |
not a very useful suggestion from 'Plz' | 01/01/70 00:00 | |
further suggestion | 01/01/70 00:00 | |
Message & Readable code is here... | 01/01/70 00:00 | |
look in the assembler manual | 01/01/70 00:00 | |
New Code, hope it helps! | 01/01/70 00:00 | |
what You are trying to make ? | 01/01/70 00:00 | |
mov T2MOD,#4 | 01/01/70 00:00 | |
sorry | 01/01/70 00:00 | |
t2mod=0 ; t2con=4 (tr2=1) It worked!![]() | 01/01/70 00:00 | |
PSW | 01/01/70 00:00 | |
that is not a comment! | 01/01/70 00:00 | |
Comments OR Explaination!!! | 01/01/70 00:00 | |
Comments are mainly for YOU | 01/01/70 00:00 | |
WRONG! | 01/01/70 00:00 | |
Answer the "why" in your comments. | 01/01/70 00:00 | |
I got (I)T2 working !!! | 01/01/70 00:00 | |
Clear TF2 in your service routine | 01/01/70 00:00 | |
Clearing TF2 in ISR | 01/01/70 00:00 |