Ich versuche, einige Daten an meinen PC als ersten Schritt eines größeren Projekts zu senden, ich arbeite mit dem Pic16f723.Pic16f723 versagt beim Senden von Daten TX über RS 232, printf bekommt das Bild stecken
Ich versuche, die gleichen Methoden zu verwenden, die ich zuvor mit pic16f876 oder pic16f818 usw. verwendet habe, aber es funktioniert nicht.
Kann nicht finden, wo das Problem ist, ich will nur ein Byte übertragen, ich überprüfe und prüfe die PIC16F723 datasheet, aber ich bin unfähig, nichts zu lösen.
Soweit ich weiß, bleibt es in der Schleife oben stecken, die das TXEN-Bit aus dem TXSTA-Register prüft, und es ist immer in = so wird es immer überprüft. Sehen Sie die ganze asm und ccs oben
003F: MOVLW 05
0040: BTFSS 0C.4
0041: GOTO 040
Ich frage mich, warum ccs die TXEN ermöglichen tut, ich habe tatsächlich versucht, es auf diese Weise funktioniert:
.................... #asm
BSF 0x0C,4
.................... #endasm
Aber nichts gelöst wurde ..
Kann mir jemand dabei helfen? Irgendeine Idee? Tanks und fragen, ob Zweifel!
Hier ist mein CCS Code
#include <16F723.h>
#FUSES INTRC_IO
#FUSES NOPROTECT
#FUSES NOMCLR
#fuses NOWDT,NODEBUG,NOPUT,NOBROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07
#byte TRISA=0x85
#byte TRISB=0x86
#byte TRISC=0x87
void main() {
TRISA=0x00;
TRISB=0x00;
PORTA=0xFF;
while(1){
PORTB=0xF0; //<- This line gets the PIC stuck
printf("5"); // Trying to send data
delay_ms(500);// Those lines are just a bit sequence for tests
PORTB=0x0F;
delay_ms(500);
}
}
Und hier können Sie die asm/lst nach oben als auch überprüfen:
CCS PCM C Compiler, Version 4.106, 10478 07-ago-16 20:03
Filename: C:\Users\agf\Desktop\icom\swx_PIC16F723\PIC16f723b.lst
ROM used: 85 words (2%)
Largest free fragment is 2048
RAM used: 6 (3%) at main() level
7 (4%) worst case
Stack: 1 locations
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 019
0003: NOP
....................
.................... #include <16F723.h>
.................... //////// Standard Header file for the PIC16F723 device ////////////////
.................... #device PIC16F723
.................... #list
....................
....................
....................
.................... #FUSES XT //High speed Osc (> 4mhz)
.................... #FUSES NOPROTECT
.................... #FUSES NOMCLR
....................
.................... #fuses NOWDT,NODEBUG,NOPUT,NOBROWNOUT
.................... #use delay(clock=4000000)
0004: MOVLW 22
0005: MOVWF 04
0006: BCF 03.7
0007: MOVF 00,W
0008: BTFSC 03.2
0009: GOTO 018
000A: MOVLW 01
000B: MOVWF 78
000C: CLRF 77
000D: DECFSZ 77,F
000E: GOTO 00D
000F: DECFSZ 78,F
0010: GOTO 00C
0011: MOVLW 4A
0012: MOVWF 77
0013: DECFSZ 77,F
0014: GOTO 013
0015: GOTO 016
0016: DECFSZ 00,F
0017: GOTO 00A
0018: RETURN
.................... #use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
.................... //#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
....................
....................
.................... #byte PORTA=0x05
.................... #byte PORTB=0x06
.................... #byte PORTC=0x07
.................... #byte TRISA=0x85
.................... #byte TRISB=0x86
.................... #byte TRISC=0x87
.................... void main() {
0019: CLRF 04
001A: BCF 03.7
001B: MOVLW 1F
001C: ANDWF 03,F
001D: MOVLW 19
001E: BSF 03.5
001F: MOVWF 19
0020: MOVLW A6
0021: MOVWF 18
0022: MOVLW 90
0023: BCF 03.5
0024: MOVWF 18
0025: BSF 03.5
0026: BSF 03.6
0027: BCF 05.0
0028: BCF 05.1
0029: BCF 05.2
002A: MOVF 06,W
002B: ANDLW C0
002C: MOVWF 06
002D: BCF 03.6
002E: BCF 1F.0
002F: BCF 1F.1
0030: BSF 03.6
0031: MOVF 05,W
0032: ANDLW C0
0033: MOVWF 05
.................... TRISA=0x00;
0034: BCF 03.6
0035: CLRF 05
.................... TRISB=0x00;
0036: CLRF 06
....................
.................... PORTA=0xFF;
0037: MOVLW FF
0038: BCF 03.5
0039: MOVWF 05
.................... //Inicialización del display
....................
.................... // set_tris_a(0x1f); //A ateak sarrerak
.................... // set_tris_b(0x00);
....................
.................... setup_uart(TRUE);
003A: BSF 18.7
003B: BSF 18.4
.................... while(1){
.................... PORTB=0xF0;
003C: MOVLW F0
003D: MOVWF 06
.................... putc(0x05);
003F: MOVLW 05
0040: BTFSS 0C.4
0041: GOTO 040
0042: MOVWF 19
....................
.................... delay_ms(500);
0043: MOVLW 02
0044: MOVWF 21
0045: MOVLW FA
0046: MOVWF 22
0047: CALL 004
0048: DECFSZ 21,F
0049: GOTO 045
.................... PORTB=0x0F;
004A: MOVLW 0F
004B: MOVWF 06
.................... delay_ms(500);
004C: MOVLW 02
004D: MOVWF 21
004E: MOVLW FA
004F: MOVWF 22
0050: CALL 004
0051: DECFSZ 21,F
0052: GOTO 04E
.................... }
0053: GOTO 03C
.................... }
....................
0054: SLEEP
Configuration Fuses:
Word 1: 3CD1 XT NOWDT NOPUT NOMCLR NOPROTECT NOBROWNOUT BORV19 PLLEN NODEBUG
Word 2: 3FFF NOVCAP
Was soll 'printf (0x05);' tun? Welche Zeichenfolge hat Adresse 5? –
senden Sie alle Daten über Tx Printf ("5"), oder Putc (0x05) bereits bearbeitet, sorry ich machte viele Tests –
Sie haben neuere PICs verwendet. Sie können Dinge vorziehen, die die 723 nicht hat. Vergleichen Sie alle Datenblätter auf Unterschiede. Möglicherweise müssen Sie eine Uhr für den UART und/oder einen anderen zusätzlichen Schritt aktivieren, der in den neueren Modellen nicht benötigt wird. Sind die Pins anders (z. B. müssen Sie den Chip anders verdrahten)? Überprüfen Sie auf 723 Errata, die ein separates Dokument sein kann. Verzögerungswerte müssen möglicherweise für einen gegebenen Chip größer/kleiner sein. Überprüfen Sie die '.h' Dateien für alle Chips. '16F723.h' könnte einen _bug_ enthalten. Betrachten Sie die Init-Sequenzierung Doing Y vor X kann für neuere OK sein, aber 723 _needs_ X vor Y –