Отговори на тема  [ 40 мнения ]  Отиди на страница Предишна  1, 2, 3
Писане на С за PIC16f84 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Писане на С за PIC16f84
miro_atc, и аз щях да питам същото, но като отворих документация се оказа, че е &.
С18 ползвах веднъж само, но нещо не ми хареса и пак се върнах на CCS C. PIC18 - също. Отдавна съм на PIC24.
Затова може и да бъркам, ама ми се чини, че твърде бързаш с изпращането на стринга след конфигурирането на UART-а, та може затова да пропуска първия символ в началото на предаването.
За сега сложи някакво закъснение и пробвай. В реална програма, ако конфигурираш периферията в началото на програчата, докато дойде време да я използваш, тя вече ще е готова за работа.


Нед Сеп 23, 2012 4:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: Писане на С за PIC16f84
Инициализирай TX пина на процесора в изход с ниво "1", брой поне до 3 ( времена за предаване на един знак ), след това вече - както си знаеш.


Нед Сеп 23, 2012 7:37 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: Писане на С за PIC16f84
Desert Leo написа:
miro_atc, и аз щях да питам същото, но като отворих документация се оказа, че е &.

В смисъл операторът е правен като за PHP програмисти или константите са в инверсна логика?

иначе това дето казва батето звучи логично...


Нед Сеп 23, 2012 7:53 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение Re: Писане на С за PIC16f84
дефайните на цялата периферия за PIC18 за mcc18,
са прекарани през едно условие
#ifdef USE_OR_MASKS
като ето едно добро обяснение:

The USE_OR_MASKS is something that *you* choose, in order to move between "old-microchip-style" of combining constants with "&" and the new style (also Microsoft etc style...) that uses "|" for that goal.
It won't probably make any difference on your issue, and from what you say it looks like a bug in the header files for that PIC...

оттук https://www.microchip.com/forums/m620347-print.aspx

Интересно че в няколко стари проекта , и аз съм си ги позлвал с &, по подобие на екзампълите
и не ми беше направило впечатление

ето и нещо от хелпа оттук "file:///C:/mcc18/doc/periph-lib/USART.htm" , където е инсталиран mcc18 съответно на локалния комп.

Example Use of the USART Routines with OR mask:
#include <p18C452.h>
#define USE_OR_MASKS
#include <usart.h>
void main(void)
{
// configure USART
OpenUSART( USART_TX_INT_OFF |
USART_RX_INT_OFF |
USART_ASYNCH_MODE |
USART_EIGHT_BIT |
USART_CONT_RX |
USART_BRGH_HIGH,25 );
while(1)
{
while( ! PORTAbits.RA0 ); //wait for RA0 high
WriteUSART( PORTD ); //write value of PORTD
if(PORTD == 0x80) // check for termination
break; // value
}
CloseUSART();
}


Нед Сеп 23, 2012 11:07 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Юни 09, 2012 12:23 am
Мнения: 146
Местоположение: София/Стара Загора
Мнение Re: Писане на С за PIC16f84
Оказа се че просто така е направено първият байт който се зареди за изпращане се игнорира, след след което TXSTAbits.SENDB бит се вдига и всичко си става нормално. Преди да изпратя нещо аз си го вдигам и по този начин няма игнориране.


Вто Сеп 25, 2012 1:34 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Съб Юни 09, 2012 12:23 am
Мнения: 146
Местоположение: София/Стара Загора
Мнение Re: Писане на С за PIC16f84
Код:
#include <p18f4620.h>
#include <delays.h>
#include <usart.h>
void f(int a);
void rf();
//конфигурация на микроконтролера
#pragma config IESO=ON
#pragma config BOREN=OFF
#pragma config WDT=OFF
#pragma config MCLRE=OFF
#pragma config OSC=HS


void main(void)
{     
   char a,b;//a- брой стъпки, b- посока на въртене
   int i;
   i=2;
   TRISA=0x00;
   OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF &  USART_ASYNCH_MODE & USART_EIGHT_BIT &            USART_CONT_RX & USART_BRGH_HIGH, 25 );// конфигурация на USART модула
   PORTA=0x00;
   while(i){   
      TXSTAbits.SENDB=0;      
        putrsUSART("helo 2");
         Delay10KTCYx(100);
      i--;
      }
   while(!DataRdyUSART())
   {   
      TRISCbits.TRISC0=0;
      PORTCbits.RC0=1;
   }
   a=getcUSART();
   if(a=='a')
      {   
         PORTA=0b00000010;
         Delay10KTCYx(120);   
      }
   while(!DataRdyUSART())
   {   
      TRISCbits.TRISC1=0;
      PORTCbits.RC1=1;
   }
   b=ReadUSART();
   if(b=='f')
      {   
         f(a);      
      }
}   
void f(int a)
{
   PORTAbits.RA0=0xFF;
   Delay10KTCYx(120);
}


Кода е писан в MPLAB а компилатора е C 18. Накратко пращам команди по USART като искам да управлявам портовете. Тая последната функция която сам си пиша f(int a) се вика ако вторият байт който изпратя е 'f'. Въпросът ми е PORTAbits.RA0=0xFF би трябвало да засяга само 0 бит на ПОРТА. Описвам какво точно става: получавам съобщение по USART, после аз пращам ако съм изпратил 1-вият път "а" светва диод на ПОРТА<1> , след това ако пратя "f" викам въпросната функция f(int a), искам да установя ПОРТА<0> в 1 той светва но гаси ПОРТА<0>, а не би трябвало да е така. Да спомена че схемата я тествам в PROTEUS може и там да проблема.

Проблема решен оказа сe че порта изрично трябва да бъде конфигуриран като цифров.


Съб Сеп 29, 2012 8:45 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Дек 27, 2012 2:19 pm
Мнения: 1
Мнение Re: Писане на С за PIC16f84
Завейте, малко съм начинаещ с програмирането на PIC16f84 (вече съм го подкарал и портовете мога да ги ползвам като изходи и входове) малко страня от темата, но искам да ви попитам може ли да стане комуникация между два PIC16f84 (В смисъл единия да изпраща някакъв символ и другия да го прочита) и как точно се прави това или поне да ме насочите към някаква литература благодаря предварите за обърнатото внимание и за загубеното ви време. :)


Чет Дек 27, 2012 4:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Писане на С за PIC16f84
Краткия отговор е : Да. Дългия отговор е : ебаси гърча. Сега поне пик-ове в кометя бол - кой от кой по-по-най. Почти няма такива дето да нямат поне един хардуерен комуникационен модул - дали ще е асинхронен или синхронен(че големите и паралелни имат даже). Защо всеки начинаещ винаги пита за 16F84... не знам...


Чет Дек 27, 2012 5:55 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Писане на С за PIC16f84
Защото ф84 няма нищо за конфигуриране. Почти "ръг и тръг" (plug and play) е.
На модерните докато изчетат документацията, ератата и ги осмислят си е гърч, особено за начинаещ...


Пет Дек 28, 2012 12:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Писане на С за PIC16f84
kiril1887 написа:
и как точно се прави това или поне да ме насочите към някаква литература благодаря предварите за обърнатото внимание и за загубеното ви време. :)

Мога да ти препоръчам това: viewtopic.php?f=7&t=8452 евтино е и е сравнително лесно за начинаещи.

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Дек 28, 2012 5:07 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 40 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

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


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

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