اطلاعیه

Collapse
No announcement yet.

کمک فرکانس متر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک فرکانس متر

    سلام برنامه فرکانس متر حداقل تا 1 مگا هرتز را میخوام .... یه برنامه تو همی انجمن پیدا کردم تو پروتوس امتحانش کردم منتها تا 225 کیلو می گیره و مشکلی که داره اینه مثلا فرکانس 60 کیلو را 600 کیلو وخورده ای می گیره
    عزیزان لطف کنند کمک کنند اینم برنامه


    LCD_PORT EQU P1
    RS BIT P3.0
    EN BIT P3.1
    CONTROL BIT P3.4
    rec_a equ 47


    ;--------------------------
    ; *** MAIN *** ---
    ;--------------------------
    ORG 0000H

    MAIN: CALL INIT
    MOV DPTR,#DATA_FR
    CALL WRITE
    LOOP_MAIN:
    MOV TH1,#00
    MOV TL1,#00

    CLR CONTROL
    SETB TR1
    CALL DELAY_100msec
    CLR TR1
    JBC TF1,DISPLAY_ERROR

    MOV A,TH1
    CJNE A,#HIGH(650),NOT_650
    MOV A,TL1
    CJNE A,#LOW(650),NOT_650
    NOT_650:
    JNC GR_65K
    MOV TH1,#00
    MOV TL1,#00
    SETB CONTROL
    SETB TR1
    CALL DELAY_1SEC
    CLR TR1
    CALL DIS_LT_65K
    JMP LOOP_MAIN
    DISPLAY_ERROR:
    CALL ERROR
    JMP MAIN
    GR_65K:
    MOV A,TH1
    CJNE A,#HIGH(6550),NOT_6550
    MOV A,TL1
    CJNE A,#LOW(6550),NOT_6550
    NOT_6550:
    JNC GR_650K
    MOV TH1,#00
    MOV TL1,#00
    CLR CONTROL
    SETB TR1
    CALL DELAY_1SEC
    CLR TR1

    CALL DIS_LT_650K
    JMP LOOP_MAIN

    GR_650K:
    CALL DIS_LT_6500K
    JMP LOOP_MAIN
    ;--------------------------
    ; *** ERROR *** ---
    ;--------------------------
    ERROR:
    MOV A,#01
    CALL COM

    MOV DPTR,#DATA1_ERROR
    CALL WRITE

    MOV A,#0C0H
    CALL COM

    MOV DPTR,#DATA2_ERROR
    CALL WRITE

    CALL DELAY_1SEC
    CALL DELAY_1SEC

    RET
    ;--------------------------
    ; *** DIV 10000 ***--
    ;--------------------------
    DIV_10000:
    MOV A,TH1
    CJNE A,#HIGH(10000),NO_10000
    MOV A,TL1
    CJNE A,#LOW(10000),NO_10000
    MOV TH1,#00
    MOV TL1,#00
    INC R5
    EXIT_DIV_10000:
    RET
    NO_10000:
    JC EXIT_DIV_10000
    MOV A,TL1
    CLR C
    SUBB A,#LOW(10000)
    MOV TL1,A
    MOV A,TH1
    SUBB A,#HIGH(10000)
    MOV TH1,A
    INC R5
    JMP DIV_10000
    ;--------------------------
    ; *** DIV 1000 *** --
    ;--------------------------
    DIV_1000:
    MOV A,TH1
    CJNE A,#HIGH(1000),NO_1000
    MOV A,TL1
    CJNE A,#LOW(1000),NO_1000
    MOV TH1,#00
    MOV TL1,#00
    INC R5
    EXIT_DIV_1000:
    RET
    NO_1000:
    JC EXIT_DIV_1000
    MOV A,TL1
    CLR C
    SUBB A,#LOW(1000)
    MOV TL1,A
    MOV A,TH1
    SUBB A,#HIGH(1000)
    MOV TH1,A
    INC R5
    JMP DIV_1000
    ;--------------------------
    ; *** DIV 100 *** --
    ;--------------------------
    DIV_100:
    MOV A,TH1
    CJNE A,#HIGH(100),NO_100
    MOV A,TL1
    CJNE A,#LOW(100),NO_100
    MOV TH1,#00
    MOV TL1,#00
    INC R5
    EXIT_DIV_100:
    RET
    NO_100:
    JC EXIT_DIV_100
    MOV A,TL1
    CLR C
    SUBB A,#LOW(100)
    MOV TL1,A
    MOV A,TH1
    SUBB A,#HIGH(100)
    MOV TH1,A
    INC R5
    JMP DIV_100
    ;--------------------------
    ; *** DIS_LT_65K ***-
    ;--------------------------
    DIS_LT_65K:
    MOV A,#0C0H
    CALL COM

    MOV R5,#30H
    CALL DIV_10000
    MOV A,R5
    CALL DATAW

    MOV R5,#30H
    CALL DIV_1000
    MOV A,R5
    CALL DATAW

    MOV A,#','
    CALL DATAW

    MOV R5,#30H
    CALL DIV_100
    MOV A,R5
    CALL DATAW

    MOV A,TL1
    MOV B,#10
    DIV AB
    ADD A,#30H
    CALL DATAW

    MOV A,B
    ADD A,#30H
    CALL DATAW

    MOV A,#' '
    CALL DATAW
    MOV A,#'H'
    CALL DATAW
    MOV A,#'z'
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    RET
    ;--------------------------
    ; *** DIS_LT_650K ***
    ;--------------------------
    DIS_LT_650K:
    MOV A,#0C0H
    CALL COM

    MOV R5,#30H
    CALL DIV_10000
    MOV A,R5
    CALL DATAW

    MOV R5,#30H
    CALL DIV_1000
    MOV A,R5
    CALL DATAW

    MOV R5,#30H
    CALL DIV_100
    MOV A,R5
    CALL DATAW

    MOV A,#','
    CALL DATAW

    MOV A,TL1
    MOV B,#10
    DIV AB
    ADD A,#30H
    CALL DATAW

    MOV A,B
    ADD A,#30H
    CALL DATAW

    MOV A,#'0'
    CALL DATAW


    MOV A,#' '
    CALL DATAW
    MOV A,#'H'
    CALL DATAW
    MOV A,#'z'
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    RET
    ;--------------------------
    ; *** DIS_LT_6500K **
    ;--------------------------
    DIS_LT_6500K:
    MOV A,#0C0H
    CALL COM

    MOV R5,#30H
    CALL DIV_10000
    MOV A,R5
    CALL DATAW

    MOV A,#','
    CALL DATAW

    MOV R5,#30H
    CALL DIV_1000
    MOV A,R5
    CALL DATAW

    MOV R5,#30H
    CALL DIV_100
    MOV A,R5
    CALL DATAW

    MOV A,TL1
    MOV B,#10
    DIV AB
    ADD A,#30H
    CALL DATAW

    MOV A,#','
    CALL DATAW

    MOV A,B
    ADD A,#30H
    CALL DATAW

    MOV A,#'0'
    CALL DATAW

    MOV A,#'0'
    CALL DATAW

    MOV A,#' '
    CALL DATAW
    MOV A,#'H'
    CALL DATAW
    MOV A,#'z'
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    MOV A,#' '
    CALL DATAW

    RET
    ;--------------------------
    ; *** INIT *** ---
    ;--------------------------
    INIT:
    MOV TMOD,#51H ;T1=counter 16bit T0=timer 16bit

    MOV A,#38H ;dotmatrix of lcd=5*7
    CALL COM ;send command to lcd

    MOV A,#0CH ;display=on cursor=off
    CALL COM ;send command to lcd

    MOV A,#06 ;inc cursor
    CALL COM ;send command to lcd

    MOV A,#01 ;clear lcd
    CALL COM ;send command to lcd

    RET ;return to main
    ;--------------------------
    ; *** convert *** ---
    ;--------------------------
    convert:
    mov rec_a,a

    mov c,acc.0
    mov acc.7,c

    mov c,acc.1
    mov acc.6,c

    mov c,acc.2
    mov acc.5,c

    mov c,acc.3
    mov acc.4,c

    mov c,rec_a.7
    mov acc.0,c

    mov c,rec_a.6
    mov acc.1,c

    mov c,rec_a.5
    mov acc.2,c

    mov c,rec_a.4
    mov acc.3,c

    ret
    ;--------------------------
    ; *** COM *** ---
    ;--------------------------
    COM:
    call convert
    MOV LCD_PORT,A ;get data
    CLR RS ;tish data is command
    SETB EN ;enable en pin
    CLR EN ;disable en pin

    CALL DELAY_2msec ;rate of lcd is low

    RET
    ;--------------------------
    ; *** DELAY 2msec ***
    ;--------------------------
    DELAY_2msec: ;8*250*1usec= 2,000 usec = 2 msec
    MOV R7,#8
    LOOP_DELAY_2msec:
    MOV R6,#250
    DJNZ R6,$
    DJNZ R7,LOOP_DELAY_2msec

    RET
    ;--------------------------
    ; *** DATAW *** ---
    ;--------------------------
    DATAW:
    call convert
    MOV LCD_PORT,A ;get data
    SETB RS ;this data for display
    SETB EN ;enable en pin
    CLR EN ;disable en pin

    CALL DELAY_2msec

    RET
    ;--------------------------
    ; *** WRITE *** ---
    ;--------------------------
    WRITE:
    CLR A ;A=0
    MOVC A,@A+DPTR ;A=@A+DPTR
    INC DPTR
    CJNE A,#255,WR_A
    RET
    WR_A:
    CALL DATAW
    JMP WRITE
    ;--------------------------
    ; *** DELAY_25msec **
    ;--------------------------
    DELAY_25msec:
    MOV TH0,#HIGH(-50000+10)
    MOV TL0,#LOW(-50000+10)
    SETB TR0
    JNB TF0,$
    CLR TR0
    CLR TF0

    RET
    ;--------------------------
    ; *** DELAY 100msec *
    ;--------------------------
    DELAY_100msec:
    MOV R7,#4
    LOOP_DELAY_100msec:
    CALL DELAY_25msec
    DJNZ R7,LOOP_DELAY_100msec

    RET
    ;--------------------------
    ; *** DELAY 1SEC ***-
    ;--------------------------
    DELAY_1SEC:
    MOV R7,#40
    LOOP_DELAY_1SEC:
    CALL DELAY_25msec
    DJNZ R7,LOOP_DELAY_1SEC

    RET
    ;--------------------------
    ; *** DATA *** ---
    ;--------------------------
    DATA_FR:
    DB 'Frequency':',255
    DATA1_ERROR:
    DB ' *** ERROR ***',255
    DATA2_ERROR:
    DB ' FR is high !!!',255
    ;--------------------------
    ; *** END PROGEAM ***
    ;--------------------------

    END
لطفا صبر کنید...
X