Sie sind auf Seite 1von 11

; ; ; ; ; ;

"Gnrateur de signaux (continu, sinus, triangle, rectangle, rampe)" (C) Fabrice Sincre, mars 2007 IUT Nancy-Brabois version 1.03 microcontrleur PIC 16F628A dvelopp avec Microchip MPLAB IDE List p=16F628A ; processeur utilis #include <p16F628A.inc>

__config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF & _DATA_CP_OFF & _BOREN_OFF & _MCLRE_ON ;bits de configuration : ;code protect OFF ;watchdog timer OFF ;power up timer ON ;oscillateur HS (quartz 20 MHz) ;low voltage program OFF ;data EE read protect OFF ;brown out detect OFF ;master clear enable ON ;xxxxxx ; macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 bcf STATUS,RP1 endm ; passage en banque 0 bcf STATUS,RP0 bcf STATUS,RP1 endm

bank0

macro

;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Initialisation de la mmoire EEPROM (facultatif) ; Cela met dans l'EEPROM le message : ; (C) Fabrice Sincere 17/03/2007 (en code ASCII) ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x2100 ; dbut de zone EEPROM du PIC DE '(' ; ou DE 0x28 (code ASCII correspondant) DE 'C' DE ')' DE 'F' ,'a' ,'b','r','i','c','e',' ' DE 'S','i','n','c','e','r','e',' ' DE '1','7','/','0','3','/','2','0','0','7' ;xxxxxxxxxxxxxxxxxxxxxxxxx ; dclaration de variables ;xxxxxxxxxxxxxxxxxxxxxxxxx CBLOCK H'020' 16F628A formeSIGNAL : 1 ; bit0 = 1 <=> crneau ; bit1 = 1 <=> triangle ; bit2 = 1 <=> sinus ; bit3 = 1 <=> rampe ; dbut de la zone des registres d'usage gnral du

; (formeSIGNAL) = 0 <=> continu (par dfaut) ENDC ;xxxxxxxxxxxxxxxxxxxx ; dmarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org 0x0000 goto initialisation ;xxxxxxxxxxxxxxx ; initialisation ;xxxxxxxxxxxxxxx initialisation bank0 clrf PORTA clrf PORTB ; mise 0 des sorties du port A ; mise 0 des sorties du port B ; inactivation des comparateurs

movlw B'00000111' movwf CMCON analogiques

bank1 movlw B'10101000' movwf OPTION_REG ; bit 7 (/RBPU) = 1 : dsactivation des rsistances de pull-up du port B ; ; compteur) ; ; ; ; ; bit 6 (INTEDG)= 0 : (non utilis) bit 5 (T0CS) = 1 : horloge du module TMR0 -> RA4/T0CKI (mode bit bit bit bit bit 4 3 2 1 0 (T0SE) = 0 : horloge RA4/T0CKI active sur front montant (PSA) = 1 : prescaler 1:1 (PS2)= 0 (PS1) = 0 (PS0) = 0

movlw B'00011111' movwf TRISA ; bit 0 du port A poussoir CRENEAU) ; bit 1 du port A poussoir TRIANGLE) ; bit 2 du port A poussoir SINUS) ; bit 3 du port A poussoir RAMPE) ; bit 4 du port A externe) clrf TRISB ; bit 0 du port B du DAC 8 bits) ; bit 1 du port B 8 bits) ; bit 2 du port B 8 bits) ; bit 3 du port B 8 bits)

(RA0) = 1 : configuration en entre (bouton (RA1) = 1 : configuration en entre (bouton (RA2) = 1 : configuration en entre (bouton (RA3) = 1 : configuration en entre (bouton (RA4) = 1 : configuration en entre (oscillateur

(RB0) = 0 : configuration en sortie (bit 0 (LSB) (RB1) = 0 : configuration en sortie (bit 1 du DAC (RB2) = 0 : configuration en sortie (bit 2 du DAC (RB3) = 0 : configuration en sortie (bit 3 du DAC

; bit 4 du port B (RB4) = 0 : configuration en sortie (bit 4 du DAC 8 bits) ; bit 5 du port B (RB5) = 0 : configuration en sortie (bit 5 du DAC 8 bits) ; bit 6 du port B (RB6) = 0 : configuration en sortie (bit 6 du DAC 8 bits) ; bit 7 du port B (RB7) = 0 : configuration en sortie (bit 7 (MSB) du DAC 8 bits) bank0 clrf formeSIGNAL movlw B'10000000' movwf PORTB ; uS(U4) = 0 V (sortie du DAC) goto debut_programme ;xxxxxxxxxxxxxxxxxxxxx ; programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme ; xxxxxxxxxx test des 4 boutons poussoirs call test_changement addlw B'00000000' btfsc STATUS , Z goto debut_programme ; boutons poussoirs au repos (W)=0 ; on arrive ici si un des boutons poussoirs est appuy clrf TMR0 btfsc formeSIGNAL , 0 goto formeCRENEAU btfsc formeSIGNAL , 1 goto formeTRIANGLE btfsc formeSIGNAL , 2 goto formeSINUS btfsc formeSIGNAL , 3 goto formeRAMPE goto formeDC ; par prcaution ; xxxxxxxxxxxxxxxxxxxxxx ; forme continue formeDC goto formeDC ; xxxxxxxxxxxxxxxxxxxxxx ; forme en crneau formeCRENEAU movlw D'255' btfss TMR0 , 6 clrw TMR0 <= 255 movwf PORTB goto formeCRENEAU ; xxxxxxxxxxxxxxxxxxxxxx ; forme en triangle formeTRIANGLE

; 0 =< TMR0 <= 63 ou 128 =<

movlw 0x03 movwf PCLATH formeTRIANGLE0 movlw B'01111111' andwf TMR0 , W lments) call table_triangle movwf PORTB goto formeTRIANGLE0 ; masque ; on met 0 le bit 7 (car la table a 128 ; criture en entre du DAC

; xxxxxxxxxxxxxxxxxxxxxx ; forme en sinus formeSINUS movlw 0x02 movwf PCLATH formeSINUS0 movlw B'01111111' andwf TMR0 , W ; on met 0 le bit 7 call table_sinus movwf PORTB goto formeSINUS0 ; xxxxxxxxxxxxxxxxxxxxxx ; forme en rampe formeRAMPE movlw 0x01 movwf PCLATH formeRAMPE0 movlw B'01111111' andwf TMR0 , W ; on met 0 le bit 7 call table_rampe movwf PORTB goto formeRAMPE0 ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Routine de test des boutons poussoirs ; Retourne 0 si tous les boutons poussoirs sont au repos ; Retourne 1 si au moins un bouton poussoir est appuy ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx test_changement btfsc PORTA,0 goto test_bp_triangle bsf formeSIGNAL , 0 retlw D'1' test_bp_triangle btfsc PORTA,1 goto test_bp_sinus bsf formeSIGNAL , 1 retlw D'1' test_bp_sinus btfsc PORTA,2 goto test_bp_rampe

bsf formeSIGNAL , 2 retlw D'1' test_bp_rampe btfsc PORTA,3 retlw D'0' ; tous les boutons poussoirs sont au repos bsf formeSIGNAL , 3 retlw D'1' ; xxxxxxxx table rampe xxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x0100 ; adresse de dbut de la table table_rampe addwf PCL , f retlw D'255' retlw D'253' retlw D'251' retlw D'249' retlw D'247' retlw D'245' retlw D'243' retlw D'241' retlw D'239' retlw D'237' retlw D'235' retlw D'233' retlw D'231' retlw D'229' retlw D'227' retlw D'225' retlw D'223' retlw D'221' retlw D'219' retlw D'217' retlw D'215' retlw D'213' retlw D'211' retlw D'209' retlw D'207' retlw D'205' retlw D'203' retlw D'201' retlw D'199' retlw D'197' retlw D'195' retlw D'193' retlw D'191' retlw D'189' retlw D'187' retlw D'185' retlw D'183' retlw D'181' retlw D'179' retlw D'177' retlw D'175' retlw D'173' retlw D'171' retlw D'169' retlw D'167' retlw D'165' retlw D'163'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

D'161' D'159' D'157' D'155' D'153' D'151' D'149' D'147' D'145' D'143' D'141' D'139' D'137' D'135' D'133' D'131' D'129' D'126' D'124' D'122' D'120' D'118' D'116' D'114' D'112' D'110' D'108' D'106' D'104' D'102' D'100' D'98' D'96' D'94' D'92' D'90' D'88' D'86' D'84' D'82' D'80' D'78' D'76' D'74' D'72' D'70' D'68' D'66' D'64' D'62' D'60' D'58' D'56' D'54' D'52' D'50' D'48' D'46' D'44' D'42' D'40'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

D'38' D'36' D'34' D'32' D'30' D'28' D'26' D'24' D'22' D'20' D'18' D'16' D'14' D'12' D'10' D'8' D'6' D'4' D'2' D'0'

; xxxxxxxx table sinus xxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x0200 ; adresse de dbut de la table table_sinus addwf PCL , f retlw D'128' retlw D'134' retlw D'140' retlw D'146' retlw D'152' retlw D'158' retlw D'165' retlw D'170' retlw D'176' retlw D'182' retlw D'188' retlw D'193' retlw D'198' retlw D'203' retlw D'208' retlw D'213' retlw D'218' retlw D'222' retlw D'226' retlw D'230' retlw D'234' retlw D'237' retlw D'240' retlw D'243' retlw D'245' retlw D'248' retlw D'250' retlw D'251' retlw D'253' retlw D'254' retlw D'254' retlw D'255' retlw D'255' retlw D'255' retlw D'254' retlw D'254'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

D'253' D'251' D'250' D'248' D'245' D'243' D'240' D'237' D'234' D'230' D'226' D'222' D'218' D'213' D'208' D'203' D'198' D'193' D'188' D'182' D'176' D'170' D'165' D'158' D'152' D'146' D'140' D'134' D'128' D'121' D'115' D'109' D'103' D'97' D'90' D'85' D'79' D'73' D'67' D'62' D'57' D'52' D'47' D'42' D'37' D'33' D'29' D'25' D'21' D'18' D'15' D'12' D'10' D'7' D'5' D'4' D'2' D'1' D'1' D'0' D'0'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

D'0' D'1' D'1' D'2' D'4' D'5' D'7' D'10' D'12' D'15' D'18' D'21' D'25' D'29' D'33' D'37' D'42' D'47' D'52' D'57' D'62' D'67' D'73' D'79' D'85' D'90' D'97' D'103' D'109' D'115' D'121'

; xxxxxxxx table triangle xxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x0300 ; adresse de dbut de la table table_triangle addwf PCL , f retlw D'255' retlw D'251' retlw D'247' retlw D'243' retlw D'239' retlw D'235' retlw D'231' retlw D'227' retlw D'223' retlw D'219' retlw D'215' retlw D'211' retlw D'207' retlw D'203' retlw D'199' retlw D'195' retlw D'191' retlw D'187' retlw D'183' retlw D'179' retlw D'175' retlw D'171' retlw D'167' retlw D'163' retlw D'159'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw

D'155' D'151' D'147' D'143' D'139' D'135' D'131' D'128' D'124' D'120' D'116' D'112' D'108' D'104' D'100' D'96' D'92' D'88' D'84' D'80' D'76' D'72' D'68' D'64' D'60' D'56' D'52' D'48' D'44' D'40' D'36' D'32' D'28' D'24' D'20' D'16' D'12' D'8' D'4' D'0' D'4' D'8' D'12' D'16' D'20' D'24' D'28' D'32' D'36' D'40' D'44' D'48' D'52' D'56' D'60' D'64' D'68' D'72' D'76' D'80' D'84'

retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw retlw END

D'88' D'92' D'96' D'100' D'104' D'108' D'112' D'116' D'120' D'124' D'128' D'131' D'135' D'139' D'143' D'147' D'151' D'155' D'159' D'163' D'167' D'171' D'175' D'179' D'183' D'187' D'191' D'195' D'199' D'203' D'207' D'211' D'215' D'219' D'223' D'227' D'231' D'235' D'239' D'243' D'247' D'251'

Das könnte Ihnen auch gefallen