Отговори на тема  [ 8 мнения ] 
Подкарване на PIC12 UART 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Подкарване на PIC12 UART
Здравейте.
Вече втори ден ме тормози конфигурирането на UART-a на pic12f1822.
Не предава и това е :(
До момента съм:
- направил всички изводи цифрови
- направил нужните изводи - входове и изходи
- определил през APFCON кой извод на UARTA на кой пин ще е мапнат (в случая RX = RA5 = pin 2; TX = RA4 = pin 3)
- определил скоростта на предаване (9600 bsp, при чип на 32Mhz)
- активирал предаването по уарт
- конфигурирал UART в асинхронен режим
- активирал уарт-а
И въпреки всичко явно съм отървал нещо.
И да допълня - като казвам че не предава имам в предвид че никакъв сигнал не излиза от извода.

Код:
LIST   P=12F1822,ST=OFF,R=DEC,F=INHX32
INCLUDE   P12F1822.INC

__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_ON & _STVREN_OFF & _BORV_19 & _LVP_OFF

org 0x00
goto hw_init


; uart_send
;;;;;;;;;;;;;;;;;;;;;;;;;
uart_send:            ;
   btfss   PIR1, TXIF   ;
   goto   $-1         ;
                  ;
   banksel TXREG      ;
   movwf   TXREG      ;
                  ;
   banksel 0         ;
                  ;
   return            ;
;;;;;;;;;;;;;;;;;;;;;;;;;

hw_init:
   banksel OSCCON      ;
   movlw 0xF0         ;Set OSCCON<4:7> bits
   movf   OSCCON      ;PLL x4, 8Mhz int. osc. = 32Mhz
                  ;
   banksel PORTA       ;
   clrf PORTA          ;Init PORTA
   banksel LATA      ;Data Latch
   clrf LATA         ;
   banksel ANSELA      ;
   clrf ANSELA         ;digital I/O
   banksel TRISA      ;
   movlw B'00101000'   ;Set RA5 and RA3 as inputs
   movwf TRISA       ;and set RA<2:0> and RA4 as
                  ;outputs
                  ;
   banksel APFCON      ;
   bsf   APFCON, TXCKSEL ;Set RA4 as UART TX
   bsf APFCON, RXDTSEL ;Set RA5 as UART RX
                  ;
   banksel SPBRG      ;
   movlw   207         ;
   movwf   SPBRG      ; UART speed 9600@32Mhz

   banksel TXSTA      ;
   movlw   B'00100100'   ;
   movwf   TXSTA      ; High baud rate - on, TX - on
   
   banksel RCSTA      ;RCSTA: RECEIVE STATUS AND CONTROL REGISTER
   movlw   B'10010000' ;
   movwf   RCSTA      ;Serial port - on, Asynchronous mode - on
   
main:
   nop

   movlw   'X'
   call uart_send

   goto main

END



Чет Юли 21, 2011 1:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
PIR1 е в банка 0


Чет Юли 21, 2011 4:20 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 
Изглежда като по книга. Само, че при мен поне по подразбиране числата са шеснайсетични. т.е. movlw 207 трябва да стане movlw .207 за да си сигурен че го приема десетично. Не че това е проблема ...

А ей го на ... преди main: сетнеш отново банка 0 защото RCSTA не е в банка 0 ... а следващия регистър който четеш е PIR1 -> банка 0

_________________
PIC SPBRG values calculator


Чет Юли 21, 2011 4:30 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 
CarBeta написа:
PIR1 е в банка 0


:)

_________________
PIC SPBRG values calculator


Чет Юли 21, 2011 4:30 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Да, прави сте - докато чаках някой да отговори Fan ми подсказа за въпросната банка.
Промених кода до
Код:
uart_send:            ;
   btfss   PIR1, TXIF   ;
   goto   $-1         ;
                  ;
   banksel TXREG      ;
   movwf   TXREG      ;
                  ;
   [b]banksel 0[/b]         ;
                  ;
   return   

В момента имам изходящ "трафик", но не се възприема от терминала от другата страна.
Искам само да добавя че проблема ми е на 100% софтуерен, тъй като с някакъв код взет на готово успях да пратя успешно информация от контролера към терминала.
Сега въпроса който стои е - какво съм объркал по конфигурацията за скоростта?

п.п: То този избор на банка и преди си го е имало написан. Всъщност добавих избор на банка точно преди етикет "main", както и непосредствено преди викане на uart_send.


Чет Юли 21, 2011 4:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Край на драмата :D
Проблемите бяха 2:
- не съм избирал правилната банка при предаване
- грешна инструкция при конфигуриране на PLL (Писал съм movf вместо movwf).

Благодаря на всички за помощта.


Чет Юли 21, 2011 5:09 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 
Код:
т.е. movlw 207 трябва да стане movlw .207 за да си сигурен че го приема десетично


не четеш ли warning-те.

_________________
PIC SPBRG values calculator


Чет Юли 21, 2011 5:11 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Това npelov, звучи като виц - то почти на всеки ред изписва warning.
Въпреки това "R=DEC" т.е default radix = decimal. Ако асемблера ще си мисли че може би било шестнадесетично, въпреки че съм му казал да е десетично - е**м ти и микрочепския асемблер :)
Както казах в предния си пост - грешките бяха от друго естество.
Отново благодаря на отзовалите се.


Чет Юли 21, 2011 5:18 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

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


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

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