با سلام
برنامه ای از اینترنت مربوط به میکروکنترلر pic دانلود کرده ام اما در تشخیص زبان برنامه نویسی ان مشکل دارم. لطفا دوستان بازبینی فرمایند و اسم نرم افزار و زبان برنامه نویسی را ذکر نمایند.
با تشکر
برنامه:
برنامه ای از اینترنت مربوط به میکروکنترلر pic دانلود کرده ام اما در تشخیص زبان برنامه نویسی ان مشکل دارم. لطفا دوستان بازبینی فرمایند و اسم نرم افزار و زبان برنامه نویسی را ذکر نمایند.
با تشکر
برنامه:
کد:
list F=inhx8m, P=12F615, R=hex, N=0 #include P12F615.inc; PIC definitions __config _BOR_ON & _IOSCFS_8MHZ & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSCIO Errorlevel -302, -224 ; switches off Message [302]: Register in operand not in bank 0. ; Definitions ------------------------------------------------------------- #define OutputPin porta,0 #define ToggleSelect porta,5 #define SensitivitySelect porta,4 #define PreviousButtonState Flags,0 ; RAM preserved ----------------------------------------------------------- cblock 0x40 WaitCounter,WaitCounter2 PassArg1,PassArg2 PassArg3,PassArg4 Press_Threshold_H,Press_Threshold_L Release_Threshold_H,Release_Threshold_L Flags endc ; Conastants -------------------------------------------------------------- GLPressHysteresis_H = b'00000001' ;High sensitivity GLPressHysteresis_L = b'00000010' ;High sensitivity GLReleaseHysteresis_H = b'00000001' ;High sensitivity GLReleaseHysteresis_L = b'00000000' ;High sensitivity GLPressHysteresis_H_2 = b'00000001' ;Low sensitivity GLPressHysteresis_L_2 = b'00001110' ;Low sensitivity GLReleaseHysteresis_H_2 = b'00000001' ;Low sensitivity GLReleaseHysteresis_L_2 = b'00001000' ;Low sensitivity ; Program Memory ---------------------------------------------------------- org 0 goto Init ; Interrupt Service Routine ----------------------------------------------- org 4 ; ISR beginning ; ------------------------------------------------------------------------- ; Microcontroller initialization Init include myInitilization.inc ;Include the PIC Initialization routine ;########################################################################## ; Main Program ------------------------------------------------------------ Start ;TRIS setup bank1 ;Go to bank 1 movlw b'11111010' ; movwf TRISA ;Set the port pin types of the RA bank0 ;Go to bank 0 bcf OutputPin MOVLW b'11100111' option bsf cmcon0,CMON ;Enable comparator bcf cmcon0,CMPOL ;Logic is inverted bcf cmcon0,COUT ; bsf cmcon0,CMOE ;Output to COUT pin bsf cmcon0,CMR ;V+ driven to Vref bcf cmcon0,CMCH ;V- driven to channel 0 bcf CMCON1,T1ACS ;Timer 1 Clock Source is Instruction Clock (FOSC\4) bcf CMCON1,CMHYS ;Comparator Hysteresis disabled bsf CMCON1,T1GSS ;Timer 1 Gate Source is T1G pin (pin should be configured as digital input) bcf CMCON1,CMSYNC ;Output is asynchronous movlw b'00010000' movwf vrcon ;Set the press threshold call wait250msec call wait250msec call wait250msec call wait250msec ;Wait for frequency to become stable call GetFrequencyCount movlw GLPressHysteresis_H_2 btfsc SensitivitySelect movlw GLPressHysteresis_H subwf passarg1,w ;Sub from count HIGH the HIGH byte of Press Thresshold movwf Press_Threshold_H ;And save it to memory movlw GLPressHysteresis_L_2 btfsc SensitivitySelect movlw GLPressHysteresis_L subwf passarg2,w ;Sub from count LOW the LOW byte of Press Thresshold movwf Press_Threshold_L ;And save it to memory ;Set the release threshold movlw GLReleaseHysteresis_H_2 btfsc SensitivitySelect movlw GLReleaseHysteresis_H subwf passarg1,w ;Sub from count HIGH the HIGH byte of Release Thresshold movwf Release_Threshold_H ;And save it to memory movlw GLReleaseHysteresis_L_2 btfsc SensitivitySelect movlw GLReleaseHysteresis_L subwf passarg2,w ;Sub from count LOW the LOW byte of Release Thresshold movwf Release_Threshold_L ;And save it to memory MainLoop call GetFrequencyCount ;Check if pressed movf passarg2,w movwf passarg4 ;Save Prescaller Count movf passarg1,w movwf passarg3 ;Save TMR0 Count movf Press_Threshold_L,w subwf passarg2,w ; R= Prescaller - LOW threshold btfss carry decf passarg1,f ;If R < 0, decrease passarg1 (TMR0 count) movf Press_Threshold_H,w subwf passarg1,w ; R= TMR0 - HIGH threshold btfsc carry goto IsNotPressed ;If R < 0, Button is NOT Pressed ;Else is pressed btfss ToggleSelect ;If ToggleSelect is LOW (pushbutton action) goto ActivateOutput ;Then just activate output btfsc PreviousButtonState ;Else, check if previous state was RELEASED goto PressReleaseCheckDone ;If not, then do nothing ;If WAS released... bsf PreviousButtonState ;Update previous state movlw b'00000001' xorwf PORTA,f ;Toggle output call wait100msec ;and wait 100msec goto PressReleaseCheckDone ActivateOutput bsf OutputPin IsNotPressed ;Check if released movf passarg3,w movwf passarg1 ;Restore TMR0 Count movf Release_Threshold_L,w subwf passarg2,w ; R= Prescaller - LOW threshold btfss carry decf passarg1,f ;If R < 0, decrease passarg3 (TMR0 count) movf Release_Threshold_H,w subwf passarg1,w ; R= TMR0 - HIGH threshold btfss carry goto PressReleaseCheckDone ;If R > 0, Button is NOT Released ;Else is released btfss ToggleSelect ;If ToggleSelect is LOW (pushbutton action) bcf OutputPin ;Then deactivate output bcf PreviousButtonState ;else (Toggle) do not deactivate it PressReleaseCheckDone goto MainLoop GetFrequencyCount ;This sub returns PassArg1:PassArg2 as the TMR0:Prescaller count clrf passarg1 movlw d'44' ; Set the maximum prescaller value movwf passarg2 ; to start decreasing (max 43+1) clrf tmr0 call wait10msec call wait10msec call wait10msec call wait10msec call wait10msec call wait10msec movf tmr0,w movwf passarg1 MOVLW b'11000111' ;Tmr0 source is Fosc/4 option GetPrescallerValue decF passarg2,f ;1 MOVF tmr0,w ;1 XORWF passarg1,w ;1 BTFSC status,z ;1 GOTO GetPrescallerValue ;2 = total 6 instruction cycles ;So, it prescaller is 0 (min), we can measure (ceil)255/6=43 MOVLW b'11100111' ;Tmr0 source is T0CKI option return include mSecDelays8MHz.inc Fins end ; end of program
دیدگاه