Download code
;=======Switch.ASM Rev.B =================================22/12/04== ; standard crystal 4.0MHz XT ; Bergthaller Iulian (c)2004 ;------------------------------------------------------------ ; configure programmer LIST P=16F628;f=inhx8m #include "P16F628.INC" ; Include header file __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC & _BODEN_ON & _LVP_OFF & _CP_OFF & _MCLRE_OFF ;------------------------------------------------------------ ; cpu init cblock 0x20 ; Beginn General Purpose-Register ;-------------------------- counters count1 count2 count3 count4 count5 ;-------------------------- registrii transfer trunk ;-------------------------- endc ;-------------------------- #DEFINE comu PORTA,0 #DEFINE comd PORTA,1 #DEFINE comt PORTA,2 #DEFINE comp PORTA,3 #DEFINE enab PORTB,2 #DEFINE rsrx PORTB,0 #DEFINE cdet PORTB,1 #DEFINE rstx PORTB,3 ;--- Reset -------------------------------------------------- org h'00' goto init ; reset -> init ;--- Interrupt ---------------------------------------------- org h'04' goto init ; no interrupt ;************************************************************ init clrf PORTA clrf PORTB movlw 0x07 ; Turn comparators off and enable pins for I/O movwf CMCON bcf STATUS,RP1 bsf STATUS,RP0 ; Bank 1 movlw B'00000000' movwf TRISA movlw B'00000011' movwf TRISB bcf STATUS,RP0 ; Bank 0 movlw 0x00 movwf PORTA movwf trunk ;************************************************************************ movlw 0x01 movwf PORTA call pause bsf rstx ;************************************************************************ nou clrf PORTA call pause wait nop btfsc cdet goto wait ; asteapta apel movlw 0x2A ; cca. 8s movwf count3 b3 movlw 0xFA movwf count1 b1 movlw 0xFA movwf count2 b2 nop nop btfss rsrx goto c_unu decfsz count2,F goto b2 decfsz count1,F goto b1 decfsz count3,F goto b3 ; afiseaza port ; bsf enab call halta call prt call sau ; asteapta selectie ; call ser_rx movlw 0x34 subwf trunk,W btfss STATUS,Z ;test zero bit goto trei call halta call prt movlw 0x34 call ser_tx movlw 0x20 ; _ call ser_tx call conectat call press bcf enab ; deconectare ser_tx call halta bsf comp call halta goto rep ; next_port ; trei movlw 0x33 subwf trunk,W btfss STATUS,Z ;test zero bit goto doi call halta call prt movlw 0x33 call ser_tx movlw 0x20 ; _ call ser_tx call conectat call press bcf enab ; deconectare ser_tx call halta bsf comt call halta goto rep ; next_port ; doi movlw 0x32 subwf trunk,W btfss STATUS,Z ;test zero bit goto unu call halta call prt movlw 0x32 call ser_tx movlw 0x20 ; _ call ser_tx call conectat call press bcf enab ; deconectare ser_tx call halta bsf comd call halta goto rep ; next_port ; unu movlw 0x31 subwf trunk,W btfss STATUS,Z ;test zero bit goto rep call halta call prt movlw 0x31 call ser_tx movlw 0x20 ; _ call ser_tx call conectat call press bcf enab ; deconectare ser_tx call halta c_unu bsf comu rep btfsc cdet goto nou call pause goto rep ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ser_rx btfsc rsrx goto ser_rx clrf trunk call haltb movlw 0x08 movwf count5 wdh2 call halta nop nop nop bcf STATUS,C btfsc rsrx bsf STATUS,C rrf trunk,F decfsz count5,F goto wdh2 return ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;*************************************************** sau movlw 0x3C ; < call ser_tx movlw 0x34 ; 4 call ser_tx movlw 0x2F ; / call ser_tx movlw 0x33 ; 3 call ser_tx movlw 0x2F ; / call ser_tx movlw 0x32 ; 2 call ser_tx movlw 0x2F ; / call ser_tx movlw 0x31 ; 1 call ser_tx movlw 0x3E ; > call ser_tx retlw 0x00 ;*************************************************** prt movlw 0x0A ; LF call ser_tx movlw 0x50 ; P call ser_tx movlw 0x6F ; o call ser_tx movlw 0x72 ; r call ser_tx movlw 0x74 ; t call ser_tx movlw 0x3A ; : call ser_tx retlw 0x00 ;*************************************************** conectat movlw 0x63 ; c call ser_tx movlw 0x6F ; o call ser_tx movlw 0x6E ; n call ser_tx movlw 0x65 ; e call ser_tx movlw 0x63 ; c call ser_tx movlw 0x74 ; t call ser_tx movlw 0x61 ; a call ser_tx movlw 0x74 ; t call ser_tx movlw 0x0D ; enter call ser_tx movlw 0x0A ; LF call ser_tx retlw 0x00 ;*************************************************** press movlw 0x50 ; P call ser_tx movlw 0x72 ; r call ser_tx movlw 0x65 ; e call ser_tx movlw 0x73 ; s call ser_tx movlw 0x73 ; s call ser_tx movlw 0x20 ; _ call ser_tx movlw 0x65 ; e call ser_tx movlw 0x6E ; n call ser_tx movlw 0x74 ; t call ser_tx movlw 0x65 ; e call ser_tx movlw 0x72 ; r call ser_tx movlw 0x0D ; enter call ser_tx movlw 0x0A ; LF call ser_tx retlw 0x00 ;********************************************************************** ser_tx movwf trunk movlw 0x08 movwf count4 call ein ; Start bit wdh4 btfsc trunk,0 call null btfss trunk,0 call ein rrf trunk,F decfsz count4,F goto wdh4 call null ; Stop bit retlw 0x00 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ein bcf rstx call halta retlw 0x00 ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ null bsf rstx call halta retlw 0x00 ;************************************************************************ ;************************************************************************ ; Subrutine de intarziere * ;************************************************************************ halta movlw 0x1F ; 92us movwf count1 q0 decfsz count1,F goto q0 retlw 0x00 ;________________________________________________________________________ haltb movlw 0x10 ; 47us movwf count1 q1 decfsz count1,F goto q1 retlw 0x00 ;________________________________________________________________________ pause movlw 0x08 ; cca. 2s hopa movwf count3 d3 movlw 0xFA movwf count1 d1 movlw 0xFA movwf count2 d2 nop decfsz count2,F goto d2 decfsz count1,F goto d1 decfsz count3,F goto d3 retlw 0x00 ;************************************************************************ ;============================================================ end ;============================================================
Last updated December, 2004