Este raz: Jak naprogramovat jeste jednu RS232 u AT89C2051

Wek wek
Středa Březen 17 12:02:42 CET 2004


Nie je to pekne ani presne ani optimalne, ale na uvod by to mohlo byt ako
inspiracia.
Vysielac je robota pre deti ;-).

Jano Waclawek



RXDTIM                  EQU     174     ;(11059200/12/9600)
                                        ;(174 pre 20MHz)
RXDD                    bit     p3.3    ;Vstup obvodu MAX232: R1O
DSEG                    AT      30H
RxByte:                 ds      1       ; Rezervovanie 1 bajtu pre RxByte
CSEG

               org     0013h           ;Vektor externeho prerusenia 1
                jmp     RXD_Signal
                RETI

                org     001bh           ;Preplnenie casovaca 1
                jmp     RXD_Timer       ;Casovac1 zodpoveda za kom. cez ser.
kanal
                RETI
;***** RXD signal - start bit
****************************************************************************
*************

RXD_Signal:     mov     TL1,#100h-(3*RXDTIM/2)+20  ;+ 20 pre 20mhz
                clr     TF1                     ;vymazat flag od timer 1
                setb    ET1                     ;povolit prerusenie od timer
1
                clr     EX1                     ;zastavit prerusenia od
start bitu
                 mov     RxByte,#080h            ;data na 8 bits
                setb    TR1                     ;nastartovat timer1
                setb    PT1                     ;nastavit priotitu na timer
1
                RETI
;***************************************************************************
*******************************************



;***** RS 232 SUBROUTINES
****************************************************************************
*****************

RXD_Timer:      push    dph
                push    dpl
                push    psw
                push    acc
                push    0

                mov     a,RxByte
                mov     C,RXDD
                rrc     a
                mov     RxByte,a
                jnc     RXD_T1J
                jmp     CatchByte

RXD_T1J:        jmp     RXD_T1


CatchByte:
                                ;zachyteny cely bajt v RxByte, uz len ho
spracovat - malo by sa to stihnut pocas stop-bitu.

              clr     ET1                     ;zastavit timer1
                clr     IE1                     ;vymazat flag od hrany start
bitu
                setb    EX1                     ;povolit interrupt od start
bitu
                setb    px1                     ;nastavit prioritu na hranu
ex1

RXD_T1:         pop     0
                pop     acc
                pop     psw
                pop     dpl
                pop     dph

                RETI








Další informace o konferenci Hw-list