• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






請大家幫我看一下,這程式那裡錯了
#1
新會員
新會員


查看用戶資訊
這是一個用pic16f84去模擬鍵盤傳送按鍵值的程式(空白鍵連點)

我本來不想寫的,可是我朋友一直拿鍵盤來叫我幫他改空白鍵連點

(他們在玩奇蹟online遊戲一個報一個,改到我都快手軟了)

逼不得已才想說用這個變通的方法試看看

我是照一個老美的程式下去改的,組譯ok可是run不起來

原始網頁在這
http://panda.cs.ndsu.nodak.edu/%7Each ... icro/code/ps2/Device.html



;---------------------------------------------------------------------;------------------------
; HEADER:
;---------------------------------------------------------------------------------------------
TITLE "KEYBOARD PLUG"
SUBTITLE "By paul tseng"
LIST P=16F84A
INCLUDE "p16f84A.inc"
RADIX DEC
ERRORLEVEL -224, 1
__CONFIG _CP_OFF & _WDT_OFF & _RC_OSC


;---------------------------------------------------------------------------------------------
; DEFINES:
;---------------------------------------------------------------------------------------------
#DEFINE DATA PORTB, 3
#DEFINE CLOCK PORTB, 2
#DEFINE KEY PORTB, 1
#DEFINE LED PORTB, 0

;---------------------------------------------------------------------------------------------
; RAM ALLOCATION:
;---------------------------------------------------------------------------------------------
cblock 0x0c
TEMP0
RECEIVE
PARITY
COUNTER

endc

org 0x000
goto START
;--------------------------------------------------------------------------------
;Required Routines & Macros:
;---------------------------------------------------------------------------------------------
; MACROS:
;---------------------------------------------------------------------------------------------
delay macro Time ;Delay "Cycles" instruction cycles
if (Time==1)
nop
exitm
endif
if (Time==2)
goto $ + 1
exitm
endif
if (Time==3)
nop
goto $ + 1
exitm
endif
if (Time==4)
goto $ + 1
goto $ + 1
exitm
endif
if (Time==5)
goto $ + 1
goto $ + 1
nop
exitm
endif
if (Time==6)
goto $ + 1
goto $ + 1
goto $ + 1
exitm
endif
if (Time==7)
goto $ + 1
goto $ + 1
goto $ + 1
nop
exitm
endif
if (Time%4==0)
movlw (Time-4)/4
call Delay_Routine
exitm
endif
if (Time%4==1)
movlw (Time-5)/4
call Delay_Routine
nop
exitm
endif
if (Time%4==2)
movlw (Time-6)/4
call Delay_Routine
goto $ + 1
exitm
endif
if (Time%4==3)
movlw (Time-7)/4
call Delay_Routine
goto $ + 1
nop
exitm
endif
endm

;---------------------------------------------------------------------------------------------
; DELAY:
;---------------------------------------------------------------------------------------------
;Delays 4w+4 cycles (including call,return, and movlw) (0=256)
Delay_Routine addlw -1 ;Precise delays used in I/O
btfss STATUS, Z
goto Delay_Routine
return
;---------------------------------------------------------------------------------------------
; START:
;---------------------------------------------------------------------------------------------
START bcf STATUS,RP0
clrf PORTB
bsf STATUS,RP0
movlw 0xF2 ;定義I/O
movwf TRISB
bsf LED ;flash LED
delay 300
bcf LED
goto CHECK_KEY


CHECK_KEY btfsc KEY
goto CHECK_KEY
delay 100
goto SINGAL_OUT


SINGAL_OUT delay 1000 ;delay 1 sec
movlw 0x29 ;空白鍵scan code
call BYTEOUT
delay 100 ;delay 100 u sec
movlw 0xF0 ;空白鍵brake code
call BYTEOUT
movlw 0x29 ;空白鍵brake code
call BYTEOUT
goto LIGHT_ON


LIGHT_ON bsf LED
delay 200
bcf LED
goto STOP_SEND


STOP_SEND btfsc KEY
goto SINGAL_OUT
delay 100
goto CHECK_KEY



;--------------------------------------------------------------------------------
;ByteOut:
;Sends a byte in w to the host. Returns 0xFE if inhibited during transmission.
;Returns 0xFF if host interrupts to send its own data.
;Returns 0x00 if byte sent successfully.
;---------------------------------------------------------------------------------------------
; OUTPUT ONE BYTE: - TIMING IS CRITICAL!!!
;---------------------------------------------------------------------------------------------
BYTEOUT movwf TEMP0
InhibitLoop btfss CLOCK ;Test for inhibit
goto InhibitLoop
delay 50
btfss CLOCK
goto InhibitLoop
btfss DATA ;Check for request-to-send
retlw 0xFF
clrf PARITY
movlw 0x08
movwf COUNTER
movlw 0x00
call BitOut ;Start bit (0)
btfss CLOCK ;Test for inhibit
goto ByteOutEnd
delay 4
ByteOutLoop movf TEMP0, w
xorwf PARITY, f
call BitOut ;Data bits
btfss CLOCK ;Test for inhibit
goto ByteOutEnd
rrf TEMP0, f
decfsz COUNTER, f
goto ByteOutLoop
delay 2
comf PARITY, w
call BitOut ;Parity bit
btfss CLOCK ;Test for inhibit
goto ByteOutEnd
delay 5
movlw 0xFF
call BitOut ;Stop bit (1)
delay 48
retlw 0x00

ByteOutEnd bsf STATUS, RP0
bsf DATA
bsf CLOCK
bcf STATUS, RP0
retlw 0xFE

BitOut bsf STATUS, RP0
andlw 0x01
btfss STATUS, Z
bsf DATA
btfsc STATUS, Z
bcf DATA
delay 21
bcf CLOCK
delay 45
bsf CLOCK
bcf STATUS, RP0
delay 5
return

end

發表於: 2005/1/4 17:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------