اطلاعیه

Collapse
No announcement yet.

کمک برای فرکانس متر با 8051

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

    کمک برای فرکانس متر با 8051

    سلام ، من یه پروژه فرکانس متر 8051 دارم که برنامشو نوشتم ولی توی پروتئوس روی lcd چیزی نشون نمیده :sad: فکر کنم برنامه ی lcd یا وقفه ها مشکل داره پایه های lcd رو هم درست وصل کرد. اینم برنامه:
    ORG 0
    LJMP MAIN
    ORG 000BH
    LJMP T0ISR
    ORG 001BH
    LJMP T1ISR
    ORG 0030H
    MAIN:
    MOV R0,#0
    MOV R3,#20
    MOV IE,#10001010B
    MOV TMOD,#61H
    MOV TH1,#00H
    SETB TR1
    AA: MOV TL0,#0B0H
    MOV TH0,#3CH
    SETB TR0
    HERE1:JNB TF0,HERE1
    HERE2:JNB TF1,HERE2
    T0ISR:
    CLR TF0
    CLR TR0
    DJNZ R3,AA
    MOV B,#255
    MOV A,R0
    MUL AB
    ADD A,TL1
    MOV R1,A
    MOV A,B
    ADDC A,TH1
    MOV R2,A
    CALL LCD
    MOV R0,#0
    MOV R3,#20
    SETB TR0
    RETI
    T1ISR:
    INC R0
    CLR TR1
    CLR TF1
    RETI
    LCD:
    MOV A,#38H
    CALL COMMAND
    CALL DELAY
    MOV A,#0CH
    CALL COMMAND
    CALL DELAY
    MOV A,#06H
    CALL COMMAND
    CALL DELAY
    MOV A,#01H
    CALL COMMAND
    CALL DELAY
    MOV A,#'f'
    CALL DISPLAY
    CALL DELAY
    MOV A,#'r'
    CALL DISPLAY
    CALL DELAY
    MOV A,#'e'
    CALL DISPLAY
    CALL DELAY
    MOV A,#'q'
    CALL DISPLAY
    CALL DELAY
    MOV A,#':'
    CALL DISPLAY
    CALL DELAY
    MOV A,R2
    CALL DISPLAY
    CALL DELAY
    MOV A,R1
    CALL DISPLAY
    CALL DELAY
    MOV A,#'H'
    CALL DISPLAY
    CALL DELAY
    MOV A,#'Z'
    CALL DISPLAY
    CALL DELAY
    COMMAND:
    MOV P2,A
    CLR P0.0
    CLR P0.1
    SETB P0.2
    CLR P0.2
    RET
    DELAY:
    MOV R4,#100
    BB: MOV R5,#200
    CC: DJNZ R5,CC
    DJNZ R4,BB
    RET
    DISPLAY:
    MOV P2,A
    SETB P0.0
    CLR P0.1
    SETB P0.2
    CLR P0.2
    RET
    END
    تو رو خدا کمک کنید! خیلی مهمه :cry:

    #2
    پاسخ : کمک برای فرکانس متر با 8051


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

    ORG 0000
    ;--------------------------
    ; *** MAIN *** ---
    ;--------------------------
    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

    دیدگاه


      #3
      پاسخ : کمک برای فرکانس متر با 8051

      ببخشید من اصلا قصد نا امید کردن نداشتم اما چرا از ASM استفاده کردید. :question:
      Difficult But possible
      به اميد ايراني آباد.
      http://art-net.ir

      دیدگاه


        #4
        پاسخ : کمک برای فرکانس متر با 8051

        سلام، چون استادم با asm می خواست!!
        خدا رو شکر برنامه ام درست شد و تحویل دادم. :icon_razz:

        دیدگاه


          #5
          پاسخ : کمک برای فرکانس متر با 8051

          سلام من دارم با 8051 مینویسم الان هم تموم شده

          دیدگاه

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