1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Dành cho những ai yêu thích môn thể thao "mô hình máy bay điều khiển từ xa"

Chủ đề trong 'Điện - Điện tử - Viễn thông' bởi Pham_Gia_Vinh, 29/02/2004.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. Pham_Gia_Vinh

    Pham_Gia_Vinh Thành viên mới

    Tham gia ngày:
    29/02/2004
    Bài viết:
    364
    Đã được thích:
    0
    to Risc:
    Bằng VĐK là gì? Mình không hiểu. Mình không học ĐH ở nhà nên nhiều từ kỹ thuật mình không biết đâu.
    to Arki:
    hihi mình vừa mua, nên không có ý định bán. Bạn muốn mua thì mình chỉ địa cho. Giá khoảng 500$.
    Bay, bay nữa, bay mãi
  2. chubengocnghech

    chubengocnghech Thành viên mới

    Tham gia ngày:
    30/11/2003
    Bài viết:
    167
    Đã được thích:
    0
    Hihi có bản vẽ mà to quá không post lên đuợc nên đành tạo một hộp thư để gửi vào đấy. Bạn nào thích thì vào hộp thư đấy lấy nhé:
    mail.vnws.com
    acc: CLBMoHinh
    pass: 12345
    Load về nhé. Nguyên liệu dùng loại xốp trang trí, mình không nhớ rõ tên. Loại mà một mặt no nhẵn thín ý. Mua loại dày 5mm hoặc 3mm cạng tốt.

    bác Vĩnh ơi bác có thể mail cho em được không cái địa chỉ mà bác đưa em vào hoài mà không được.cám ơn bác nhiều
  3. chubengocnghech

    chubengocnghech Thành viên mới

    Tham gia ngày:
    30/11/2003
    Bài viết:
    167
    Đã được thích:
    0
    Hihi có bản vẽ mà to quá không post lên đuợc nên đành tạo một hộp thư để gửi vào đấy. Bạn nào thích thì vào hộp thư đấy lấy nhé:
    mail.vnws.com
    acc: CLBMoHinh
    pass: 12345
    Load về nhé. Nguyên liệu dùng loại xốp trang trí, mình không nhớ rõ tên. Loại mà một mặt no nhẵn thín ý. Mua loại dày 5mm hoặc 3mm cạng tốt.

    bác Vĩnh ơi bác có thể mail cho em được không cái địa chỉ mà bác đưa em vào hoài mà không được.cám ơn bác nhiều
  4. risc

    risc Thành viên mới

    Tham gia ngày:
    06/10/2003
    Bài viết:
    46
    Đã được thích:
    0

    VĐK là viết tắt của microcontroller ấy
  5. risc

    risc Thành viên mới

    Tham gia ngày:
    06/10/2003
    Bài viết:
    46
    Đã được thích:
    0

    VĐK là viết tắt của microcontroller ấy
  6. Pham_Gia_Vinh

    Pham_Gia_Vinh Thành viên mới

    Tham gia ngày:
    29/02/2004
    Bài viết:
    364
    Đã được thích:
    0
    À Vi Điều Khiển à? hic hic.
    Có ngay:
    tiếp đến là phần code này: dài đấy nhé:
    PROCESSOR PIC12C509
    INCLUDE <P12C509.inc>
    radix dec
    __config _MCLRE_OFF & _CP_ON & _WDT_ON & _IntRC_OSC
    ;  §­ ç¥­¨¥ à §à冷¢ ¯®àâ  GPIO, ¨ ­ ¯à ¢«¥­¨¥ ¨å ¢ë¢®¤  (ॣ¨áâà TRIS)
    ;StartBtnBit EQU 1 ; ?s室 ª­®¯ª¨ "Quick Start"
    StopBit EQU 1 ; Turns on brake
    RunBit EQU 2 ; ?së室 ¢ª«î祭¨ï ¬®â®à 
    ServoBit EQU 0 ; ?s室 ã¯à ¢«ïîé¨å ¨¬¯ã«ìᮢ
    BattOkBit EQU 3 ; ?s室 áâ âãá   ªª ¬ã«ïâ®à 
    TrisBits EQU H''FF'' & ~((1 << StopBit) | (1 << RunBit))
    ; Bits to be set with the OPTION instruction
    ; No wake up
    ; Weak pull-up enabled
    ; Timer 0 source internal
    ; Which edge is don''t care
    ; Prescaler to watchdog, set to give 16*17 ms timeout
    ;
    OptionBits EQU B''10011100''
    ; ==========================================================================
    ; Š®­áâ ­âë à ¡®ç¥£®  «£®à¨â¬ 
    ;
    PWM_Period EQU 47 ; Š®«¨ç¥á⢮ 横«®¢ ¯® 7 ¨­áâàãªæ¨©
    PWM_Start EQU 4 ; Lowest cycle count
    InvalidPulseBit EQU 7 ; 0x80
    BrakeEnableBit EQU 6 ; 0x40
    ArmPulsesReqd EQU 5 ; consecutive in-range pulses
    ; ==========================================================================
    ; ¨â®¢ë¥ ä« £¨
    ;
    BattLow EQU 0
    PriorServoBit EQU 1
    ;
    ; ¥à¥¬¥­­ë¥
    ;
    Flags EQU 8 ; Ÿç¥©ª  á ¡¨â®¢ë¬¨ ä« £ ¬¨
    PwmCount EQU Flags + 1 ; ?~ç¥â稪 ®âà ¡®â ­­®©
    ; ¤«¨â¥«ì­®á⨠¨¬¯ã«ìá  o?'- 
    PwmWidth EQU PwmCount + 1 ; ?~ª¢ ¦­®áâì o?'- 
    ServoCount EQU PwmWidth + 1 ; ?~ç¥â¨ª ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (¬« ¤è¨© ¡ ©â)
    Command EQU ServoCount + 1 ; Š®¤ ª®¬ ­¤ë, á®â¢¥âáâ¢ãî饩
    ; ¨§¬¥àï­­®© ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® 㬯ã«ìá 
    ArmPulseCount EQU Command + 1 ; ?~ç¥â稪 "­®à¬ «ì­ëå"
    ; ¨¬¯ã«ìᮢ, ­¥®¡å®¤¨¬ëå ¤«ï
    ; ¢ª«î祭¨ï ॣã«ïâ®à 
    ;ServoCountHi EQU ArmPulseCount + 1 ; ?~ç¥â¨ª ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (áâ à訩 ¡ ©â)
    ;Tmp EQU ServoCountHi + 1 ; ?s६¥­­ï ¯¥à¥¬¥­­ ï
    ; =========================================================================
    ; ' ªà®á ¤«ï £¥­¥à æ¨¨ áâப¨ ¨§ ª®¬ ­¤ "NOP"
    ;
    NO_OP MACRO count
    NO_OP_COUNT SET count
    WHILE NO_OP_COUNT
    nop
    NO_OP_COUNT SET NO_OP_COUNT - 1
    ENDW
    ENDM
    ; =========================================================================
    ; ' ªà®á ¤«ï ãáâ ­®¢ª¨ ¢ ­ ç «ì­®¥ á®áâ®ï­¨¥ âà ­§¨áâ®à­®£® ª«îç .
    ;   ¢ë室¥, W ᮤ¥à¦¨â áç¥â稪 ¤«¨â¥«ì­®áâ¨
    ;
    DoRunBit MACRO ; 5 ª®¬ ­¤
    movf PwmWidth, W
    skpz
    bsf GPIO, RunBit
    skpnz
    bcf GPIO, RunBit
    ENDM
    ; =========================================================================
    ; ' ªà®á ¤«ï ¨§¬¥à¥­¨ï ¤«¨¥â«ì­®á⨠ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ;
    DoServoCount MACRO ; 2 ª®¬ ­¤ë
    btfsc GPIO, ServoBit
    incf ServoCount, F
    ENDM
    ; =========================================================================
    ; =========================================================================
    ; ?~®¡á⢥­­®, á ¬ ª®¤.
    Coldstart: ORG 0
    movwf OSCCAL ; 'à㧨¬ ª «¨¡à㢮ç­ãî ª®­áâ ­âã
    bcf STATUS, PA0 ; ?s ®á­®¢­®¬, ª®¤ ¢ ¯¥à¢®© áâà ­¨æ¥
    ;
    ; ?~«¥¤ãîé ï ¯®á«¥¤®¢ â¥«ì­®áâì ¨§ ª­¨£¨. Ž­  ¯¥à¥ª«î砥⠯।¤¥«¨â¥«ì
    ; ®â TMR0 ª WDT, ¨áª«îç ï á«ãç ©­ë© á¡à®á ¬¨ªà®ª®­â஫«¥à 
    ;
    clrwdt
    clrf TMR0
    movlw OptionBits | 7
    option
    clrwdt
    movlw OptionBits
    option
    clrwdt
    clrf GPIO ;  áâà ¨¢ ¥¬ ¯®àâ ¢/¢
    movlw TrisBits
    tris GPIO ; ?sᥠ¢ë室ë - ¢ 0
    ; =========================================================================
    ; (!) ?s­¨¬ ­¨¥. 'ë §¤¥áì ¬®¦¥¬ ®ª § âìáï ¨ ¯à¨ ¢ª«î祭¨¨ ¯¨â ­¨ï, ¨ ¯à¨
    ; ¯ ¤¥­¨¨ ­ ¯à殮­¨ï ­  ¡ â à¥¥. ?s «î¡®¬ á«ãç ¥, ¤¢¨£ â¥«ì ¤®«¦¥­ ¡ëâì
    ; ¢ëª«î祭.
    ;
    Rearm: clrwdt
    btfss GPIO, BattOkBit
    goto Rearm
    ;
    ; ?~­ ç «  ­ã¦­® ¤®¦¤ âìáï ­ ç «  ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (¤® ¤®£® ª ª ¯à®¢¥àïâì ­ «¨ç¨¥ ¯à¢¨«ì­®£® ᨣ­ « )
    ;
    RaLoop1: btfss GPIO, BattOkBit
    goto Rearm
    btfss GPIO, ServoBit
    goto RaLoop1
    RaLoop2: btfss GPIO, BattOkBit
    goto Rearm
    btfsc GPIO, ServoBit
    goto RaLoop2
    clrf ServoCount
    clrwdt
    movlw ArmPulsesReqd
    movwf ArmPulseCount
    ;
    ; ?T¥¯¥àì, ¨§¬¥à塞 ¤«¨â¥«ì­®áâì ¨¬¯ã«ìá  ¨ ®¡à ¡ â뢠¥¬ ¥£®
    ;
    RaLoop3: btfss GPIO, BattOkBit
    goto Rearm
    btfss GPIO, ServoBit
    goto RaLoop3
    RaLoop4: incf ServoCount, F
    btfss GPIO, BattOkBit
    goto Rearm
    NO_OP 1
    btfsc GPIO, ServoBit
    goto RaLoop4 ; ?s 横«¥ ¤®«¦­® ¡ëâì 7 ª®¬ ­¤
    clrwdt
    movf ServoCount, W
    call ServoLookup
    bcf STATUS, PA0 ; ?s®ááâ ­ ¢«¨¢ ¥¬ à ¡®ç¨©
    ; ¡ ­ª ª®¤ 
    ;  ¬ £®¤ âáï ⮫쪮 ⥠¨¬¯ã«ìáë, ª®â®àë¥ ¯à¨¢®¤ïâ
    ; ª ®áâ ­®¢ª¥ ¤¢¨£ â¥«ï (¬¨­¨¬ «ì­ë© £ §)
    clrf ServoCount
    andlw 1 << BrakeEnableBit
    skpnz
    goto RaLoop1
    decfsz ArmPulseCount,F ; à¨è«® «¨ ¤®áâ â®ç­®¥
    ; ª®«¨ç¥á⢮ "¯à ¢¨«ì­ëå"
    ; ¨¬ã«ìᮢ ?
    goto RaLoop3
    clrf PwmWidth ; '®â®à ¢ëª«î祭
    clrf Flags ;  §®¬ á¡à á뢠¥¬ ¢á¥ ä« £¨
    PreMainPwmLoop:
    NO_OP 1
    ; ===========================================================
    ; Žá­®¢­®© 横« ä®à¬¨à®¢ ­¨ï o?'- 
    ;
    MainPwmLoop:
    DoServoCount ; 4th Precycle
    NO_OP 1
    ; ?  ¨áª«î祭¨¥¬ á«¥¤ãîé¨å ª®¬ ­¤, 横« á®áâ ¢«ï¥â 24 â ªâ 
    PwmEntry1:
    call DoPwmPulse
    DoServoCount ;
    DoRunBit
    DoServoCount ; 1st Precycle
    movwf PwmCount ; From DoRunBIt
    btfsc GPIO, ServoBit
    goto ServoIsHigh
    btfsc Flags, PriorServoBit
    goto EndOfPulse
    DoServoCount ; 2nd Precycle
    MainPwmEntry:
    nop
    btfsc Flags, BattLow ; Sneak this in here
    goto BattLoShutdown
    goto MainPwmLoop
    ServoIsHigh:
    bsf Flags, PriorServoBit
    nop
    DoServoCount ; 3rd Precycle, different path
    nop
    btfsc Flags, BattLow ; Sneak this in here
    goto BattLoShutdown ; If batt was ever low, quit now
    goto MainPwmLoop
    ; ============================================================================
    ; Žá­®¢­ ï ¯®á«¥¤®¢ â¥«ì­®áâì ¤¥©á⢨©:
    ; DoPwmPulse
    ; 2*nop
    ; DoRunBit ¨ á®åà ­¥­¨¥ १ã«ìâ â 
    ; 17*nop
    ; DoPwmPulse ¨ â.¤.
    ;
    ; ?sáï ¯®«¥§­ ï à ¡®â  ¤¥« ¥âáï ¯ã⥬ § ¬¥­ë
    ; ª®¬ ­¤ NOP ­  ­¥®¡å®¤¨¬ë¥ ¨­áâàãªæ¨¨
    ;
    EndOfPulse:
    bcf Flags, PriorServoBit
    clrwdt
    NO_OP 7
    call DoPwmPulse
    NO_OP 2
    ;
    DoRunBit
    movwf PwmCount
    movf ServoCount, W
    call ServoLookup ; 7 clocks
    movwf Command
    movwf PwmCount
    clrf ServoCount
    bcf STATUS, PA0
    NO_OP 4
    call DoPwmPulse
    NO_OP 2
    ;
    DoRunBit ; (!) ?Tᯮ«ì§ãîâáï ¯ à ¬¥âàë
    ; ¯à¥¤ë¤ã饩 ª®¬ ­¤ë
    movwf PwmCount
    NO_OP 5
    btfsc Command, InvalidPulseBit
    goto MainPwmEntry
    ;
    movf Command,W
    andlw H''3F'' ; ?§¡ ¢«ï¥¬áï ®â ¡¨â  â®à¬®§ 
    movwf PwmWidth
    btfss Command, BrakeEnableBit
    goto RunningCommand
    ;
    NO_OP 4
    call DoPwmPulse
    bsf GPIO, StopBit ; ?sª«îç ¥¬ â®à¬®§
    NO_OP 1
    DoRunBit
    NO_OP 7
    goto MainPwmEntry
    RunningCommand:
    bcf GPIO, StopBit ; ?s몫îç ¥¬ â®à¬®§ (®­ ¬®¦¥â
    ; ¡ëâì 㦥 ¢ëª«î祭)
    goto PwmEntry1 ; (!) â®â ¨¬¯ã«ìá ¡ã¤¥â ¯à®¯ã饭.
    ; ?z¢¨£ â¥«ì ¢ª«îç¨âáï, ­ ç¨­ ï
    ; á® á«¥¤ãî饣®
    ; ==========================================================================
    ;  â à¥ï ᥫ  - ®áâ ­ ¢«¨¢ ¥¬ ¬®â®à
    ; ¨ ¯¥à¥å®¤¨â ¢ ¦¤ã騩 ०¨¬
    ;
    BattLoShutdown:
    bcf GPIO, RunBit
    ; WARNING - DON''T DIDDLE THE GPIO REGISTER until the RunBit settles.
    ; You may end up leaving it set!
    call DoPwmPulse ; For delay only
    bsf GPIO, StopBit ; ?sª«îç ¥¬ â®à¬®§
    nop
    goto Rearm
    ; ==========================================================================
    ; à¥®¡à §®¢ ­¨¥ ¤«¨â¥«ì­®á⨠¨¬¯ã«ìá  ¢ ª®¬ ­¤ã. ?s®§¢à é ¥â ª®¬ ­¤ã ¢ W
    ; (!) ¯® ¢®§¢à é¥­¨¨ PA0 ãáâ ­®¢«¥­ ¢ 1.
    ; PC = (PA0 << 9) | (0 << 8) | W.
    ; ?T ¡«¨æ , ª ª®â®à®© ®¡à é ¥¬ï, ¡¥à¥âáï ¨§ ä ©«  speed400.inc
    ;
    ServoLookup:
    bsf STATUS, PA0
    movwf PCL
    ; ==========================================================================
    ; ?ã­ªæ¨ï £¥­¥à æ¨¨ 1 ¨¬¯ã«ìá  o?'- . à¨ ¢ë§®¢¥, ¬®â®à ¬®¦¥â ¡ëâì ¢ª«î祭
    ; ¨«¨ ¢ëª«î祭. ?᫨ ¢ëª«î祭, ®­ ­¥ ¡ã¤¥â ¢ª«î祭. , ¥á«¨ ¬®â®à à ¡®â «,
    ; ®â ¢ëª«îç¥âáï ª ª ⮫쪮 áç¥â稪 PWM_Count ®¡­ã«¨âáï.
    ;
    DoPwmPulse:
    PWM_LOOP_COUNT SET PWM_Period - PWM_Start
    WHILE PWM_LOOP_COUNT
    btfss GPIO, BattOkBit
    bsf Flags, BattLow
    DoServoCount ; 2 ª®¬ ­¤ë
    decf PwmCount,F
    skpnz
    bcf GPIO, RunBit
    PWM_LOOP_COUNT SET PWM_LOOP_COUNT - 1
    ENDW
    retlw 0
    ; ==========================================================================
    ; ?T ¡«¨æ  ¯à¥®¡à §®¢­¨ï ¤«¨â¥«ì­®á⨠¨á¯ã«ìá  ¢ ª®¬ ­¤ã.
    ; ?­¤¥ªá - 0..255, ª®â®àë© ¯à¥¤áâ ¢«ï¥â ᮡ®© ¬« ¤è¨¥ 8 ¡¨â ¤«¨â¥«ì­®áâ¨
    ; ¨¬¯ã«ìá , ¨§¬¥àï­­®© á 7-¬ªá è £®¬.
    ;   ¢ë室¥:
    ; PWM_width | ((invalid width)? 0x80 : 0) | ((Brake width range)? 0x40 : 0)
    ; PWM_width ­ å®¤¨âáï ¢ ¤¨ ¯¯ §®­¥ ®â 0 ¤® 63, £¤¥ 0 ®§­ ç ¥â
    ; ¢ëª«î祭¨¥ ¤¢¨£ â¥«ï
    ;
    ORG H''200'' ; Low part of second page (PA0==1)
    INCLUDE "speed400.inc" ;
    END
    Bay, bay nữa, bay mãi
  7. Pham_Gia_Vinh

    Pham_Gia_Vinh Thành viên mới

    Tham gia ngày:
    29/02/2004
    Bài viết:
    364
    Đã được thích:
    0
    À Vi Điều Khiển à? hic hic.
    Có ngay:
    tiếp đến là phần code này: dài đấy nhé:
    PROCESSOR PIC12C509
    INCLUDE <P12C509.inc>
    radix dec
    __config _MCLRE_OFF & _CP_ON & _WDT_ON & _IntRC_OSC
    ;  §­ ç¥­¨¥ à §à冷¢ ¯®àâ  GPIO, ¨ ­ ¯à ¢«¥­¨¥ ¨å ¢ë¢®¤  (ॣ¨áâà TRIS)
    ;StartBtnBit EQU 1 ; ?s室 ª­®¯ª¨ "Quick Start"
    StopBit EQU 1 ; Turns on brake
    RunBit EQU 2 ; ?së室 ¢ª«î祭¨ï ¬®â®à 
    ServoBit EQU 0 ; ?s室 ã¯à ¢«ïîé¨å ¨¬¯ã«ìᮢ
    BattOkBit EQU 3 ; ?s室 áâ âãá   ªª ¬ã«ïâ®à 
    TrisBits EQU H''FF'' & ~((1 << StopBit) | (1 << RunBit))
    ; Bits to be set with the OPTION instruction
    ; No wake up
    ; Weak pull-up enabled
    ; Timer 0 source internal
    ; Which edge is don''t care
    ; Prescaler to watchdog, set to give 16*17 ms timeout
    ;
    OptionBits EQU B''10011100''
    ; ==========================================================================
    ; Š®­áâ ­âë à ¡®ç¥£®  «£®à¨â¬ 
    ;
    PWM_Period EQU 47 ; Š®«¨ç¥á⢮ 横«®¢ ¯® 7 ¨­áâàãªæ¨©
    PWM_Start EQU 4 ; Lowest cycle count
    InvalidPulseBit EQU 7 ; 0x80
    BrakeEnableBit EQU 6 ; 0x40
    ArmPulsesReqd EQU 5 ; consecutive in-range pulses
    ; ==========================================================================
    ; ¨â®¢ë¥ ä« £¨
    ;
    BattLow EQU 0
    PriorServoBit EQU 1
    ;
    ; ¥à¥¬¥­­ë¥
    ;
    Flags EQU 8 ; Ÿç¥©ª  á ¡¨â®¢ë¬¨ ä« £ ¬¨
    PwmCount EQU Flags + 1 ; ?~ç¥â稪 ®âà ¡®â ­­®©
    ; ¤«¨â¥«ì­®á⨠¨¬¯ã«ìá  o?'- 
    PwmWidth EQU PwmCount + 1 ; ?~ª¢ ¦­®áâì o?'- 
    ServoCount EQU PwmWidth + 1 ; ?~ç¥â¨ª ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (¬« ¤è¨© ¡ ©â)
    Command EQU ServoCount + 1 ; Š®¤ ª®¬ ­¤ë, á®â¢¥âáâ¢ãî饩
    ; ¨§¬¥àï­­®© ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® 㬯ã«ìá 
    ArmPulseCount EQU Command + 1 ; ?~ç¥â稪 "­®à¬ «ì­ëå"
    ; ¨¬¯ã«ìᮢ, ­¥®¡å®¤¨¬ëå ¤«ï
    ; ¢ª«î祭¨ï ॣã«ïâ®à 
    ;ServoCountHi EQU ArmPulseCount + 1 ; ?~ç¥â¨ª ¤«¨â¥«ì­®áâ¨
    ; ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (áâ à訩 ¡ ©â)
    ;Tmp EQU ServoCountHi + 1 ; ?s६¥­­ï ¯¥à¥¬¥­­ ï
    ; =========================================================================
    ; ' ªà®á ¤«ï £¥­¥à æ¨¨ áâப¨ ¨§ ª®¬ ­¤ "NOP"
    ;
    NO_OP MACRO count
    NO_OP_COUNT SET count
    WHILE NO_OP_COUNT
    nop
    NO_OP_COUNT SET NO_OP_COUNT - 1
    ENDW
    ENDM
    ; =========================================================================
    ; ' ªà®á ¤«ï ãáâ ­®¢ª¨ ¢ ­ ç «ì­®¥ á®áâ®ï­¨¥ âà ­§¨áâ®à­®£® ª«îç .
    ;   ¢ë室¥, W ᮤ¥à¦¨â áç¥â稪 ¤«¨â¥«ì­®áâ¨
    ;
    DoRunBit MACRO ; 5 ª®¬ ­¤
    movf PwmWidth, W
    skpz
    bsf GPIO, RunBit
    skpnz
    bcf GPIO, RunBit
    ENDM
    ; =========================================================================
    ; ' ªà®á ¤«ï ¨§¬¥à¥­¨ï ¤«¨¥â«ì­®á⨠ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ;
    DoServoCount MACRO ; 2 ª®¬ ­¤ë
    btfsc GPIO, ServoBit
    incf ServoCount, F
    ENDM
    ; =========================================================================
    ; =========================================================================
    ; ?~®¡á⢥­­®, á ¬ ª®¤.
    Coldstart: ORG 0
    movwf OSCCAL ; 'à㧨¬ ª «¨¡à㢮ç­ãî ª®­áâ ­âã
    bcf STATUS, PA0 ; ?s ®á­®¢­®¬, ª®¤ ¢ ¯¥à¢®© áâà ­¨æ¥
    ;
    ; ?~«¥¤ãîé ï ¯®á«¥¤®¢ â¥«ì­®áâì ¨§ ª­¨£¨. Ž­  ¯¥à¥ª«î砥⠯।¤¥«¨â¥«ì
    ; ®â TMR0 ª WDT, ¨áª«îç ï á«ãç ©­ë© á¡à®á ¬¨ªà®ª®­â஫«¥à 
    ;
    clrwdt
    clrf TMR0
    movlw OptionBits | 7
    option
    clrwdt
    movlw OptionBits
    option
    clrwdt
    clrf GPIO ;  áâà ¨¢ ¥¬ ¯®àâ ¢/¢
    movlw TrisBits
    tris GPIO ; ?sᥠ¢ë室ë - ¢ 0
    ; =========================================================================
    ; (!) ?s­¨¬ ­¨¥. 'ë §¤¥áì ¬®¦¥¬ ®ª § âìáï ¨ ¯à¨ ¢ª«î祭¨¨ ¯¨â ­¨ï, ¨ ¯à¨
    ; ¯ ¤¥­¨¨ ­ ¯à殮­¨ï ­  ¡ â à¥¥. ?s «î¡®¬ á«ãç ¥, ¤¢¨£ â¥«ì ¤®«¦¥­ ¡ëâì
    ; ¢ëª«î祭.
    ;
    Rearm: clrwdt
    btfss GPIO, BattOkBit
    goto Rearm
    ;
    ; ?~­ ç «  ­ã¦­® ¤®¦¤ âìáï ­ ç «  ã¯à ¢«ïî饣® ¨¬¯ã«ìá 
    ; (¤® ¤®£® ª ª ¯à®¢¥àïâì ­ «¨ç¨¥ ¯à¢¨«ì­®£® ᨣ­ « )
    ;
    RaLoop1: btfss GPIO, BattOkBit
    goto Rearm
    btfss GPIO, ServoBit
    goto RaLoop1
    RaLoop2: btfss GPIO, BattOkBit
    goto Rearm
    btfsc GPIO, ServoBit
    goto RaLoop2
    clrf ServoCount
    clrwdt
    movlw ArmPulsesReqd
    movwf ArmPulseCount
    ;
    ; ?T¥¯¥àì, ¨§¬¥à塞 ¤«¨â¥«ì­®áâì ¨¬¯ã«ìá  ¨ ®¡à ¡ â뢠¥¬ ¥£®
    ;
    RaLoop3: btfss GPIO, BattOkBit
    goto Rearm
    btfss GPIO, ServoBit
    goto RaLoop3
    RaLoop4: incf ServoCount, F
    btfss GPIO, BattOkBit
    goto Rearm
    NO_OP 1
    btfsc GPIO, ServoBit
    goto RaLoop4 ; ?s 横«¥ ¤®«¦­® ¡ëâì 7 ª®¬ ­¤
    clrwdt
    movf ServoCount, W
    call ServoLookup
    bcf STATUS, PA0 ; ?s®ááâ ­ ¢«¨¢ ¥¬ à ¡®ç¨©
    ; ¡ ­ª ª®¤ 
    ;  ¬ £®¤ âáï ⮫쪮 ⥠¨¬¯ã«ìáë, ª®â®àë¥ ¯à¨¢®¤ïâ
    ; ª ®áâ ­®¢ª¥ ¤¢¨£ â¥«ï (¬¨­¨¬ «ì­ë© £ §)
    clrf ServoCount
    andlw 1 << BrakeEnableBit
    skpnz
    goto RaLoop1
    decfsz ArmPulseCount,F ; à¨è«® «¨ ¤®áâ â®ç­®¥
    ; ª®«¨ç¥á⢮ "¯à ¢¨«ì­ëå"
    ; ¨¬ã«ìᮢ ?
    goto RaLoop3
    clrf PwmWidth ; '®â®à ¢ëª«î祭
    clrf Flags ;  §®¬ á¡à á뢠¥¬ ¢á¥ ä« £¨
    PreMainPwmLoop:
    NO_OP 1
    ; ===========================================================
    ; Žá­®¢­®© 横« ä®à¬¨à®¢ ­¨ï o?'- 
    ;
    MainPwmLoop:
    DoServoCount ; 4th Precycle
    NO_OP 1
    ; ?  ¨áª«î祭¨¥¬ á«¥¤ãîé¨å ª®¬ ­¤, 横« á®áâ ¢«ï¥â 24 â ªâ 
    PwmEntry1:
    call DoPwmPulse
    DoServoCount ;
    DoRunBit
    DoServoCount ; 1st Precycle
    movwf PwmCount ; From DoRunBIt
    btfsc GPIO, ServoBit
    goto ServoIsHigh
    btfsc Flags, PriorServoBit
    goto EndOfPulse
    DoServoCount ; 2nd Precycle
    MainPwmEntry:
    nop
    btfsc Flags, BattLow ; Sneak this in here
    goto BattLoShutdown
    goto MainPwmLoop
    ServoIsHigh:
    bsf Flags, PriorServoBit
    nop
    DoServoCount ; 3rd Precycle, different path
    nop
    btfsc Flags, BattLow ; Sneak this in here
    goto BattLoShutdown ; If batt was ever low, quit now
    goto MainPwmLoop
    ; ============================================================================
    ; Žá­®¢­ ï ¯®á«¥¤®¢ â¥«ì­®áâì ¤¥©á⢨©:
    ; DoPwmPulse
    ; 2*nop
    ; DoRunBit ¨ á®åà ­¥­¨¥ १ã«ìâ â 
    ; 17*nop
    ; DoPwmPulse ¨ â.¤.
    ;
    ; ?sáï ¯®«¥§­ ï à ¡®â  ¤¥« ¥âáï ¯ã⥬ § ¬¥­ë
    ; ª®¬ ­¤ NOP ­  ­¥®¡å®¤¨¬ë¥ ¨­áâàãªæ¨¨
    ;
    EndOfPulse:
    bcf Flags, PriorServoBit
    clrwdt
    NO_OP 7
    call DoPwmPulse
    NO_OP 2
    ;
    DoRunBit
    movwf PwmCount
    movf ServoCount, W
    call ServoLookup ; 7 clocks
    movwf Command
    movwf PwmCount
    clrf ServoCount
    bcf STATUS, PA0
    NO_OP 4
    call DoPwmPulse
    NO_OP 2
    ;
    DoRunBit ; (!) ?Tᯮ«ì§ãîâáï ¯ à ¬¥âàë
    ; ¯à¥¤ë¤ã饩 ª®¬ ­¤ë
    movwf PwmCount
    NO_OP 5
    btfsc Command, InvalidPulseBit
    goto MainPwmEntry
    ;
    movf Command,W
    andlw H''3F'' ; ?§¡ ¢«ï¥¬áï ®â ¡¨â  â®à¬®§ 
    movwf PwmWidth
    btfss Command, BrakeEnableBit
    goto RunningCommand
    ;
    NO_OP 4
    call DoPwmPulse
    bsf GPIO, StopBit ; ?sª«îç ¥¬ â®à¬®§
    NO_OP 1
    DoRunBit
    NO_OP 7
    goto MainPwmEntry
    RunningCommand:
    bcf GPIO, StopBit ; ?s몫îç ¥¬ â®à¬®§ (®­ ¬®¦¥â
    ; ¡ëâì 㦥 ¢ëª«î祭)
    goto PwmEntry1 ; (!) â®â ¨¬¯ã«ìá ¡ã¤¥â ¯à®¯ã饭.
    ; ?z¢¨£ â¥«ì ¢ª«îç¨âáï, ­ ç¨­ ï
    ; á® á«¥¤ãî饣®
    ; ==========================================================================
    ;  â à¥ï ᥫ  - ®áâ ­ ¢«¨¢ ¥¬ ¬®â®à
    ; ¨ ¯¥à¥å®¤¨â ¢ ¦¤ã騩 ०¨¬
    ;
    BattLoShutdown:
    bcf GPIO, RunBit
    ; WARNING - DON''T DIDDLE THE GPIO REGISTER until the RunBit settles.
    ; You may end up leaving it set!
    call DoPwmPulse ; For delay only
    bsf GPIO, StopBit ; ?sª«îç ¥¬ â®à¬®§
    nop
    goto Rearm
    ; ==========================================================================
    ; à¥®¡à §®¢ ­¨¥ ¤«¨â¥«ì­®á⨠¨¬¯ã«ìá  ¢ ª®¬ ­¤ã. ?s®§¢à é ¥â ª®¬ ­¤ã ¢ W
    ; (!) ¯® ¢®§¢à é¥­¨¨ PA0 ãáâ ­®¢«¥­ ¢ 1.
    ; PC = (PA0 << 9) | (0 << 8) | W.
    ; ?T ¡«¨æ , ª ª®â®à®© ®¡à é ¥¬ï, ¡¥à¥âáï ¨§ ä ©«  speed400.inc
    ;
    ServoLookup:
    bsf STATUS, PA0
    movwf PCL
    ; ==========================================================================
    ; ?ã­ªæ¨ï £¥­¥à æ¨¨ 1 ¨¬¯ã«ìá  o?'- . à¨ ¢ë§®¢¥, ¬®â®à ¬®¦¥â ¡ëâì ¢ª«î祭
    ; ¨«¨ ¢ëª«î祭. ?᫨ ¢ëª«î祭, ®­ ­¥ ¡ã¤¥â ¢ª«î祭. , ¥á«¨ ¬®â®à à ¡®â «,
    ; ®â ¢ëª«îç¥âáï ª ª ⮫쪮 áç¥â稪 PWM_Count ®¡­ã«¨âáï.
    ;
    DoPwmPulse:
    PWM_LOOP_COUNT SET PWM_Period - PWM_Start
    WHILE PWM_LOOP_COUNT
    btfss GPIO, BattOkBit
    bsf Flags, BattLow
    DoServoCount ; 2 ª®¬ ­¤ë
    decf PwmCount,F
    skpnz
    bcf GPIO, RunBit
    PWM_LOOP_COUNT SET PWM_LOOP_COUNT - 1
    ENDW
    retlw 0
    ; ==========================================================================
    ; ?T ¡«¨æ  ¯à¥®¡à §®¢­¨ï ¤«¨â¥«ì­®á⨠¨á¯ã«ìá  ¢ ª®¬ ­¤ã.
    ; ?­¤¥ªá - 0..255, ª®â®àë© ¯à¥¤áâ ¢«ï¥â ᮡ®© ¬« ¤è¨¥ 8 ¡¨â ¤«¨â¥«ì­®áâ¨
    ; ¨¬¯ã«ìá , ¨§¬¥àï­­®© á 7-¬ªá è £®¬.
    ;   ¢ë室¥:
    ; PWM_width | ((invalid width)? 0x80 : 0) | ((Brake width range)? 0x40 : 0)
    ; PWM_width ­ å®¤¨âáï ¢ ¤¨ ¯¯ §®­¥ ®â 0 ¤® 63, £¤¥ 0 ®§­ ç ¥â
    ; ¢ëª«î祭¨¥ ¤¢¨£ â¥«ï
    ;
    ORG H''200'' ; Low part of second page (PA0==1)
    INCLUDE "speed400.inc" ;
    END
    Bay, bay nữa, bay mãi
  8. chubengocnghech

    chubengocnghech Thành viên mới

    Tham gia ngày:
    30/11/2003
    Bài viết:
    167
    Đã được thích:
    0
    à em quên nữa mail của em là thinhrangkhinh@yahoo.com
  9. chubengocnghech

    chubengocnghech Thành viên mới

    Tham gia ngày:
    30/11/2003
    Bài viết:
    167
    Đã được thích:
    0
    à em quên nữa mail của em là thinhrangkhinh@yahoo.com
  10. Pham_Gia_Vinh

    Pham_Gia_Vinh Thành viên mới

    Tham gia ngày:
    29/02/2004
    Bài viết:
    364
    Đã được thích:
    0
    Khiếp quá thế sợ mọi người copy về bị lỗi mất. Tốt nhất ai cần thì mình mail cho. Nếu ở nhà không tìm được 12C508 thì mình sẽ post cái khác dùng 16C84 chắc ở nhà có.
    Bay, bay nữa, bay mãi

Chia sẻ trang này