Stránka 1 z 1

pomoc s odosielanim dat do telefonu

Napsal: 29 kvě 2007, 16:42
od LordMorpheus
Mam jeden mensi problem. Odosielam data (cislo 0910012345) do telefonu . normalne sa tam cislice vypisuju jak maju byt lenze niekedy (skoro vzdy) par prvych cislic vynecha. niekedy jednu dve, ale niekedy aj sest prvych chyba. neviete cim to moze byt?
Len sa ucim programovat tak ma prosim hned neukamenujte.

Zdrojovy kod mojho programu:

Kód: Vybrat vše



   INCLUDE   "P16F84A.INC"
   LIST   P=16F84A,R=DEC
      
   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

txdat   equ   h'20'
rxdat   equ   h'26'
pocbit   equ   h'21'
citac   equ   h'22'
C1   equ   h'23'
C2   equ   h'24'
C3   equ   h'25'
C4   equ   h'27'
#define   c   3,0      ;CARRY bit v SWR
#define   tx   PORTB,0      ;TxD na uP
#define   rx   PORTB,1      ;RxD na uP
#define   v1   PORTB,3      ;vstup 1
#define   led   PORTB,2      ;LED svieti ked OK



   BSF   STATUS,RP0
   MOVLW   b'00000010'   ;NA uP JE 0=TxD   1=RxD
   MOVWF   TRISB
   BCF   STATUS,RP0

   clrf   PORTB
   BCF   STATUS,C


   call   CAKAJ


   call   JEDEN
   movlw   h'30'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'39'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'31'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'30'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'30'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'31'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'32'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'33'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'34'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'35'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ

   call   JEDEN
   movlw   h'73'
   movwf   txdat
   call   scitx
   call   DVA   
   call   CAKAJ



KONIEC   nop
   goto   KONIEC




JEDEN   movlw   h'41'   ;A
   movwf   txdat
   call   scitx
   movlw   h'54'   ;T
   movwf   txdat
   call   scitx   
   movlw   h'2B'   ;+
   movwf   txdat
   call   scitx   
   movlw   h'43'   ;C
   movwf   txdat
   call   scitx
   movlw   h'4B'   ;K
   movwf   txdat
   call   scitx   
   movlw   h'50'   ;P
   movwf   txdat
   call   scitx
   movlw   h'44'   ;D
   movwf   txdat
   call   scitx
   movlw   h'3D'   ;=
   movwf   txdat
   call   scitx
   movlw   h'22'   ;"
   movwf   txdat
   call   scitx
   RETURN


DVA   movlw   h'22'   ;"
   movwf   txdat
   call   scitx
   movlw   h'0D'   ;<CR>
   movwf   txdat
   call   scitx
   RETURN



scitx   bsf   tx   ;v TXDAT musí být data pro vysílání
   movlw   9   ;do POCBITu 9
   movwf   pocbit
   bcf   tx   ;start bit
st31    movlw   12   ;casovani 52us (Tbit)
   movwf   citac   ;pozad.cas (us)-12IC/3IC
st31a   decfsz   citac,f
   goto   st31a
   decfsz   pocbit,f;test na konec odvys. bytu
   goto   s51
   bsf   tx   ;stop bit
    movlw   12   ;casovani 52us (Tbit)=délka stop bitu
   movwf   citac   ;pozad.cas (us)-2IC/3IC
st32   decfsz   citac,f
   goto   st32
   return
s51   rrf   txdat,f
   btfsc   c   ;test na stav aktuálního bitu
   goto   s4h
   bcf   tx
   goto   s41
s4h   bsf   tx
s41   goto   st31


scirx   bsf   c
   clrf   rxdat
   rrf   rxdat,f
s1   btfsc   rx   ;test na start bit
   goto   s1
    movlw   6   ;casování 26us (Tbit/2)
   movwf   citac   ;požad.eas (us)-4IC/3IC
st05   decfsz   citac,f
   goto   st05
st1    movlw   13   ;casovani 52us (Tbit)
   movwf   citac   ;pozad.cas (us)-12IC/3IC
st1a   decfsz   citac,f
   goto   st1a
   btfsc   rx   ;vzorkovani RX
   goto   sch
   bcf   c
   goto   s2
sch   bsf   c
s2   rrf   rxdat,f
   btfss   c   ;test na konec byte
   goto   st1
    movlw   7   ;casovani 52us (Tbit)-cas pro dobihnutí byte
   movwf   citac   ;požad.eas (us)-12IC/3IC
st1b   decfsz   citac,f
   goto   st1b
   return      ;poijatá data jsou uložena v RXDAT



CAKAJ   MOVLW   5
   MOVWF   C1
CAKAJ3   MOVLW   255
   MOVWF   C2
CAKAJ2   MOVLW   255
   MOVWF   C3
CAKAJ1   DECFSZ   C3,1
   GOTO   CAKAJ1
   DECFSZ   C2,1
   GOTO   CAKAJ2
   DECFSZ   C1,1
   GOTO   CAKAJ3
   RETURN

   end

Napsal: 29 kvě 2007, 19:58
od ZdenekHQ
Kdyby to byl ASM pro ATMEL, tak bych se v něm možná vyznal, PIC už se odmítám učit, už teď mám v hlavě guláš.

Každopádně je dobrý použít druhej počítač jako logger a pohlídat si takový věci, jako chyby parity nebo špatně nastavená rychlost portu. Taky je potřeba počkat, až se znak odešle (přes příznak přerušení, ne časovací smyčkou) a teprve potom posílat další.