Отговори на тема  [ 2 мнения ] 
UART проблем, PIC16F913 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение UART проблем, PIC16F913
Здравейте.
Имам следната инициализация:
Код:
;--------- Setting UART module
#define UART_BAUDRATE       .9600               
                                       
                                        bank1
               MOVLW   ((FREQUENCY * .1000000 / UART_BAUDRATE) / .16) - 1
               MOVWF   SPBRG
               BSF      TXSTA, BRGH
               bank0
               BSF      RCSTA,SPEN
               bank1
               BSF      TXSTA, TXEN
                                        .........
,
стъпка по стъпка, както се препоръчва в даташийта:
Код:
9.1.1.6 Asynchronous Transmission Set-up:
1. Initialize the SPBRG register and the BRGH bit to
achieve the desired baud rate (see Section 9.2
“AUSART Baud Rate Generator (BRG)”).
2. Enable the asynchronous serial port by clearing
the SYNC bit and setting the SPEN bit.
3. If 9-bit transmission is desired, set the TX9 control
bit. A set ninth data bit will indicate that the 8
Least Significant data bits are an address when
the receiver is set for address detection.
4. Enable the transmission by setting the TXEN
control bit. This will cause the TXIF interrupt bit
to be set.
5. If interrupts are desired, set the TXIE interrupt
enable bit of the PIE1 register. An interrupt will
occur immediately provided that the GIE and
PEIE bits of the INTCON register are also set.
6. If 9-bit transmission is selected, the ninth bit
should be loaded into the TX9D data bit.
7. Load 8-bit data into the TXREG register. This
will start the transmission.


В прекъсване от TMR1 правя следното:
Код:
            BCF       PIR1,TMR1IF
               INCFSZ   counter,F
               GOTO   isr_exit
               
               MOVLW   byte0             ;В този момент със сигурност не се предава байт,         
               MOVWF   TXREG           ;така че пиша директно.
               
               BCF      T1CON, TMR1ON
               ;reload TMR1
               BSF      T1CON, TMR1ON
               
               BTFSS   Operating_status, specific_event_occurred     ;Ако е настъпило определено събитие,
               GOTO   isr_exit
               BCF     Operating_status, specific_event_occurred    ;трябва да изпратя още три байта
               BTFSS   PIR1,TXIF                                                   ;(време за предаването им има достатъчно)
               GOTO   $-1
               MOVF   byte1,W
               MOVWF   TXREG
               BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVF   byte2,W
               MOVWF   TXREG
               
               ; for test purposes
               BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVLW   byte3                     ;някакъв маркер, по който разбирам
               MOVWF   TXREG                   ;дали се изпълнява тази секция


За да видя резултата, ползвам 'UART Tool'-а на PICKit2. Там обаче се вижда, че изпращам само byte0, byte 2 и byte3. Та, къде по дяволите изчезва byte1 ??? 'UART Tool'-а ли е бъгав или аз не правя нещо като хората?
Слушам предложения и акъл.


Чет Юни 12, 2008 5:17 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение 
Сега пробвах да слушам през КОМ-а на РС-то. Оказа се, че не е от PicKit-а, обаче със следващите редове проблема се оправя:
Код:
      BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVF   byte1,W
               MOVWF   TXREG
                             
               BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVF   byte1,W
               MOVWF   TXREG

               BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVF   byte2,W
               MOVWF   TXREG

               BTFSS   PIR1,TXIF
               GOTO   $-1
               MOVF   byte2,W
               MOVWF   TXREG
               ;и т.н. за всеки следващ байт


т.е. ако всеки байт след byte0 се зарежда по 2 пъти, всичко е ок. Ако някой има логично обяснение за ситуацията, черпя бира. :partyman:


Чет Юни 12, 2008 9:24 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 2 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни