-
-
hallo, ich hab mir mal nen programm beispiel von sprut geholt:
ich müsste aber den ausgang auf rb3 haben, kann mir jemand helfen?
list p=16f84
;************************************************* *************
;*
;* Pinbelegung des PIC
;* ----------------------------------
;* PORTA: 0
;* 1
;* 2 seriell Output
;* 3
;* 4
;* PORTB: 0
;* 1
;* 2
;* 3
;* 4
;* 5
;* 6
;* 7
;*
;************************************************* *************
;*
;* sprut (zero) Bredendiek 05/2000 (mod. 01/2002; 09/2003)
;*
;* Senden via RS-232 am Pin RB2
;* output: RA1 (keine RS232-Treiberschaltkreise verwenden!)
;* Takt : 4 MHz
;*
;*
;************************************************* *************
; Includedatei für den 16F84 einbinden
#include <P16f84.INC>
; Configuration festlegen
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
;************************************************* *************
;Variablennamen vergeben
Temp Equ 0x20
cycl_1 Equ 0x21 ; Zähler
cycl_2 Equ 0x22 ; Zähler
Byte equ 0x23
out EQU 2 ; RS-232 out ist RA2
;************************************************* *************
; los gehts mit dem Programm
; Pin RA2 auf Ausgabe stellen
Init
bsf STATUS, RP0 ; unschalten auf Bank 1
movlw B'00111011' ; RA2 output
movwf TRISA ;
bcf STATUS, RP0 ; zurückschalten zur Bank 0
clrf PORTA ;
;zyklisches Senden des Zeichens 'A' als Beispiel
Loop
movlw 'A' ; es soll z.B. der Buchstabe'A' gesendet werden
call Send_RS ; Datenwort ausgeben via RS-232
goto Loop
;************************************************* **************
;senden des Bytes, das im Register W steht
Send_RS ; Ausgabe eines Bytes seriell
movwf Byte ; Byte in w
movlw 8 ; es werden 8 Bit gesendet
movwf cycl_1
bcf PORTA, out
call Warte_s ; 1 Stopbit (1)
bsf PORTA, out
call Warte_s ; 1 Startbit (0)
Send_1 rrf Byte, f ; aktuelles Bit in das Carry-Flag schieben
btfsc STATUS, C
bcf PORTA, out ; Lo wenn Bit = 1
btfss STATUS, C
bsf PORTA, out ; Hi wenn Bit = 0
call Warte_s ; 1 Bit lang warten
decfsz cycl_1, f ; waren das schon 8 Bit?
goto Send_1 ; nein, es geht weiter
bcf PORTA, out ; Byte zuende, 1 Stoppbit (1) senden
call Warte_s ;
return
;************************************************* *********
;ein Bit Zeitverzoegerung mit einer Warteschleife
; Timing muß genau stimmen (5%)
;
; senden 4 MHz 10 MHz
; 2400 Bps = 69d 173d
; 9600 Bps = 16d 43d
Warte_s movlw D'16' ; 9600 Bps / 4 MHz senden
movwf cycl_2
Warte1 ; 6 Zyklen Schleife
nop
nop
nop
decfsz cycl_2, 1
goto Warte1
return
end
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen