??? 09/15/09 05:53 Modified: 09/15/09 07:44 Read: times |
#168889 - why does mov dptr,#0 stop my serial int from triggering |
why does my lcdsetup routine: stop my serial int from triggering?.
is there something else i can use here that wont bugger the serial interupt? other then just manually doing each letter of the welcome screen on lcd? i have am running this in a simulator with a debugger when i skip my lcdsetup the serial int triggers like it is meant too but wont when i enable the lcd routine. ;;;;;;ports for lcd ;;;;;;; EN EQU P1.2 RS EQU P1.0 RW EQU P1.1 LCD_DATA EQU P0 line equ 00h count equ 00h ; Program start ; start timer 1 and then start serial rx in mode 1 start: CLR RCLK ; rx uses timer 1 MOV TMOD, #020H ; 8-bit auto reload MOV TH1, #0E5H ; 1.2K baud rate MOV TL1, #0E5H SETB TR1 ; start timer 1 CLR SM0 ; set serial mode to 1 SETB SM1 CLR RI SETB REN SETB ES ; enable serial interrupt SETB EA ; enable interrupts in general lcdsetup: LCALL INIT_LCD LCALL CLEAR_LCD MOV dptr,#0 MOV dptr,#WelcomeText MOV count,#11h LCALL loop endloop: nop endloop2: JMP endloop2 LJMP int_serial int_serial: PUSH PSW PUSH ACC JNB RI, exit_int ; check whether RI was set ; received data on pin RxD MOV A,SBUF CLR RI ; reset RI bit in order to receive more data show_lcd: ; echo data received on RxD through lcd LCALL loop2 MOV SBUF, A JNB TI, $ CLR TI exit_int: POP ACC POP PSW RETI ; RETurn from interrupt service routine Loop: CLR a MOVc a,@a+dptr INC dptr JZ WriteStringEnd LCALL counter SJMP loop ok: LCALL WRITE_TEXT RET WriteStringEnd: MOV count,#11h RET counter: DJNZ count, ok JMP lineflip Loop2: LCALL counter RET stop: SJMP stop ;;;;;;;lcd routines ;;;;;; lineflip: DJNZ line,bottomline topline: CLR RS MOV LCD_DATA,#080h SETB EN CLR EN MOV line,#01h MOV count,#11h LCALL WAIT_LCD LCALL WRITE_TEXT LCALL WAIT_LCD RET bottomline: CLR RS MOV LCD_DATA,#0C0h SETB EN CLR EN MOV line,#00h MOV count,#11h LCALL WAIT_LCD LCALL WRITE_TEXT LCALL WAIT_LCD RET WAIT_LCD: MOV R1,#01H ; COUNTER USED TO LOOP 20 TIMES, WHICH IS EQUIVALENT TO 1 SEC SEC_LOOP: MOV TH0,#00H ; CLEAR TIMER 0 MOV TL0,#00H CLR TF0 ; CLEAR OVERFLOW BIT SETB TR0 ; START TIMER 0 JNB TF0,$ ; WAIT FOR OVERFLOW FLAG CLR TR0 ; STOP TIMER 0 DJNZ R1,SEC_LOOP RET WAIT_LCD2: MOV R1,#0DH ; COUNTER USED TO LOOP 20 TIMES, WHICH IS EQUIVALENT TO 1 SEC SEC_LOOP2: MOV TH0,#00H ; CLEAR TIMER 0 MOV TL0,#00H CLR TF0 ; CLEAR OVERFLOW BIT SETB TR0 ; START TIMER 0 JNB TF0,$ ; WAIT FOR OVERFLOW FLAG CLR TR0 ; STOP TIMER 0 DJNZ R1,SEC_LOOP2 RET INIT_LCD: LCALL WAIT_LCD2 SETB EN CLR EN CLR RS CLR RW MOV LCD_DATA,#38h SETB EN CLR EN LCALL WAIT_LCD CLR RS CLR RW MOV LCD_DATA,#0Eh SETB EN CLR EN LCALL WAIT_LCD CLR RS CLR RW MOV LCD_DATA,#06h SETB EN CLR EN LCALL WAIT_LCD RET CLEAR_LCD: CLR RS CLR RW MOV LCD_DATA,#01h SETB EN CLR EN LCALL WAIT_LCD RET WRITE_TEXT: SETB RS MOV LCD_DATA,A SETB EN CLR EN LCALL WAIT_LCD RET WelcomeText: db 'hello again',0 END |
Topic | Author | Date |
why does mov dptr,#0 stop my serial int from triggering | 01/01/70 00:00 | |
are You sure? | 01/01/70 00:00 | |
RE: programm is too long to be easy readable | 01/01/70 00:00 | |
reply | 01/01/70 00:00 | |
Thanks Stefan![]() | 01/01/70 00:00 |