Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TUTORIJAL: xc8 i pic16F1827

[es] :: Elektronika :: Mikrokontroleri :: TUTORIJAL: xc8 i pic16F1827
(TOP topic, by veselinovic)
Strane: 1 2

[ Pregleda: 13141 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

zoligen
subotica

Član broj: 59732
Poruke: 81
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: TUTORIJAL: xc8 i pic16F182720.01.2014. u 16:06 - pre 123 meseci
Mozda se nisam obratio na pravom mestu ali ja za bolje ne znam.
Radim sa pic16f1827 (pokajao sam se vec 100 puta sto sam izabrao bas njega) u CCS C-u. Zasto bas u CCS C-u? Jer sam nasao primer gde se koristi serijska komunikacija i PWM istovremeno za sta sam mislio da nije moguce zbog MDSRC registra gde se MDMS bitovima bira PWM ili EUSART TX OUTPUT. E sad pitanje. Imam potrebu da u C program ubacim asemblersku rutinu ali ne znam kako da vrednost iz asemblerske rutine prenesem u promenljivu C-a. Kontam ja da varijabla mora da bude globalna a imam i neke primere ali jedan ne radi bas ono sto bih ja hteo a drugi ima u sebi dosta gresaka. Ovo su ti primeri.
Code:

/////////////////////////////////////////////////////////////////////////
////                         EX_GLINT.C                              ////
////  This example shows how to use the global interrupt to execute  ////
////  interrupts quickly and efficently.  It also shows how to use   ////
////  the #asm and #endasm directives.                               ////
////                                                                 ////
////  Configure the CCS prototype card as described below.           ////
////                                                                 ////
////  This example will work with the PCM and PCH compilers.         ////
////  The following conditional compilation lines are used to        ////
////  include a valid device for each compiler.  Change the device,  ////
////  clock and RS232 pins for your hardware if needed.              ////
/////////////////////////////////////////////////////////////////////////

#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12
#endif

long counter;

#if defined(__PCM__)
   int save_w;
   #locate save_w=0x7f
   int save_status;
   #locate save_status=0x20
   
   #byte status = 3
   #bit zero_flag = status.2
   #bit t0if = 0xb.2
#elif defined(__PCH__)
   int save_w;
   #locate save_w=0x80
   int save_status;
   #locate save_status=0xFF
   
   #byte status = 0xFD8
   #bit zero_flag = status.2
   #bit t0if = 0xFF2.2
#endif

#INT_GLOBAL
void isr()  {
   #asm
   //store current state of processor
   MOVWF save_w
   SWAPF status,W
   BCF   status,5
   BCF   status,6
   MOVWF save_status
   // Save anything else your code may change
   // You need to do something with PCLATH if you have GOTOs

   // remember to check to see what interrupt fired if using more than one!!

   // code for isr
   BCF   t0if
   INCF  counter,F
   BTFSC zero_flag
   INCF  (&counter+1),F

   // restore processor and return from interrupt
   SWAPF save_status,W
   MOVWF status
   SWAPF save_w,F
   SWAPF save_w,W
   #endasm
}

void main()   {

   printf("\r\nStarting the counter.\r\n\n");
   counter = 0;

   setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
   enable_interrupts(INT_RTCC);
   enable_interrupts(GLOBAL);

   while(TRUE)
   {
      printf("The counter value is currently:  %5lu\r\n", counter);
      delay_ms(1000);
   }
}



int_ffind_parity(int data){
int count;, result,datal;
data1=data;
#asm 
MOV #0x08
MOV WF, count 
CLRF result 
Loop: 
MOVF data1,w 
XORWF result, F 
RRCF data1,F 
DECFSZ count,F 
BRA LOOP 
MOVLW 0x01 
ANDWF resutt, F 
#end asm 
retturn (result)';




Da li bi neko mogao da mi to pojasni. Uzgred i misljenje o CCS C-u bi me zanimalo. Hvala.

 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: TUTORIJAL: xc8 i pic16F1827
(TOP topic, by veselinovic)
Strane: 1 2

[ Pregleda: 13141 | Odgovora: 20 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.