| ??? 01/13/09 17:10 Modified: 01/13/09 17:14 Read: times |
#161493 - serial interrupt? |
Must be that I am getting too old, I just cannot figure out what is the problem here. I have done this many times before, and never any problems.
I am trying to send a test string out the serial port. The only thing that is sent is the last byte (the 0Ah). I am sure that I don't have to clear the TI bit since the interrupt routine takes care of that. This code works perfectly in the simulator. Anyone spot the error?
;serial routines using interrupts
$mod51
org 0
jmp START ;
org 23h
jmp Ser_Int ;
org 30h
;------------------------------------------------------------
; set up uart in mode 1 (8 bits uart) with
; timer 1 in mode 2 (8 bits auto reload timer)
START:
mov SP,#6Fh ; set up stack
mov SCON, #50h ; uart in mode 1 (8 bit), REN=1
orl TMOD, #20h ; Timer 1 in mode 2
mov TH1, #0FDh ; 9600 Baud at 11.059MHz
setb ES ; Enable serial interrupt
setb EA ; Enable global interrupt
setb TR1 ; Timer 1 run
call Test
jmp $ ; endless
;------------------------------------------------------------
;serial interrupt
Ser_Int:
push ACC ; save accumulator
jnb RI,Trans ; test if it is a reception
clr RI ; clear reception flag for next reception
mov A,SBUF ; read data from uart
jmp ExitISR ; return
Trans:
CLR TI ; clear transmission flag for next trans
ExitISR:
pop ACC ; restore accumulator
reti
;------------------------------------------------------------
Test:
mov dptr,#Test_String
call OutStr
ret
;********************************************************************
; Send a null terminated string out serial port
;********************************************************************
OutStr:
clr a
movc a,@a+dptr ; get character
jz exit ; stop if char = null
; jnb TI,$ ; wait for last bit to transfer
mov SBUF,A ;
;
;***If a delay is inserted here, it works!!
; call Delay10mS
inc dptr ; point to next char
sjmp OutStr
exit:
ret
Test_String:
DB 'This is a Test',0dh,0ah,0
;-----------------------------------------------------------------
end
|
| Topic | Author | Date |
| serial interrupt? | 01/01/70 00:00 | |
| Your Problem | 01/01/70 00:00 | |
| still not working | 01/01/70 00:00 | |
| you need to flag somehow the end of transmission | 01/01/70 00:00 | |
| reply to Jan | 01/01/70 00:00 | |
| Several | 01/01/70 00:00 | |
| To Hans | 01/01/70 00:00 | |
| And my reply to Charles | 01/01/70 00:00 | |
| no interrupts works | 01/01/70 00:00 | |
| the solution | 01/01/70 00:00 | |
| Isn't that what Hans said? | 01/01/70 00:00 | |
| Perfectly????? Prolly should look again. | 01/01/70 00:00 | |
| Got to look ahead... | 01/01/70 00:00 | |
| Another thing to consider | 01/01/70 00:00 | |
| reply to Andy Neil | 01/01/70 00:00 | |
| reply to Michael Karas | 01/01/70 00:00 | |
| why is this a bad idea | 01/01/70 00:00 | |
| Exactly why not perfect !!! | 01/01/70 00:00 | |
| response to Jan Waclawek | 01/01/70 00:00 | |
| interrupts forever | 01/01/70 00:00 | |
| nope | 01/01/70 00:00 | |
Re: Erik | 01/01/70 00:00 | |
| if you HAVE to mix ... | 01/01/70 00:00 |



