|
|
View previous topic :: View next topic |
Author |
Message |
Tensore Guest
|
#use direttive inside code |
Posted: Sat Jun 24, 2006 7:15 pm |
|
|
Hi people!
I am wondering which of the following code is the right and the best solution.
I'd like to use the UART port in two different settings depending on a pin state.
Here I show the three solution that I could think of, I don't even know if they are all ok...
1) Using a hardware UART and a software one:
#use rs232(stream=MID, baud=31250, xmit=PIN_C6, rcv=PIN_C7)
#use rs232(stream=COM, baud=9600, xmit=PIN_B1, rcv=PIN_B2)
then using fputc(0x90,MID) or fputc(0x90,COM) as I need the first or second configuration.
2) Using #use direcrive inside the code:
void main() {
int value=0;
int1 a,b,c;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
if ( input(PIN_B4)) {
midi=1;
#use rs232( baud=9600,xmit=PIN_C6, rcv=PIN_C7);
}
if (!input(PIN_B4)) {
midi=0;
#use rs232( baud=31250, xmit=PIN_C6, rcv=PIN_C7);
}
while (TRUE) {
.....
}
so that configuration of UART is done only once the program knows which settings will be used (depending on the state od PIN_B4
3) (i really think that this would not work) Using just une UART and two different settings for it with two different stream names:
#use rs232(stream=MID, baud=31250, xmit=PIN_C6, rcv=PIN_C7)
#use rs232(stream=COM, baud=9600, xmit=PIN_C6, rcv=PIN_C7)
then using fputc(0x90,MID) and fput(0x90,COM) as in 1st case but using just an UART
So that's all, which is the best (and the working one) ?
thank you
mic |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Sat Jun 24, 2006 11:00 pm |
|
|
From the help file
Quote: |
SET_UART_SPEED()
Syntax:
set_uart_speed (baud, [stream])
Parameters:
baud is a constant 100-115200 representing the number of bits per second. stream is an optional stream identifier.
Returns:
undefined
Function:
Changes the baud rate of the built-in hardware RS232 serial port at run-time.
Each bit in the value represents one pin. A 1 indicates the pin is input and a 0 indicates it is output.
Availability:
This function is only available on devices with a built in UART.
Requires
#use rs232
Examples:
// Set baud rate based on setting
// of pins B0 and B1
switch( input_b() & 3 ) {
case 0 : set_uart_speed(2400); break;
case 1 : set_uart_speed(4800); break;
case 2 : set_uart_speed(9600); break;
case 3 : set_uart_speed(19200); break;
}
Example Files:
loader.c
|
|
|
|
Ttelmah Guest
|
|
Posted: Sun Jun 25, 2006 2:59 am |
|
|
Either version is 'right'. The 'multiple #use' form, was the _only_ version on older compilers. It can be a real 'pain', since it is very difficult at times to be sure which #use is currently in effect. 'Streams' (the ability to have multiple '#use' statements, accessed by name), were then added, and result in easier to understand/follow code, and a reduction is errors when coding.
I'd use streams, but either will work.
Best Wishes |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Sun Jun 25, 2006 5:47 am |
|
|
Ttelmah wrote: | Either version is 'right'. The 'multiple #use' form, was the _only_ version on older compilers. It can be a real 'pain', since it is very difficult at times to be sure which #use is currently in effect. 'Streams' (the ability to have multiple '#use' statements, accessed by name), were then added, and result in easier to understand/follow code, and a reduction is errors when coding.
I'd use streams, but either will work.
Best Wishes |
Can you use streams with the same hardware pins? I wouldn't think so. Seems a bit much for the compiler to keep track of or a waste if the compiler had to setup the UART each time it was accessed. Anyways, it looked like the only difference was the speed. If so, then setting the baud rate is the way to go. |
|
|
Ttelmah Guest
|
|
Posted: Sun Jun 25, 2006 6:33 am |
|
|
No.
The stream solution, is right for the first, and second configuration in the original question, while the 'set_uart_speed' solution is correct for the third.
Best Wishes |
|
|
|
|
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
|