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 support@ccsinfo.com

LCD Do not initialize using PORTs A and E.
Goto page Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
temtronic



Joined: 01 Jul 2010
Posts: 6249
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Wed Sep 20, 2017 5:37 am     Reply with quote

re: TRIS

CCS allows different 'mode' or 'methods' of setting up the I/O ports

fast_io() is used by experienced programmers who KNOW how to use it. Once assigned the I/O ports and bits are 'hard' to be inputs or outputs so you MUST do it right the first time! To Assembler guys like me, it's how we did and do things.....getting real close to the PIC. The problem is, 3 days later, someone changes the pinout and doesn't change the TRIS registers accordingly. Now that input pin is still an output and 'well, it worked before' syndrome occours.

standard_io() is the default mode and each time the program accesses an I/O port, it sets the TRIS accordingly. This way an input is always an input even after you change pinouts on the PCB.

In 99.44% of the code presented here, standard_io(), will be fine. ONLY in very time sensitve or codespace programs will fast_io() be needed. Today PICs have LOTS of memory so really it's just code that needs speed, say when talking to a peripheral that needs data at a specific rate. In 20+ years of 'playing with PICs', I've only needed fast_io() twice...both times to get timing to the peripheral 100% bang on.

As for the KBD driver, If you saw the mess on my bench, you'd wonder HOW it works, but for the past 2 months the flex_kbd driver hasn't missed ANY keypresses or given wrong numbers so I suggest going back to it, cut a small program (press a key-display on LCD) and if it fails, post it. I suspect 'something' else is causing the problem.

Jay
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Post subject: Thank you PCM programmer
PostPosted: Wed Sep 20, 2017 10:23 am     Reply with quote

Ohhh, Now I understood your explanation my friend PCM programmer.

I did the analysis on the datasheet page of the PIC and confirmed its great explanation. As an example of what was understood:

45 is 0x2D in hex, and 0b00101 101 in binary. 0b00101 = 05H -> is the address of PORT_A and 0b101 = 05H (address of bit PORT_A5). Thank you very much for your explanation. Very Happy
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

thank for your help
PostPosted: Sun Sep 24, 2017 11:53 am     Reply with quote

Thank you friends.

I wrote a wrong comment, how can I delete the post here?


Last edited by jacktaylor on Sun Sep 24, 2017 1:28 pm; edited 2 times in total
Ttelmah



Joined: 11 Mar 2010
Posts: 13526

View user's profile Send private message

PostPosted: Sun Sep 24, 2017 12:47 pm     Reply with quote

There are several problems.
Will re-type some of the code, add some comment, and use the code buttons to show some...

Code:

void main(void)
{
   set_tris_c(0x00);
   set_tris_d(0x0f
   output_c(0x00);
   output_d(0x02);

   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   //you should be setting up the timer before enabling the interrupt
   setup_timer_0(rtcc_internal|rtcc_div_2);
   set_timer0(0);

   while(true)
      if (cont == 250)  //This is the code executed by the while....
      {
         cont=0x00;
         output_toggle(PIN_D5);
      }
//What is meant to execute this?....
   {   
       if((input(col0)==1) && control == 0x01) // column 1 at high level?   
control equal to 1?
       {
           control = 0x02; // Set control = 02 to exit this loop if
           output_low(col0); // want to turn column 1 low after pressing a button
           output_high(col1);
           output_high(col2);
           if (input(!row0))
              pulse(1); // ERROR: Expecting a close parenthesis
           //You have three opening brackets and four closing brackets...
     
           else if ((input(!row1))
             pulse (4); // if it is line A, LED flashes 4 time..pulse(4)
           //here you don't have the extra, so no complaint...
           else if ((input(!row2))
             pulse (7); // if it is line A, LED flashes 7 time..pulse(7)
           else if ((input(!row3))
             pulse (11); // if it is line A, LED flashes 11 time..pulse(11)
        } // Error in all else if: “A numeric expression must appear here”
        //This is because of the unbalanced brackets


I've noted some problems and corrected some.
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

PostPosted: Sun Sep 24, 2017 1:52 pm     Reply with quote

This program was created to scan the keyboard keypad columns and lines and the LED flashes the number of times the key is pressed, for example if you press the number key 5, I will send a command to flash the led 5 times and so on.

I was able to do the same compiling without any error. Just replace the if ((input (! Row0)) key press (1)); for this if (input (! row0)) press (1).
and did the same on all the other lines that presented error in the compilation.
     else if ((input (! row1)) pulse (4)); for this else if (input (! row1)) pulse (4);
I just removed the parentheses from the pulse function and start the if.

This code is small, but I've been working on it for 7 days. Now I can not read from the keyboard and send it to the LCD. I still do not know how to do it because I believe that I can not use the kdb.c library, I will need to capture it from the keyboard and send it to the LCD now.
PCM programmer



Joined: 06 Sep 2003
Posts: 20385

View user's profile Send private message

PostPosted: Sun Sep 24, 2017 3:23 pm     Reply with quote

Here you have an obvious unfinished line:
Quote:
void main(void)
{
set_tris_c(0x00);
set_tris_d(0x0f
output_c(0x00);
output_d(0x02);


In 3 of the lines below, you have unbalanced parentheses. You have to
have equal numbers of opening parens and closing parens.
Also you have the negation symbol ! in front of the CCS pin number.
This won't work at all. It's not what you want.
Quote:

if (input(!row0)) pulse(1);
else if ((input(!row1)) pulse (4);
else if ((input(!row2)) pulse (7);
else if ((input(!row3)) pulse (11);


This is how it should be done:
Code:
if (!input(row0)) pulse(1);
else if (!input(row1)) pulse (4);
else if (!input(!row2)) pulse (7);
else if (!input(!row3)) pulse (11);



Also your program has #int_timer0 stuck way up near the top.
Quote:
#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)
#use fast_io(c)
#use fast_io(d)
#int_timer0
#define LCD_DB4 PIN_A4
#define LCD_DB5 PIN_A3
#define LCD_DB6 PIN_A2
#define LCD_DB7 PIN_A1
#define LCD_RS PIN_E0
#define LCD_E PIN_A5


It should be placed immediately above the interrupt routine, as shown below:
Code:
#int_timer0   
void TIMER0_isr(void)
{
   set_timer0(0);
   cont++;       
}



Also, you are missing the opening brace after the while(true) line.
Instead, you stuck it down at the bottom of the posted code.
Quote:
while(true)
if (cont == 250)
{
cont=0x00;
output_toggle(PIN_D5);
}
{


You really need to get a book like "Learn C in 3 weeks" and take 3 weeks
off and learn it. Then do some programming.

I remembered an old thread:
http://www.ccsinfo.com/forum/viewtopic.php?t=32022&start=15
He says:
kein wrote:

PCM programmer, mate I went and exactly learn C programming for 3
weeks as you instructed me. I'm well with the syntax now. Thanks alot for
that ...It had helped me alot.
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Thank Friends
PostPosted: Mon Sep 25, 2017 11:27 am     Reply with quote

Ok friend PCM programmer, thanks for the tips. I had already found the errors as I posted in the reply to friend Ttelmah.
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Function not working
PostPosted: Mon Sep 25, 2017 2:01 pm     Reply with quote

Hello friends. I would stay here again. Continuing my program. The program test reveals zero timer overflow with output output_toggle (Led2); flashing. The scanning of the columns is also evident when performing the debug on the Proteus.

However, by pressing the keypad key, calling the function
Code:
void press (char number);

Led2, PIN_D5 is not blinking. What may be missing for the Pulse function to load the number in (char number)?
Code:

#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)
#use fast_io(c)
#use fast_io(d)
#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A3
#define LCD_DB6   PIN_A2
#define LCD_DB7   PIN_A1
#define LCD_RS    PIN_E0
#define LCD_E     PIN_A5
#include <lcd4bitsMicrostronic.c>
#define col0 PIN_C0
#define col1 PIN_C1
#define col2 PIN_C2
#define row0 PIN_D0
#define row1 PIN_D1
#define row2 PIN_D2
#define row3 PIN_D3
#define Led1 PIN_D4
#define Led2 PIN_D5

char control = 0x01; // variable created to scan columns
//** Interrupt function due to TIMER0 overflow
#int_timer0 
void TIMER0_isr(void)
{
   set_timer0(0);
   cont++;       
}

void pulse (char number) // void pulse function, the led flashes the number of times the key is pressed
    {     
char i;
 for (i=0; i<number; i++)
    {
         output_high(Led1);
         delay_ms (400);
         output_low(Led1); 
         delay_ms (400);
     }
}
void main(void)
{
   
   set_tris_c(0x00);
   set_tris_d(0x0f);   
    output_c(0x07);
   output_d(0x0f); 
     
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   setup_timer_0(rtcc_internal|rtcc_div_256);
   set_timer0(0);
                   
                     
  while(true)
  {
      contimer = get_timer0(); // only to test the timer overflow in debbuger
   
   if (cont == 250)    // 13ms x 250= 3,25s
    {
          cont=0x00;
         output_toggle(Led2);
      }   
             
    if(input(col0) && control == 0x01)  // column 1 at high level? control equal to 1?
    {                           
      control = 0x02;            // active control = 02 to exit this loop if
      output_low(col0);     // I want to turn column 1 on low level after pressing a key
      output_high(col1);         
      output_high(col2);         
    if (input(!row0)) pulse(1);  // if it is line A, it will flash LED 1 time..pull (1)
    else if (input(!row1)) pulse (4); //if it is line B, it will flash LED 4 time..pull (4)
   else if (input(!row2)) pulse (7);  //if it is line C, it will flash LED 7 time..pull (7)     
   else if (input(!row3)) pulse (11); // if it is line D, it will flash LED 11 time..pull (11)
    }

    else if(input(col1)&& control == 0x02) 
    {                                 
      control = 0x03;                 
      output_high(col0);
      output_low (col1);  // queremos acionar a coluna 2 em nivel baixo apos apertar uma tecla
      output_high(col2);
      if (input(!row0)) pulse(2);             
      else if (input(!row1)) pulse (5);   
      else if (input(!row2)) pulse (8);   
      else if (input(!row3)) pulse (10);   
    }
    else if(input(col2)&& control == 0x03)  // coluna3 em nivel higth? control igual a 1?
    {                                // Yes
      control = 0x01;                 
      output_high(col0); 
      output_high(col1);
      output_low(col2);
      if (input(!row0)) pulse(3);
      else if (input(!row1)) pulse (6);
      else if (input(!row2)) pulse (9);
      else if (input(!row3)) pulse (12);
       } //  End Else If
  }// End while(true)
 }// End da main :cry:
PCM programmer



Joined: 06 Sep 2003
Posts: 20385

View user's profile Send private message

PostPosted: Mon Sep 25, 2017 4:15 pm     Reply with quote

You're still using the construct that I told you is absolutely incorrect.
That is the negation of a pin number, ie. !row.

Let's do a little test and see what it does. Let's load !row0 into a variable
and compile and look at the .LST file after we compile.
We can see that !row0 is converted by the compiler into 0x00.
So in your program you are trying to input() from a pin, but you're
actually doing input(0x00) which is not going to do anything.
Code:

.................... value = !row0; 
000F:  BCF    STATUS.RP0
0010:  CLRF   value   // It thinks !row is 0x00.  That's not going to work.
.................... 
.................... value = row0;
0011:  MOVLW  40   // row0 is 0x40, which is 64, which is PIN_D0
0012:  MOVWF  value


It's also clear that you have not even compiled the program that you
posted, because when I try to compile it I get these errrors:
Quote:
*** Error 12 "PCM_Test.c" Line 30(4,8): Undefined identifier cont
*** Error 12 "PCM_Test.c" Line 60(7,15): Undefined identifier contimer
*** Error 12 "PCM_Test.c" Line 62(8,12): Undefined identifier cont
*** Error 12 "PCM_Test.c" Line 64(11,15): Undefined identifier cont
4 Errors, 0 Warnings.

You haven't declared the variables 'cont' or 'contimer'.
You haven't made the changes regarding !row0, etc., that you said you did.



Test program to see what !row0 does:
Code:

#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)

#define row0 PIN_D0

//=========================

void main(void)
{
int8 value;

value = !row0;

value = row0;

while(TRUE);
}
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Thank you PCM programmer
PostPosted: Mon Sep 25, 2017 11:21 pm     Reply with quote

Ok PCM programmer thank you very much for your help.

Yes, I declared the variables 'cont' and 'contimer'.

The problem happened when I copied the missing code to copy these declared variables. The code compiled without any error.

char cont = 0x00;
int contimer = 0x00;

So, let's face it: I understood when you taught with regard to PORT addressing and PINs, ie The memory address of PORTD = 08H and pin D0 = 000 = 0b01000000, where the last 5 bits is the PORT address and the first three bits of the bit address.
To check if the PORT_d0..d3 level is low, I used the input () function. and as you yourself mentioned in the post the correct is to use as follows:


PostPosted: Sun Sep 24, 2017 3:23 pm Post subject:

This is how it should be done:

Code:
if (! input (row0)) press (1);
else if (! input (row1)) press (4);
else if (! input (row2)) press (7);
else if (! input (row3)) press (11);

and I had already checked in the CCS manual:

Syntax: value = input (pin)
Parameters: Pin to read. Pins are defined in the devices .h file. The actual
value is a bit address. For example, port a (byte 5) bit 3 would
have a value of 5 * 8 + 3 or 43. This is defined as follows: #define
PIN_A3 43.
The PIN could also be a variable. The variable must have a value
equal to one of the constants (like PIN_A1) to work properly. The
tristate register is updated unless the FAST_IO mode is set on port
A. note that doing I / O with a variable instead of a constant will take
much longer time.

Returns:
0 (or FALSE) if the pin is low,
1 (or TRUE) if the pin is high

Example: while ( !input(PIN_B1) );
// waits for B1 to go high

The problem is that even with the modifications made, the pulse () function is not receiving the value to flash Led1.

But honestly I still do not understand how to check if the pin is high or low to direct void pulse (), already reading (! Input (row0)); the program is still retuning zero.

follow the program again the complete program:
Code:

#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)
#use fast_io(c)
#use fast_io(d)
#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A3
#define LCD_DB6   PIN_A2
#define LCD_DB7   PIN_A1
#define LCD_RS    PIN_E0
#define LCD_E     PIN_A5
#include <lcd4bitsMicrostronic.c>
#define col0 PIN_C0
#define col1 PIN_C1
#define col2 PIN_C2
#define row0 PIN_D0
#define row1 PIN_D1
#define row2 PIN_D2
#define row3 PIN_D3
#define Led1 PIN_D4
 #define Led2 PIN_D5
char control = 0x01; // variable created to scan columns
char cont =    0x00;
int contimer = 0x00;
//** Interrupt function due to TIMER0 overflow
#int_timer0 
void TIMER0_isr(void)
{
   set_timer0(0);
   cont++;       
}

void pulse (char number) // void pulse function, the led flashes the number of times the key is pressed
    {     
char i;
 for (i=0; i<number; i++)
    {
         output_high(Led1);
         delay_ms (400);
         output_low(Led1); 
         delay_ms (400);
     }
}
void main(void)
{
   
   set_tris_c(0x00);
   set_tris_d(0x0f);   
    output_c(0x07);
   output_d(0x0f); 
     
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   setup_timer_0(rtcc_internal|rtcc_div_256);
   set_timer0(0);
                   
                     
  while(true)
  {
      contimer = get_timer0(); // only to test the timer overflow in debbuger
   
   if (cont == 250)    // 13ms x 256= 13ms
    {
          cont=0x00;
         output_toggle(Led2);
      }   
             
    if(input(col0) && control == 0x01)  // column 1 at high level? control equal to 1?
    {                           
      control = 0x02;            // active control = 02 to exit this loop if
      output_low(col0);     // I want to turn column 0 on low level after pressing a key
      output_high(col1);         
      output_high(col2);         
    if (!input(row0)) pulse(1);  // if it is line A, it will flash LED 1 time..pull (1)
    else if (!input(row1)) pulse (4); //if it is line B, it will flash LED 4 time..pull (4)
    else if (!input(row2)) pulse (7);  //if it is line C, it will flash LED 7 time..pull (7)     
    else if (!input(row3)) pulse (11); // if it is line D, it will flash LED 11 time..pull (11)
    }

    else if(input(col1)&& control == 0x02) 
    {                                 
      control = 0x03;                 
      output_high(col0);
      output_low (col1);  // I want to turn column 1 on low level after pressing a key
      output_high(col2);
      if (!input(row0)) pulse(2);   // row0 in nivel low?           
      else if (!input(row1)) pulse (5);  // row1 in nivel low?           
      else if (!input(row2)) pulse (8);   // row2 in nivel low?           
      else if (!input(row3)) pulse (10);   // row3 in nivel low?           
    }
    else if(input(col2)&& control == 0x03)  // colum3 in nivel higth? control igual a 1?
    {                                // Yes
      control = 0x01;                 
      output_high(col0); 
      output_high(col1);
      output_low(col2); // I want to turn column 2 on low level after pressing a key
      if (!input(row0)) pulse(3);
      else if (!input(row1)) pulse (6);
      else if (!input(row2)) pulse (9);
      else if (!input(row3)) pulse (12);
       } //  End Else If
  }// End while(true)
 }// End da main
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Program does not execute interrupt timer0
PostPosted: Thu Sep 28, 2017 1:50 pm     Reply with quote

Could someone please help me?

I can not understand and solve the problem in my code. If we leave the while loop (true) without any instruction, the program executes the timer0 interrupt and the status of Led1 is changed by the output_toggle (Led1) instruction; If you put some statements in while (true), the program gets stuck while (true) and does not interrupt timer0. Could you help me understand why this happens? For me the program should exit the loop and execute the timer0 interrupt.

Code:


// Program scans matrix keyboard and flashes LED number of times according to key pressed.


#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)

#use fast_io(d)
#use fast_io(c)


//****Set Keyboard Keyboard Pins.

#define col0 PIN_C0
#define col1 PIN_C1
#define col2 PIN_C2
#define row0 PIN_D0
#define row1 PIN_D1
#define row2 PIN_D2
#define row3 PIN_D3

//*** Global Variables

 #define Led1 PIN_D4
 #define Led2 PIN_D5
 #define Led3 PIN_D6
       

char control = 0x01; // created to scan the columns.
char cont =    0x00;
int contimer = 0x00;

//***prototype blink led function

void pulse(char number);

//** Interrupt directive of TIMER0.

#int_timer0   

void TIMER0(void)
{
               
                   // Assim 256-0 = 250*0,2us*256(prescaler)= 13ms
    cont++;        // Incrementa cont a cada 13ms
       
    if (cont == 77)    // 13ms x77= 1s Timer0 estourou 77 vezes!!!
      {
       
         output_toggle(Led1);
         
 
    if(input(col0) && control == 0x01)  // column 1 at high level? control equal to 1?
    {                           
      control = 0x02;           
      output_low(col0);         
      output_high(col1);         
      output_high(col2);         
      if (!input(row0))       pulse(1);   //if line A, function call PULSE..pisca LED 1 time..pulse (1))
      else if (!input(row1)) pulse (4); 
      else if (!input(row2)) pulse (7); 
      else if (!input(row3)) pulse (11);
    }

    else if(input(col1)&& control == 0x02) 
    {                                 
      control = 0x03;                 
      output_high(col0);
      output_low (col1); 
      output_high(col2);
      if (!input(row0)) pulse(2);             
      else if (!input(row1)) pulse (5);   
      else if (!input(row2)) pulse (8);   
      else if (!input(row3)) pulse (10);   
    }

    else if(input(col2)&& control == 0x03) 
    {                               
      control = 0x01;           
      output_high(col0); 
      output_high(col1);
      output_low(col2);
      if (!input(row0)) pulse(3);
      else if (!input(row1)) pulse (6);
      else if (!input(row2)) pulse (9);
      else if (!input(row3)) pulse (12);
     
       } //  End Else If
   cont=0x00; 
   contimer=0;
  }
   
   set_timer0(0);
}
   


//** Inicio da main

void main(void)
{
 
   set_tris_c(0x00);
   set_tris_d(0x0f);
   
   output_c(0x07);
   output_d(0x0f); 
   
   setup_timer_0(rtcc_internal|rtcc_div_256);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   set_timer0(0);
     
                   
   while(1)// if I put commands within the while the program does not execute what is inside the void timer0 ()
   {   

     // output_toggle(Led2);
     // delay_ms(1000);
   
  }// End while(true)
 }// End da main

//**** void pulse function, the led flashes the number of times the key is pressed

void pulse (char number)
{                       
 char i;
 
 for (i=0; i<number; i++)
     
   {
         output_high(Led3);
         delay_ms (400);
         output_low(Led3); 
         delay_ms (400);
     }
}
temtronic



Joined: 01 Jul 2010
Posts: 6249
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Sep 28, 2017 6:09 pm     Reply with quote

One HUGE problem is that you are calling delay_ms() from within the ISR. That is a big, bad mistake.
ISRs are supposed to be FAST, usually 2-5 lines of code, simple setting of 'flags', maybe incrementing a variable but never ever
1) delays of any kind
2) print functons of any kind
3) NO floating point math
4) no 'fancy' maths( arc,cos,etc..)
PCM programmer



Joined: 06 Sep 2003
Posts: 20385

View user's profile Send private message

PostPosted: Thu Sep 28, 2017 6:17 pm     Reply with quote

Quote:
If you put some statements in while (true), the program gets stuck while (true)

To fix this particular problem, add the line shown in bold below. You will
now have two #use delay() statements.

I think your program has other problems, basically the whole design of
it is not the way I would do it. But I don't want to talk about it.

Just add the 2nd #use delay() and #int_timer0 interrupts will not be blocked.
Quote:

#include <16f877a.h>
#fuses hs, nowdt, nolvp, put, brownout
#use delay (clock=20M)
.
.
.
.
.
.

#use delay (clock=20M) // Put a 2nd #use delay() statement here
void main(void)
{

set_tris_c(0x00);
set_tris_d(0x0f);

output_c(0x07);
output_d(0x0f);

setup_timer_0(rtcc_internal|rtcc_div_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(0);


jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Thak you Friends
PostPosted: Fri Sep 29, 2017 8:20 am     Reply with quote

Thank you friends PCM programmer and temtronic , I am very pleased with the help you give us.
jacktaylor



Joined: 02 Sep 2017
Posts: 70

View user's profile Send private message Send e-mail

Program does not execute interrupt timer0
PostPosted: Fri Sep 29, 2017 8:28 am     Reply with quote

PCM programmer: "I think your program has other problems, basically the whole design of
it is not the way I would do it. But I don't want to talk about it. "

PCM plz you can talk, because this helps me a lot to understand the programming better. please post your suggestion. Razz Wink
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 2 of 4

 
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