View previous topic :: View next topic |
Author |
Message |
Joan
Joined: 29 May 2004 Posts: 41 Location: Barcelona, Spain
|
PIC16F873 and RDA |
Posted: Sat Sep 11, 2004 10:06 am |
|
|
Hi all:
this simple program doesn't works ¿ any idea ?
Regards;
Joan
#include <16F873.h>
#use delay(clock=10000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7)
char i;
#int_rda
void serial_isr()
{
i = getc ();
putc ('*');
}
main()
{
delay_ms (250); // Start-up Delay
enable_interrupts(INT_RDA); // Enable RS-232 Interrupt
enable_interrupts(GLOBAL); // Enable Gobal Interrupts
while(1)
{
}
} _________________ I Came. I Saw. I Won. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Sep 11, 2004 11:52 am |
|
|
It should work.
I assume you're sending characters to the PIC by typing
them in from your PC keyboard, with Hyperterminal or
a similar program.
How are you connecting the PIC to a serial port on your PC ?
Are you using a MAX232-type RS232 level converter chip ?
Also, I would add the ERRORS parameter to the end of your #use
rs232 statement, like this:
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS) |
|
|
Joan
Joined: 29 May 2004 Posts: 41 Location: Barcelona, Spain
|
|
Posted: Sat Sep 11, 2004 12:53 pm |
|
|
Hi all:
yes I'm uing a Serial PC Port with a RS232 to TTL converter that is working correctly ( because if I connect toghether TTL-RX and TTL-TX and send chars form PC I receive them again ). So the problem is on the program.
If I put these lines on main it sends "*" every time it receive a char from port.
while(1)
{
i = getc ();
putc ('*');
}
Regards;
Joan _________________ I Came. I Saw. I Won. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Sep 11, 2004 2:45 pm |
|
|
Please post your version of the PCM compiler.
I'll install that version and compile your program,
and I'll look at the ASM code to see if there is a problem.
I'll do it later in the day. |
|
|
Joan
Joined: 29 May 2004 Posts: 41 Location: Barcelona, Spain
|
|
Posted: Sat Sep 11, 2004 3:41 pm |
|
|
Hi:
CCS version I used was 3.187. I checked all connections and seems OK, also I tryed with a new PIC16F873, but same results.
Best Regards;
Joan _________________ I Came. I Saw. I Won. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Sep 12, 2004 1:26 pm |
|
|
I installed PCM vs. 3.187, compiled your program, and programmed it
into a 16F877 (I don't have a 16F873). It worked.
But there could still be a problem, because the two chips have different
resources and the compiler generates different code for each chip.
Can you compile the program that you posted above, and send the
.LST file to me in a PM. (Or post it here if you want).
I want to see if your .LST file matches what I get. |
|
|
Joan
Joined: 29 May 2004 Posts: 41 Location: Barcelona, Spain
|
|
Posted: Mon Sep 13, 2004 12:22 pm |
|
|
Hi, here it is the output file for the program I posted :
Regads;
Joan
-----------------------------------------------------------------------------------
CCS PCM C Compiler, Version 3.187, 16465
Filename: C:\Archivos de programa\PICC\Examples\16F873\RDA.LST
ROM used: 111 (3%)
Largest free fragment is 2048
RAM used: 15 (8%) at main() level
16 (8%) worst case
Stack: 2 worst case (1 in main + 1 for interrupts)
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 058
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 26
0008: MOVF 7F,W
0009: MOVWF 25
000A: MOVF 0A,W
000B: MOVWF 2D
000C: CLRF 0A
000D: SWAPF 25,F
000E: MOVF 04,W
000F: MOVWF 27
0010: MOVF 20,W
0011: MOVWF 28
0012: MOVF 21,W
0013: MOVWF 29
0014: MOVF 22,W
0015: MOVWF 2A
0016: MOVF 23,W
0017: MOVWF 2B
0018: MOVF 24,W
0019: MOVWF 2C
001A: BCF 03.7
001B: BCF 03.5
001C: MOVLW 8C
001D: MOVWF 04
001E: BTFSS 00.5
001F: GOTO 022
0020: BTFSC 0C.5
0021: GOTO 035
0022: MOVF 27,W
0023: MOVWF 04
0024: MOVF 28,W
0025: MOVWF 20
0026: MOVF 29,W
0027: MOVWF 21
0028: MOVF 2A,W
0029: MOVWF 22
002A: MOVF 2B,W
002B: MOVWF 23
002C: MOVF 2C,W
002D: MOVWF 24
002E: MOVF 2D,W
002F: MOVWF 0A
0030: SWAPF 26,W
0031: MOVWF 03
0032: SWAPF 7F,F
0033: SWAPF 7F,W
0034: RETFIE
0035: BCF 0A.3
0036: GOTO 037
.................... #include <16F873.h>
.................... //////// Standard Header file for the PIC16F873 device ////////////////
.................... #device PIC16F873
.................... #list
....................
.................... #use delay(clock=10000000)
*
0042: MOVLW 2F
0043: MOVWF 04
0044: MOVF 00,W
0045: BTFSC 03.2
0046: GOTO 056
0047: MOVLW 03
0048: MOVWF 21
0049: CLRF 20
004A: DECFSZ 20,F
004B: GOTO 04A
004C: DECFSZ 21,F
004D: GOTO 049
004E: MOVLW 3C
004F: MOVWF 20
0050: DECFSZ 20,F
0051: GOTO 050
0052: NOP
0053: NOP
0054: DECFSZ 00,F
0055: GOTO 047
0056: BCF 0A.3
0057: GOTO 068 (RETURN)
.................... #fuses HS,NOWDT,NOPROTECT,NOLVP
.................... #use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7)
....................
.................... char i;
....................
.................... #int_rda
.................... void serial_isr()
.................... {
.................... i = getc ();
*
0037: BTFSS 0C.5
0038: GOTO 037
0039: MOVF 1A,W
003A: MOVWF 2E
.................... putc ('*');
003B: MOVLW 2A
003C: BTFSS 0C.4
003D: GOTO 03C
003E: MOVWF 19
.................... }
....................
....................
003F: BCF 0C.5
0040: BCF 0A.3
0041: GOTO 022
.................... main()
.................... {
*
0058: CLRF 04
0059: MOVLW 1F
005A: ANDWF 03,F
005B: MOVLW 06
005C: BSF 03.5
005D: MOVWF 1F
005E: MOVLW 40
005F: MOVWF 19
0060: MOVLW 26
0061: MOVWF 18
0062: MOVLW 90
0063: BCF 03.5
0064: MOVWF 18
.................... delay_ms (250); // Start-up Delay
0065: MOVLW FA
0066: MOVWF 2F
0067: GOTO 042
....................
.................... enable_interrupts(INT_RDA); // Enable RS-232 Interrupt
0068: BSF 03.5
0069: BSF 0C.5
.................... enable_interrupts(GLOBAL); // Enable Gobal Interrupts
006A: MOVLW C0
006B: BCF 03.5
006C: IORWF 0B,F
....................
.................... while(1)
.................... {
....................
.................... }
006D: GOTO 06D
.................... }
....................
006E: SLEEP
Configuration Fuses:
Word 1: 3F7A HS NOWDT NOPUT NOPROTECT BROWNOUT NOLVP NOCPD NOWRT NODEBUG
----------------------------------------------------------------------------------- _________________ I Came. I Saw. I Won. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Sep 13, 2004 12:31 pm |
|
|
It's identical to my .LST file. I'll have to look at the problem
further, later in the day. |
|
|
Kieran
Joined: 28 Nov 2003 Posts: 39 Location: Essex UK
|
|
Posted: Mon Sep 13, 2004 1:13 pm |
|
|
Sounds like hardware to me, you could be receiving rubbish, look at the Rx pin with a scope while you hold down the PC U key (55 Hex) and you should see the start bit and the following data bits.
I always set the data direction for all the ports. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Sep 13, 2004 6:12 pm |
|
|
I looked at the code and I don't really see anything wrong.
The fact that I can take the HEX file for the 16F873, and run
it OK on my 16F877 board is important. The 16F877 has
more RAM and ROM than the F873, but I looked at the F873
code, and it's only using RAM locations that are truly available
to the F873.
So, based on the information that I've been given, I don't have
a solution. |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1934 Location: Norman, OK
|
Works on the F876 |
Posted: Mon Sep 13, 2004 6:22 pm |
|
|
I tested it on the F876 and it works fine here too... Sure looks like a HW problem of some sort, strange... |
|
|
rwyoung
Joined: 12 Nov 2003 Posts: 563 Location: Lawrence, KS USA
|
|
Posted: Tue Sep 14, 2004 7:29 am |
|
|
Joan -
You have Hypertermial set for 9600,8,n,1 and no handshake, right? _________________ Rob Young
The Screw-Up Fairy may just visit you but he has crashed on my couch for the last month! |
|
|
Joan
Joined: 29 May 2004 Posts: 41 Location: Barcelona, Spain
|
|
Posted: Tue Sep 14, 2004 12:32 pm |
|
|
Hi all:
I found the problem. When I load the hex file throught CCS Compiler it enables everytime an option called DEBUG. If it is enabled PIC doesn't works, so I take care continuously that this option must be disabled. So it is a problem of my programmer software not a CCS Compiler problem, so excuseme for you time lost ...
Program works fine now when programmer software it settend correctly (Config Bits).
Best Regards;
Joan. _________________ I Came. I Saw. I Won. |
|
|
|