??? 06/07/06 01:38 Read: times |
#117910 - Receiving IR remote control code |
Hello:
After three whole days of debugging I finally give up trying and ask for help here. (I have read the "Bible" and the tutorial) I am now writing a code for my AT89S52 to receive a DVD remote control's command. It has been done before, with a polling method: Keep checking the IRRC pin (a port pin connected to the IR receiver module) Now I am rewriting the program using interrupt. P3.2 is named IRRC. A port pin CK (P3.3) is connected to my PC's soundcard MIC-in. Any debug pulses output will be recorded by a sound editor in my PC. These are the result: the upper waveform is the debug output of the MCU, and the waveform below is the IR receiver module's output (also connected to P3.2) Any time INT0 occurs MCU will send two pulses in a short interval: ![]() What troubled me a lot is right after the instruction RETI, INT0 is triggered again: ![]() The following code is in fact extracted from the original receive code. Some recognition of IR code is done instead of DELAYs in the original receive code. It is not suitable to post the entire code here with hundreds of lines, especially when I am asking for debug help. Anyway the result above did generated by the following code: IRRC EQU P3.2 ;Connected to IR receive module. (INT0) CK EQU P3.3 ;Connected to PC's MIC-in. ORG 0000H JMP Init ORG 0003H JMP INT0 ORG 0050H Init: CLR CK ;pull down the debug pin SETB IT0 ;Enable INT0 SETB EX0 SETB EA ST: JMP ST ;Wait for remote control signal. ; --------------------- INT0: CLR EX0 CALL CKBIT ;whenever calling the CKBIT a single pulse will be sent to MIC-in CALL IRRCSYNC ;IRRCSync is just a delay module placed at the end of the program. CALL CKBIT MOV R5,#185 ;these DELAYS replaced the IR command recognition part, to "isolate" the problem code temp: CALL IRRCSYNC DJNZ R5,temp CALL CKBIT ;This three CKBIT will be shown as a single LARGE pulse in PC CALL CKBIT CALL CKBIT CALL IRRCSYNC ;a short delay so that the problem (INT again) can be shown clearly SETB EX0 RETI ; --------------------- IRRCSync: MOV R6,#10 ;Delay IRRCSync6: MOV R7,#30 IRRCSync7: DJNZ R7,IRRCSync7 DJNZ R6,IRRCSync6 RET ; --------------------- CKBIT: SETB CK ;Debug pulse output. CLR CK RET ; --------------------- END Thanks! Stanley |
Topic | Author | Date |
Receiving IR remote control code | 01/01/70 00:00 | |
What I would do | 01/01/70 00:00 | |
not the protocol | 01/01/70 00:00 | |
Not clearing IE0 | 01/01/70 00:00 | |
IE0 | 01/01/70 00:00 | |
IE0 does not need EX0 enabled | 01/01/70 00:00 | |
band-aids | 01/01/70 00:00 | |
timer in capture mode | 01/01/70 00:00 | |
"Long" pulses? | 01/01/70 00:00 | |
never use before![]() | 01/01/70 00:00 | |
how to prevent IE0 set | 01/01/70 00:00 |