|
|
View previous topic :: View next topic |
Author |
Message |
alex Guest
|
pic16f628a/proteus/ccs |
Posted: Thu Apr 03, 2008 11:27 am |
|
|
Hi
I have two problems.
One, when I am using the Proteus with the debug I can´t simulate (step by step) the program because I don´t put the initial adress for PC, like the ORG 0x00 in MPLAB.
How to do this in CCS Compiler?
Two, In the Proteus Lay-out I am using switchs. When I play the simulation if I switch other Key it didn't change anything.
I need stop the simulation and play again the simulation for the switch to light one led.
This moment i need switch another key and don´t work. I need stop and start the simulation again. I want to switch the keys and theys light on/off the led without stop/start the simulation.
Thanks. |
|
|
Guest
|
|
Posted: Mon Apr 07, 2008 10:18 pm |
|
|
Anybody helps?
So, this is my fault.
I Will post the code.
Can I put here the image of proteus? |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
|
Guest
|
|
Posted: Tue Apr 08, 2008 8:11 am |
|
|
Humberto
No, sorry.
Ididn't know that site.
I 'll post the Proteus problem there. Is that site is about only picbasic?
Wheterver, the code of two PICs
PIC tx
Quote: |
#include <16F628A.h>
#fuses NOWDT,NOPROTECT,PUT,NOLVP,MCLR,INTRC_IO
#use fast_io(a)
#use fast_io(b)
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
void main()
{
int i,ch0,ch1,ch2,ch3;
int8 k;
set_tris_a(0b11111111);
set_tris_b(0b10000010);
ch0=input_state(pin_a0);
ch1=input_state(pin_a1);
ch2=input_state(pin_a2);
ch3=input_state(pin_a3);
k=read_eeprom(0x00);
while(1)
{
if(ch0==0)
{
putc('A');
putc('L');
}
else if(ch1==0)
{
putc('A');
putc('X');
}
else if(ch2==0)
{
putc('B');
putc('L');
}
else if (ch3==0)
{
putc('B');
putc('X');
}
}
}
|
PIC_RX
Quote: |
#include <16F628A.h>
#fuses NOWDT,NOPROTECT,PUT,NOLVP,MCLR,INTRC_IO
#use fast_io(a)
#use fast_io(b)
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
void main()
{
char rcv1,rcv2;
int8 k;
set_tris_a(0b11111111);
set_tris_b(0b00001010);
output_b(0b000000000);
k=read_eeprom(0x00);
while(1)
{
rcv1=getc();
rcv2=getc();
if(rcv1=='A')
{
switch(rcv2)
{
case 'L':
{
output_low(pin_b5);
output_high(pin_b4);
}
break;
case 'X':
{
output_high(pin_b5);
output_low(pin_b4);
}
break;
}
}
else if(rcv1!='A')
{
switch(rcv2)
{
case 'L':
{
output_high(pin_b6);
output_low(pin_b7);
}
break;
case 'X':
{
output_high(pin_b6);
output_high(pin_b7);
}
break;
}
}
}
}
|
|
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Tue Apr 08, 2008 8:59 am |
|
|
In your tx program at startup the keys are read one time and then the values never change again. Move the reading of the input keys into the loop. |
|
|
Douglas Kennedy
Joined: 07 Sep 2003 Posts: 755 Location: Florida
|
|
Posted: Tue Apr 08, 2008 9:07 am |
|
|
If there was a $ contributed for every question about RS232 RX and TX this forum would have the revenue of Google. RS232 is asynchronous. This must be repeated several times by anyone coding an RS232 application. Asynchronous means data can arrive at the receiver unsynchronized and it will for your code unless you are doing the synchronization yourself via a protocol or other method of flow control. Chances are if you haven't looked up the meaning of asynchronous then your RX will routine will need to handle asynchronous data. PICC has ways to assist with this one is Kbhit() but it must must must must be called frequently enough to catch the start bit. That means approx half the bit time at the baud rate used. That means the loop that gets back to calling kbhit() must not exceed 1/2 the bit time in execution time. The other way is via the RDA interrupt and a service routine to go with it. Since data can arrive at anytime (asynchronous) the PIC must receive it at any time. That means the PIC must quickly finish what it was doing ( as in the case of the kbhit() loop) or in the case of the interrupt #RDA stop what is was doing. If the PIC has a hardware UART then the interrupt is the better way of dealing with an asynchronous world. The service routine is well written if it has a circular buffer for this not only catches the data but buffers the data
should it arrive in bursts freeing the coder in the main routine to only have to meet the average throughput needs. |
|
|
alex Guest
|
|
Posted: Thu Apr 10, 2008 11:26 pm |
|
|
I don´t understand.
I defined the pins of keys in the begin of the program. If the keys, inside the loop, change their state the pic didn´t "see" this changing? Why put the definition of the pins inside the Loop? |
|
|
|
|
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
|