CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

how to define pins as array?

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
40inD



Joined: 30 Jul 2007
Posts: 112
Location: Moscow, Russia

View user's profile Send private message

how to define pins as array?
PostPosted: Thu Apr 24, 2008 1:44 am     Reply with quote

How to define pins as array? I want to declare pins like

Code:
A[0]=pin_A0;
....
A[15]=pin_B7;

and work with pins in array style i.e. On or Off the pin by this command:
Code:
A[i]=ON
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Apr 24, 2008 2:04 am     Reply with quote

You could declare an array of bits, and then set the base address of the
array to the address of PortA with the #locate directive. Note that you
must also set the TRIS for the Ports, to make all pins be outputs.
Also, on the 16F877, PortA outputs A6 and A7 don't exist. On other
PICs, one pin on PortA might be an input-only pin.
Code:

#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)

int1 array_of_bits[16];
#locate array_of_bits = 0x05  // Address of PortA on 16F877

//====================================
void main()
{
int8 i;

set_tris_a(0x00);
set_tris_b(0x00);

array_of_bits[0] = 1;
array_of_bits[1] = 0;
array_of_bits[2] = 1;
array_of_bits[3] = 0;
array_of_bits[4] = 1;
array_of_bits[5] = 0;
array_of_bits[6] = 1;
array_of_bits[7] = 0;
array_of_bits[8] = 1;
array_of_bits[9] = 0;
array_of_bits[10] = 1;
array_of_bits[11] = 0;
array_of_bits[12] = 1;
array_of_bits[13] = 0;
array_of_bits[14] = 1;
array_of_bits[15] = 0;

while(1);
}
40inD



Joined: 30 Jul 2007
Posts: 112
Location: Moscow, Russia

View user's profile Send private message

PostPosted: Thu Apr 24, 2008 3:28 am     Reply with quote

Hmmm. I tried to make this:
Code:

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES WRT_50%                  //Lower half of Program Memory is Write Protected

#use delay(clock=4000000)
byte R[24]; // relays array


void main()
{int i;
R[0]=pin_A4;
R[1]=pin_A5;
R[2]=pin_E0;
R[3]=pin_E1;
R[4]=pin_E2;
R[5]=pin_C0;
R[6]=pin_C1;
R[7]=pin_C2;
R[8]=pin_C3;
R[9]=pin_D0;
R[10]=pin_D1;
R[11]=pin_D2;
R[12]=pin_D3;
R[13]=pin_C4;
R[14]=pin_C5;
R[15]=pin_C6;
R[16]=pin_C7;
R[17]=pin_D4;
R[18]=pin_D5;
R[19]=pin_D6;
R[20]=pin_D7;
R[21]=pin_B1;
R[22]=pin_B2;
R[23]=pin_B4;


  setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
 for (i=0; i<=23; i++)
 {
   output_high(R[i]);
 delay_ms(250);
 
 }

}

And in Proteus it works fine.
Matro
Guest







PostPosted: Thu Apr 24, 2008 3:41 am     Reply with quote

Yes, it will work.
It's simpler to implement than PCM programmer's method, but definitely less efficient.

Matro
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Apr 24, 2008 11:47 am     Reply with quote

This thread has an code for another method.
http://www.ccsinfo.com/forum/viewtopic.php?t=18949
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group