;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; File: GIROUET2.ASM "bricolsec" © 12/06/2011 RevD EQU '0' ;revision Dizaines RevU EQU '0' ;revision Unités Subver EQU '0' ;sous version modifs mineures ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Application ; Ce programme permet de prendre en compte les valeurs binaires de 4 phototransistors ; par le biais d'un circuit CMOS 4021 qui va sérialiser en Nb bits de 4 à 8 sans parité ; ; La 4ème IO commande est libre les 3 autres sont ainsi utilisées : ; - GPIO_2 mise en fonction des LED d'éclairage des phototransistors à patir du 12 V ; - GPIO_1 Cde de transfert // des phototransistors dans le 4021 ; - GPIO_0 commande de clock transmission Synchrone ; Le PIC 10F202 sera défini comme Maître ; Il n'y a aucune interrupt. un délai de 100ms entre chaque mesure est assuré par comptage ; Prescal TMR0 est de 4 et celui de la clok à 256, mais sans importance GIE=0 ; la sérialisation est faite par Cde du programme pour clock du 4021 ; Le nombre de bits UTILES est paramétrable de 4 à 7. Mais il est possible de mettre 8 bits ; pour la trnsmission. La vitesses de transmission ; est figée à 2400 bps ce qui donne 416.667 µs par bit (417 µs). Les délais seront ; plus précis en mode programmé qu'en interrupt. ; Chaque demi période du clock synchrone sera de 208 µS mais sans réelle importance ; puisque l'appareil est maître. ;********************************************************************** ; * ; Filename: GIROUET2.ASM * ; Initial Date : 12/06/2011 * ; File Version: see above * ; * ; Author: bricolsec * ; Company: bricolsec * ; * ; * ;********************************************************************** ; * ; Files Required: P10F202.INC * ; * ;********************************************************************** ; * ; Notes: * ; * ; Rev 00-0 Creation structure assembleur ; Rev 00-1 passage à 2400 bps et corection Nb_bits +1 ;***************************************************************************** list p=10F202 ; list directive to define processor #include ; processor specific variable definitions errorlevel -302 ; suppress message 302 from list file errorlevel -306 __CONFIG _CP_OFF & _MCLRE_OFF & _WDT_OFF & _INTRC_OSC ; '__CONFIG' directive is used to embed configuration word within .asm file. ; The lables following the directive are located in the respective .inc file. ; See data sheet for additional information on configuration word settings. ;***** VARIABLE DEFINITIONS w_temp EQU 0x08 ; variable used for context saving status_temp EQU 0x09 ; variable used for context saving S_FSR EQU 0x0A ; variable used for FSR Save Nb_bits EQU 0x0B Valgir EQU 0x0C ; phototransistors mémorisés value girouette Cnt_Mst EQU 0x0D ; boucle d'attente délai 772 ms Cnt_Mst2 EQU 0x0F ; compteur 2 ème boucle Cnt_Mst3 EQU 0x10 ; compteur pour 100ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; EQUATE PROGRAM ; CLCK EQU 0 ; out clock transmission synchrone PARAL EQU 1 ; out parallèle input sur 4021 ALIM EQU 2 ; OUT Cde ALIM LED ALIM_3 EQU 3 ; Input only Opt_reg_init EQU 0x47 ; prescaler 256 int clock no pull up count up clock all 256µs Trisio_Init EQU 0x08 ; GPIO_0,1,2 à 0=Output 3=Input Nb_bits_def EQU 4 ; bits utiles paramétrable de 4 à 7 sans parité sans STrt et stop Tim_baud EQU 66 ; délay de 208 µs ; sans les 14 cycles auxiliaires soit 417 µS de période 2400 bps ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Variables (BANK 0, il n'y en a pas d'autres !) CBLOCK 0x23 ; ENDC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Macros ; ;********************************************************************** ;********************************************************************** ORG 0x1FF ; processor reset vector ; La calibration du circuit RC est placée à la location 0x1FF par MICROCHIP ; sous la forme d'une instruction movlw k où k est une valeur litérale ; Internal RC calibration value is placed at location 0x1FF by Microchip ; as a movlw k, where the k is a literal value. ORG 0x000 ; coding begins here movwf OSCCAL ; update register with factory cal value ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; these first 4 instructions are not required if the internal oscillator is not used ; this section save the original precision for internal oscillator which is set in registers ; I preserve this section to remember the subject ; main clrw ; clear W pour index du call ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; initialisations registres et divers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; movlw opt_reg_Init ; option reg voir EQU OPTION ;store in Option reg (Special use for this PIC) movlw Trisio_Init ; GPIO 0 à 2=OUTPUT 3=input TRIS 6 ; Store ; WPU non concerné par invalidation GPPU goto Deb ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SUBROUTINES de délais ; ; ; Routine de délai 1 ms de mise sous tension des LED ; DLY_Mst Movlw 2 ; délai de mise sous tensions LED movwf Cnt_Mst2 ; entry2 fait environ 500µS Entry2 movlw 164 ; 164 cycles de 3µ 1 cycle movwf Cnt_MST ; 1cycle decfsz Cnt_MST,f ; 1 cycle en normal goto $-1 ; 2 cycles total= ; decfsz Cnt_Mst2,f ; a vérifier les µs goto Entry2 goto $+1 ; +2µ RETLW 0 ; ; Délai d'environ 99.5 ms entre période d'acquisition/transmission ; DLY100ms movlw 196 ;¤¤¤¤7 ; 256-199= movwf Cnt_Mst2 ; entry 3 fait environ 500 µs Entry3 movlw 164 movwf Cnt_Mst decfsz Cnt_Mst,f goto $-1 decfsz Cnt_Mst2,f goto Entry3 movlw 32 movwf Cnt_Mst2 decfsz Cnt_Mst2,f goto $-1 nop RETLW 0 ;;;;;;;;;;;;;;;;;;; ; Délai de ~104µS entre bit sérialisés ; Attention la partie test carry coûte 6 cycles ; call 2 cycles, Nbbits 3 cycles, et le shift 3 cy ; soit un total de 14 cyles, ; Dly104 devra donc faire 90 cycles précisément avec return ; DLY104 movlw Tim_baud ; 1 cy movwf Cnt_MST ; 1 cy decfsz Cnt_MST,f ;-28*3=84 µs brut (256-28) goto $-1 nop RETLW 0 ; 2 cy ; au total : 90 cycles pour cette seule séquence à (9600 bps) ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; Debut reel du programme ; attention toute modification est dangeuse pour le respect des temps ; de sortie RS232 sur GPIO4 (OUT) ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; ; Initialisation Nb Bits ; Deb movlw 0 ; clear toutes sortie GPIOck movwf GPIO ; init I/O Loop_Deb bsf GPIO,ALIM ; set alim LED call Dly_Mst ; délais stabilisation tension bsf GPIO,PARAL ; parallèle input phototransistors nop ;sécurité bcf GPIO,PARAL ; reset PE (PL) bcf GPIO,ALIM ; envoi du signal clock à fréquence identique aux datas mais en 2 1/2 périodes movlw Nb_Bits_def ; nombre de bits à envoyer de 4 à 7 (8 possible) movwf Nb_Bits LOOP bsf GPIO,CLCK ; envoi clock à 1 goto $+1 ; 2 inst pour identité durée nop call DLY104 bcf GPIO,CLCK ; envoi clock à 0 call DLY104 decfsz Nb_Bits,f goto LOOP call Dly100ms goto LOOP_Deb ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; essais de sérialisation datas pour display ; ; Le data est dans VALGIR, ce data est envoyé sur 2 bits d'un port ; un bit data et un bit clock ; le reste des commandes est maintenu, sauf la lecture qui est ; incompatible. ; Un circuit 4015 devrait suffire côté display, le front actif sera le front montant ; on peut le regretter mais c'est le prix pour un seul circuit ; l'interface peut se réduire à 4 fils seulement ; RS, E,DATA,CLOCK (pas de lecture) ; la transmission sera pourtant équivalente en temps, car on ; travaillera alors directement en 8 bits ; le temps entre les marqueurs GPIO.ALIM est de 74 cycles ; SERI movlw 0x55 movwf VALGIR bsf GPIO,ALIM ; marqueur début movlw 8 movwf Cnt_Mst loopser RRF VALGIR,f bcf GPIO,PARAL ; PARAL=DATA skpnc bsf GPIO,PARAL bsf GPIO,CLCK bcf GPIO,CLCK decfsz Cnt_Mst,f goto loopser bcf GPIO,ALIM ; marqueur fin goto $ ; initialize eeprom locations no EEPROM on this model ; ORG 0x2100 ; DE 0x00, 0x01, 0x02, 0x03 END ; directive 'end of program'