Visualizza messaggio singolo
Vecchio 11 novembre 10, 14:53   #19 (permalink)  Top
faustog_2
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
ecco il firmware

ho dovuto scomodare il registro FSR ... funziona alla grande!


;Questo software riceve dall'applicazione java JRobot sequenze di numeri
; compresi tra 0 e 255. In ordine questi numeri saranno assegnati a ATTESA1,
; ATTESA2, ATTESA3, ATTESA4. Queste tre varibili sono utlizzate in
; BLOCK PULSE, per impartire ad ogni servo la relativa inclinazione.
;
; fausto.giudice@gmail.com
;-----------------------------------------------------
PROCESSOR 16F628
RADIX DEC
INCLUDE "P16F628.INC"
__CONFIG 11110100010000B
;
; __________________________________________________ _____________________________________
;
ATTESA EQU 32
L_COUNT EQU 33
H_COUNT EQU 34
CL EQU 35
ID_SERVO EQU 36
ATTESA1 EQU 41
ATTESA2 EQU 42
ATTESA3 EQU 43
ATTESA4 EQU 44
;
; __________________________________________________ _____________________________________
;
; START PROGRAM
; ------------------------------------
ORG 0
;
; __________________________________________________ _____________________________________
;
; SET ANALOG/DIGITAL INPUTS PORT A
; ------------------------------------
;
MOVLW 7
MOVWF CMCON ; CMCON=7 set comperators off
;
; __________________________________________________ _____________________________________
;
; INITIALIZE PORTS
; ------------------------------------
;
movlw b'00000000' ; set up portA
movwf PORTA

movlw b'00000100' ; RB2(TX)=1 others are 0
movwf PORTB

bsf STATUS,RP0 ; RAM PAGE 1

movlw b'11110000'
movwf TRISA ; portA all pins input

movlw b'11110010' ; RB7-RB4 and RB1(RX)=input, others output
movwf TRISB
;
; __________________________________________________ _____________________________________
;
; SET UART DEVICE, FOR COMUNICATE SERIAL PORT
; ------------------------------------
;
;
movlw 0x19 ; 0x19 = 9600 bps
movwf SPBRG
movlw b'00100100' ; brgh = high (2)
movwf TXSTA ; enable Async Transmission, set brgh

bcf STATUS,RP0 ; RAM PAGE 0

movlw b'10010000' ; enable Async Reception
movwf RCSTA
;
; __________________________________________________ _____________________________________
;
; INIZIALIZE VARIABLES
; ------------------------------------
;
call message
MOVLW 100
MOVWF ATTESA1
MOVLW 100
MOVWF ATTESA2
MOVLW 100
MOVWF ATTESA3
MOVLW 100
MOVWF ATTESA4

MOVLW 41
MOVWF ID_SERVO ; INIZIALIZE THE ID_SERVO
MOVWF FSR ; THIS IS A POITER AT ARRAY MEMORY OF SERVOS

;
; __________________________________________________ _____________________________________
;
; PULSE BLOCK
; ------------------------------------
;

LOOP CALL DELAY_20

MOVF ATTESA1,W
MOVWF ATTESA
BSF PORTA,0
CALL PULSE
BCF PORTA,0

MOVF ATTESA2,W
MOVWF ATTESA
BSF PORTA,1
CALL PULSE
BCF PORTA,1

MOVF ATTESA3,W
MOVWF ATTESA
BSF PORTA,2
CALL PULSE
BCF PORTA,2

MOVF ATTESA4,W
MOVWF ATTESA
BSF PORTA,3
CALL PULSE
BCF PORTA,3
;
; __________________________________________________ _____________________________________
;
;
; ------------------------------------
;
btfss PIR1,RCIF ; Receive data from Serial Port
GOTO LOOP ;
MOVF RCREG,W ; If true then load W
MOVWF INDF ; load FSR register by INDF

MOVF ID_SERVO,W
SUBLW 44

btfss STATUS,Z
GOTO STEP

MOVLW 41 ; INIZIALIZZA TUTTO DACCAPO
MOVWF ID_SERVO ;
MOVWF FSR ;
GOTO LOOP ; TORNA SUL PULSE BLOCK

STEP INCF FSR
INCF ID_SERVO
GOTO LOOP
;
; __________________________________________________ _____________________________________
;
; SEND CHARACTER IN W VIA RS232 AND WAIT UNTIL FINISHED SENDING
; ------------------------------------
;
send movwf TXREG ; send data in W

TransWt bsf STATUS,RP0 ; RAM PAGE 1
WtHere btfss TXSTA,TRMT ; (1) transmission is complete if hi
goto WtHere

bcf STATUS,RP0 ; RAM PAGE 0
return

;
; __________________________________________________ _____________________________________
;
; MESSAGE
; ------------------------------------
;
message movlw '1'
call send
movlw '6'
call send
movlw 'F'
call send
movlw '6'
call send
movlw '2'
call send
movlw '8'
call send
movlw ' '
call send
movlw 'R'
call send
movlw 'e'
call send
movlw 'a'
call send
movlw 'd'
call send
movlw 'y'
call send
movlw 0x0D ; CR
call send
movlw 0x0A ; LF
call send
return
;
; __________________________________________________ _____________________________________
;
; GENERA UN RITARDO DI 20 mS
; ------------------------------------
;

DELAY_20 movlw 26
movwf H_COUNT
movlw 10
movwf L_COUNT
decfsz L_COUNT,F
goto $-1
decfsz H_COUNT,F
goto $-3

RETURN

;
; __________________________________________________ _____________________________________
;
; GENERA UN RITARDO PROPORZIONALE AL REGISTRO ATTESA
; ------------------------------------
;
; 900 + 5 * ATTESA = da 900uS se ATTESA è = 0 , a max 2000uS se ATTESA = 200

PULSE movlw 178 ; 1uS |
movwf CL ; 1uS | 4uS
goto $+1 ; 2uS |

goto $+1 ; 2uS |
decfsz CL,F ; 1uS | 5uS * (178 - 1) = 885uS
goto $-2 ; 2uS |

nop ; 1uS

movf ATTESA,W ; 1uS
movwf CL ; 1uS
btfsc STATUS,Z ; 1uS nel caso in cui ATTESA = 0 allora salta alla fine
RETURN ; 2uS

goto $+1 ; 2uS

goto $+1 ; 2uS |
decfsz CL,F ; 1uS | 5uS * (ATTESA - 1) =
goto $-2 ; 2uS |

RETURN

END
faustog_2 non è collegato   Rispondi citando