PIC12LF1822 Программирование UART с внешним Fosc

В настоящее время я работаю с контроллером серии Microchip PIC12LF1822. В этом мне нужно настроить EUSART в 8-битном асинхронном режиме и генерацию импульсов 1 МГц с использованием ШИМ ...

Сначала я начал с отправки и получения данных через UART ... Но после настройки, включая выбор генератора в регистре конфигурации, мой код не работает и не может отправить символ через вывод tx (RA0).

Я глубоко проанализировал, но не могу найти для этого решения. Кто-нибудь может предложить решить эту проблему.

Ниже я вставил свой код,

#include<htc.h>
#include <PIC12LF1822.H>
#include "BIPOLAR_SERIAL.C"

#define _XTAL_FREQ 12000000
//Configuration word 1 register for oscillator selection
__CONFIG(CP_OFF & BOREN_OFF & WDTE_OFF & IESO_OFF & FCMEN_OFF & PWRTE_ON & CPD_OFF &                 FOSC_XT);
//Configuration word 2 register for disabling Low-Voltage program
__CONFIG(LVP_OFF);



void PWM_Duty_Cyle(unsigned int duty_cyc)
{
CCPR1L = duty_cyc>>2;
CCP1CON &= 0xcf;
CCP1CON |= ((duty_cyc & 0x03)<<4);
}

void PWM_Init()
{
TRISA2 = 0;  //PWM Pin as output
CCP1CON = 0x0c;  //PWM mode: P1A, P1C active-high; P1B, P1D active-high
PR2 = 0x00;  //Timer Period Configuration
T2CON = 0x00;    //Timer2 Prescale as 1 
PWM_Duty_Cyle(0);    //Initialize PWM to 0 percent duty cycle
T2CON |= 0x04;   //Enable Timer2    
}


void main()
{
APFCON = 0;
ANSA0=0;ANSA1=0;ANSA2=0;
serial_init();
serial_tx('S');
//  PWM_Init();
//  serial_str("PIC12LF1822_TEST");
while(1)
{
 serial_tx('A');
 serial_tx(' ');
}   

}

В приведенном выше коде я не могу получить символ «A», а также «S».

Примечание: я использую 12 МГц как Fosc, и я установил скорость передачи в соответствии с этим .. (SPBRG = 77 для baud = 900, brgh = 1)


person Vignesh_Jay    schedule 06.05.2014    source источник


Ответы (1)


Что делают ваши функции "SerialInit ()" и "SerialTx ('S')"? Опубликуйте код этих функций, я бы хотел посмотреть, как вы настраиваете свой последовательный порт

Возможно, вы не установили все необходимые биты (RCSTA, TXSTA, SPBRG). Чтобы правильно настроить эти биты, убедитесь, что вы знаете соответствующую скорость BaudRate, если вам нужна высокая скорость, убедитесь, что правильно настроили SPBRGH.

Мои две функции для передачи через UART при правильной инициализации:

void vTx232 (UC ucSend)
 {
    STATUS.RP0 = PIR1;     //Sure we're in PIR1
    while (PIR1.TXIF == 0);//While last TX not done
    TXREG = ucSend;        //Input param into TXREG
 }

void vTxString(UC *ucpString)
 {
   while (*ucpString!= 0x00)    //While string not at its end
    {
      vTx232(*ucpString);       //Send string character
      ucpString++;              //Increm string pointer
    }
 }

Лист данных: PIC12LF1822

person Jean-francois    schedule 10.06.2014