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

Memset function reset gpio PIC12F675

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Diego López



Joined: 25 May 2012
Posts: 11
Location: Colombia

View user's profile Send private message

Memset function reset gpio PIC12F675
PostPosted: Fri May 25, 2012 10:33 am     Reply with quote

I do not speak English, I apologize

memset function has gpio port to zeros


Code:
set_tris_a(0b111110);
bit_set(gpio,0);
memset(dato_recibido, 0, sizeof(dato_recibido));


thank you very much

complete code

Code:
#include <12f675.h>

#use delay(clock=4000000, restart_wdt)
#fuses xt,wdt,brownout,put,protect,nomclr

#byte   gpio = 0x05

#define led_tecla gpio,0

int dato_recibido[5];

void main()      //Rutina principal
{
set_tris_a(0b111110);
bit_set(gpio,0);
memset(dato_recibido, 0, sizeof(dato_recibido));

while(true)      
   {
      delay_ms(10);
   }
}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri May 25, 2012 1:13 pm     Reply with quote

What is the problem ?
Do you think that memset() is setting the GPIO port = 0 ?


What is your CCS compiler version ?
Diego López



Joined: 25 May 2012
Posts: 11
Location: Colombia

View user's profile Send private message

PostPosted: Fri May 25, 2012 7:54 pm     Reply with quote

When you run the function memset() on the PIC12F675 happens that the GPIO is set to zero.

CCS 4.130

thank you very much
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri May 25, 2012 11:46 pm     Reply with quote

I think it's a bug in memset() for the 12F-series PICs. Look at the last
post in the thread in the following link. He has the same bug.
He's using vs. 4.108.
http://www.ccsinfo.com/forum/viewtopic.php?t=43266&highlight=memset
This bug appears to start in vs. 4.033 and continue to the current
version 4.032.

You can see it in the .LST file below. The code is clearing PortA (GPIO).
Code:

.................... bit_set(gpio,0); 
0030:  BCF    03.5   // Bank 0
0031:  BSF    05.0
.................... memset(dato_recibido, 0, sizeof(dato_recibido)); 
0032:  CLRF   05    // Set GPIO port = 0   *** Bug
0033:  MOVLW  24
0034:  MOVWF  04
0035:  CLRF   20
0036:  MOVLW  05
0037:  MOVWF  21
0038:  GOTO   004
....................


Here's the code for vs. 4.031. Notice that they don't call a routine at
address 0004. Instead they just clear memory in a loop. They don't
write to PortA (at address 05) and there is no bug:
Code:

.................... bit_set(gpio,0); 
0029:  BCF    03.5
002A:  BSF    05.0
.................... memset(dato_recibido, 0, sizeof(dato_recibido)); 
002B:  MOVLW  05
002C:  MOVWF  21
002D:  INCF   22,F
002E:  MOVLW  25
002F:  MOVWF  04
0030:  BCF    03.7
0031:  CLRF   00
0032:  INCF   04,F
0033:  DECFSZ 21,F
0034:  GOTO   031
.................... 


The memset bug appears to be confined to the 12F series. I looked at
code for 16F877 and 16F628 and I didn't see it clearing Port A.
I'll report it to CCS.

As a work-around, I suggest that you clear the array manually with
code. You can do it the same way as shown in the last post in the link,
or you could write a for() loop to do it.
Diego López



Joined: 25 May 2012
Posts: 11
Location: Colombia

View user's profile Send private message

PostPosted: Sat May 26, 2012 10:43 am     Reply with quote

Thank you very much.
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