亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.asm

?? 單片機USB接口模擬鍵盤,該程序可以控制PC機的PS/2鍵盤的NUM LOCK和SCROLL LOCK的燈,以此說明通訊正常
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
;
;  ARGUMENTS:
;
;  RETURNS:
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_bGetEPCount:
_USB_bGetEPCount:
    CMP     A, (USB_MAX_EP_NUMBER + 1) ; Range check
    JNC     .invalid_ep                ; Bail out
; Flow here to get the endpoint count
    MOV     X, A                       ; Endpoint number is the index
    MOV     A, REG[X+EP0CNT]           ; Here is the count
    AND     A, 0x1F                    ; Mask off the count
    SUB     A, 2                       ; Ours includes the two byte checksum
    JMP     .exit                      ; Go to the common exit
; Jump here for an invalid endpoint
.invalid_ep:
    MOV     A, 0                       ; Return 0 for an invalid ep
; Jump or flow here for a common exit
.exit:
    RET
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_LoadEP
;
;  DESCRIPTION:    This function loads the specified endpoint buffer
;                  with the number of bytes previously set in the count
;                  register.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:  A:X Pointer to the ram buffer containing the data to transfer
;              USB_APIEPNumber loaded with the endpoint number
;              USB_APICount loaded with the number of bytes to load
;
;  RETURNS:    NONE
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_XLoadEP:
_USB_XLoadEP:
; extern void USB_LoadEP(BYTE, BYTE*);
    CMP     [USB_APIEPNumber], (USB_MAX_EP_NUMBER + 1) ; Range check
    JNC     .exit                      ; Bail out
; Flow here to get the endpoint count
    MOV     [USB_APITemp], X           ; Use this temp as the MVI pointer

    MOV     A, [USB_APIEPNumber]       ; Get the endpoint number
    INDEX   EPREGPTR                   ; Get the address of the endpoint data register array
    MOV     X, A                       ; We are going to use index access to the register array
    
    MOV     A, [USB_APICount]          ; Get the count
    MOV     [USB_APITemp+1], A         ; Use this temp as the count
; Copy loop
.loop:
    DEC     [USB_APITemp+1]            ; Are we done?
    JC      .done                      ; Jump if we are
    MVI     A, [USB_APITemp]           ; Get the data, inc the pointer
    MOV     REG[X + 0], A              ; Store the data
    INC     X                          ; Index the next data register
    JMP     .loop                      ; Copy the next byte or finish

; Jump here when the copy is finished
.done:
    MOV     X, [USB_APIEPNumber]       ; Get the endpoint number
    MOV     A, X
    INDEX   USB_USB_EP_BIT_LOOKUP
    AND     A, [USB_EPDataToggle]
    JZ      .addcount
    MOV     A, USB_CNT_TOGGLE

.addcount:     
    OR      A, [USB_APICount]          ; Get the count
    MOV     REG[X + EP0CNT], A         ; Update the count register

    MOV     [X + USB_EndpointAPIStatus], NO_EVENT_PENDING ; Set the state

    MOV     A, REG[0xF7]  ; save GIE state
    MOV     [USB_APITemp], A  ; save GIE state
    M8C_DisableGInt
.write_again:
    MOV     REG[X + EP0MODE], USB_MODE_ACK_IN ; Enable the endpoint
    MOV     A, REG[X + EP0MODE]
    CMP     A, USB_MODE_ACK_IN
    JNZ     .write_again
    TST     [USB_APITemp], 0x01
    JZ      .exit
    M8C_EnableGInt

; Jump or flow here for a common exit
.exit:
    RET
.LITERAL
EPREGPTR:    DB    EP0DATA, EP1DATA, EP2DATA
.ENDLITERAL
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_EnableEP
;
;  DESCRIPTION:    This function enables an OUT endpoint.  It should not be
;                  called for an IN endpoint.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:      A contains the endpoint number
;
;  RETURNS:        None
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_EnableOutEP:
_USB_EnableOutEP:
 USB_EnableEP:
_USB_EnableEP:
    CMP     A, 0                       ; Can't enable EP0
    JZ      .exit                      ; Bail out
    CMP     A, (USB_MAX_EP_NUMBER + 1) ; Range check
    JNC     .exit                      ; Bail out
; Flow here to enable an endpoint        
    MOV     X, A                       ; Endpoint number is the index
    MOV     [X+USB_EndpointAPIStatus], NO_EVENT_PENDING ; For the API
    MOV     A, REG[X+EP0MODE]          ; Unlock the mode register
    MOV     REG[X+EP0MODE], USB_MODE_ACK_OUT ; Enable the endpoint
; Jump or flow here for a common exit
.exit:
    RET                                ; All done
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_DisableEP
;
;  DESCRIPTION:    This function disables an OUT endpoint.  It should not be
;                  called for an IN endpoint.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:
;
;  RETURNS:
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_DisableOutEP:
_USB_DisableOutEP:
 USB_DisableEP:
_USB_DisableEP:
    CMP     A, 0                       ; Can't disable EP0
    JZ      .exit                      ; Bail out
    CMP     A, (USB_MAX_EP_NUMBER + 1) ; Range check
    JNC     .exit                      ; Bail out
; Flow here to disable an endpoint        
    MOV     X, A                       ; Endpoint number is the index
    MOV     A, REG[X+EP0MODE]          ; Unlock the mode register
    MOV     REG[X+EP0MODE], USB_MODE_NAK_OUT ; Disable the endpoint
; Jump or flow here for a common exit
.exit:
    RET                                ; All done
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_Force
;
;  DESCRIPTION:    Force the J/K/SE0 State of D+/D-
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:     A: USB_FORCE_J
;                    USB_FORCE_K
;                    USB_FORCE_SE0
;                    USB_FORCE_NONE
;
;  RETURNS:       Nothing
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_Force:
_USB_Force:
    CMP    A, USB_FORCE_NONE           ; Are we done forcing D+/D-?
    JZ     .none                       ; Jump if we are done
; Flow here to start checking 
    CMP    A, USB_FORCE_J              ; Force J?
    JNZ    .check_k                    ; Jump if not J
; Flow here to force J
    OR     [Port_1_Data_SHADE], 0x02   ; D- = 1
    AND    [Port_1_Data_SHADE], ~(0x01); D+ = 0
    JMP    .force                      ; Go set the force register
; Jump here to check Force K
.check_k:
    CMP    A, USB_FORCE_K              ; Force K?
    JNZ    .check_se0                  ; Jump if not K
; Flow here to force K
    OR     [Port_1_Data_SHADE], 0x01   ; D+ = 1
    AND    [Port_1_Data_SHADE], ~(0x02); D- = 0
    JMP    .force                      ; Go set the force register
; Jump here to check Force SE0
.check_se0:
    CMP    A, USB_FORCE_SE0            ; Force SE0?
    JZ     .invalid                    ; Jump if not SE0
; Flow here to force SE0
    AND    [Port_1_Data_SHADE], ~(0x03); D- = 0,  D+ = 0
; Jump or flow here to enable forcing (Port bits are set in the shadow register)
.force:
    MOV    A, [Port_1_Data_SHADE]      ; Get the shadow
    MOV    REG[P1DATA], A              ; Update the port
    OR     REG[USBXCR], USB_FORCE_STATE; Enable FORCING D+/D-
    RET                                ; Exit
; Jump here to clear forcing
.none:
    AND    REG[USBXCR], ~(USB_FORCE_STATE) ; Disable FORCING D+/D-
; Jump or flow here to exit on end forcing or an invalid parameter
.invalid:
    RET                                ; Exit
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_Suspend
;
;  DESCRIPTION:    Puts the USB Transceiver into power-down mode, while
;                  maintaining the USB address assigned by the USB host. 
;                  To restore the USB Transceiver to normal operation, the
;                  USB_Resume function should be called.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:     None
;
;  RETURNS:       Nothing
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_Suspend:
_USB_Suspend:
    AND     REG[USB_ADDR], ~(USB_ADDR_ENABLE) ; Disable transceiver
    RET                                ; Exit
.ENDSECTION
;-----------------------------------------------------------------------------
;  FUNCTION NAME: USB_Resume
;
;  DESCRIPTION:    Puts the USB Transceiver into normal operation, following
;                  a call to USB_Suspend. It retains the USB address that had
;                  been assigned by the USB host.
;
;-----------------------------------------------------------------------------
;
;  ARGUMENTS:     None
;
;  RETURNS:       Nothing
;
;  SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
;  THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
.SECTION
 USB_Resume:
_USB_Resume:
    OR     REG[USB_ADDR], (USB_ADDR_ENABLE) ; Enable transceiver
    RET                                ; Exit
.ENDSECTION


;-----------------------------------------------
; Add custom application code for routines 
;-----------------------------------------------

   ;@PSoC_UserCode_BODY_1@ (Do not change this line.)
   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------

   ;---------------------------------------------------
   ; Insert your custom code above this banner
   ;---------------------------------------------------
   ;@PSoC_UserCode_END@ (Do not change this line.)

; End of File USB.asm

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频免费直播| 日韩美女啊v在线免费观看| 亚洲欧美日韩国产一区二区三区 | 欧美性三三影院| 伊人婷婷欧美激情| 91在线视频官网| 亚洲欧美激情小说另类| 色综合久久六月婷婷中文字幕| 国产精品久久久久久久蜜臀| 丁香六月综合激情| 亚洲视频免费在线| 欧美日本国产一区| 无码av免费一区二区三区试看| 精品视频免费在线| 美国一区二区三区在线播放| 精品成人一区二区三区四区| 国产v日产∨综合v精品视频| 综合色天天鬼久久鬼色| 欧美日本免费一区二区三区| 美女网站色91| 中文字幕一区二区5566日韩| 欧美视频一区二区在线观看| 日韩成人dvd| 中文字幕一区二区在线播放 | 久久超碰97中文字幕| 中文字幕精品综合| 精品视频在线免费看| 国产精品一区二区三区乱码| 一区二区在线观看不卡| 欧美mv日韩mv国产网站app| 91片黄在线观看| 久久精品免费看| 亚洲成人av中文| 亚洲欧洲成人av每日更新| 国产精品精品国产色婷婷| 欧美性生活一区| 91最新地址在线播放| 热久久国产精品| 视频一区二区不卡| 亚洲成人自拍偷拍| 国产欧美精品一区二区色综合朱莉| 一区二区三区欧美日韩| 国产精品天干天干在观线| 日韩精品一区二区三区在线播放 | 日本乱人伦一区| 91网页版在线| 91麻豆成人久久精品二区三区| 高清beeg欧美| 99久久国产综合色|国产精品| 国产美女精品在线| 国产成人综合亚洲91猫咪| 麻豆传媒一区二区三区| 久久99精品久久久久久久久久久久 | 欧美日韩久久久| 欧美色视频一区| 欧美一级电影网站| 久久久久久久综合色一本| 久久精品人人爽人人爽| 久久久久国产一区二区三区四区| 日韩欧美视频一区| 中文字幕电影一区| 成人免费视频在线观看| 亚洲一级二级在线| 奇米色777欧美一区二区| 看片的网站亚洲| 91尤物视频在线观看| 欧美日韩大陆在线| 国产日韩欧美精品一区| 亚洲丝袜美腿综合| 麻豆91精品视频| 99视频国产精品| 欧美三级在线看| 久久综合久久综合九色| 1024成人网| 美女视频黄久久| 欧美中文字幕久久| 欧美日韩一区二区不卡| 久久先锋影音av| 国产999精品久久| 欧美视频一区二区在线观看| 国产丝袜欧美中文另类| 一区二区三区鲁丝不卡| 国产精品一二三| 日韩一级片网址| 一区二区三区四区亚洲| 国产东北露脸精品视频| 欧美人伦禁忌dvd放荡欲情| 国产精品欧美一区喷水| 裸体一区二区三区| 欧美日韩中文另类| 亚洲精品菠萝久久久久久久| 粉嫩av一区二区三区在线播放 | 麻豆国产欧美一区二区三区| 成人av电影免费观看| 久久久精品免费免费| 国产精一品亚洲二区在线视频| 91精品欧美一区二区三区综合在 | 中文字幕一区二区三区乱码在线 | 亚洲欧洲美洲综合色网| 国产精品综合久久| 国产农村妇女精品| 国产精品白丝jk白祙喷水网站| 欧美成人欧美edvon| 国产米奇在线777精品观看| 久久综合久久99| 国产精品18久久久久久久久久久久 | 老司机一区二区| 国产精品视频免费看| eeuss影院一区二区三区| 亚洲欧美日韩国产成人精品影院 | 不卡视频一二三四| 国产精品毛片无遮挡高清| 粉嫩av一区二区三区在线播放| 国产精品久久99| 欧美高清hd18日本| 国产在线视频一区二区| 国产精品午夜电影| 91福利国产精品| 国产宾馆实践打屁股91| 视频一区视频二区中文| 国产精品天天摸av网| 国产欧美日本一区视频| 欧美日韩美女一区二区| 国产成人av电影在线| 亚洲精品国产一区二区精华液 | 国产精品国产成人国产三级| 欧美精选午夜久久久乱码6080| 成人国产电影网| 久久99国产精品成人| 蜜桃视频第一区免费观看| 国产亚洲1区2区3区| 日韩欧美一二区| 在线播放国产精品二区一二区四区| 国产精品影视天天线| 裸体歌舞表演一区二区| 婷婷综合另类小说色区| 一区二区在线观看视频在线观看| 国产精品对白交换视频| 久久综合久久综合亚洲| 日韩天堂在线观看| 日韩一区二区中文字幕| 欧美在线观看视频一区二区 | 色乱码一区二区三区88| 9人人澡人人爽人人精品| 成人网男人的天堂| a级精品国产片在线观看| 国产精品1区2区3区| 成人激情动漫在线观看| 日韩欧美另类在线| 4438x亚洲最大成人网| 精品视频色一区| 91精品国产色综合久久久蜜香臀| 日本精品视频一区二区三区| 9久草视频在线视频精品| 99久久久精品免费观看国产蜜| 成人av电影在线| 色美美综合视频| 欧美一级在线免费| 国产网站一区二区| 亚洲精品日韩专区silk| 爽爽淫人综合网网站| 老汉av免费一区二区三区| 极品少妇xxxx偷拍精品少妇| 精品一区二区在线视频| www..com久久爱| av电影天堂一区二区在线 | 99久久精品免费看国产| 欧美在线999| 亚洲曰韩产成在线| 青青草精品视频| 成人动漫一区二区三区| 中文字幕一区二区三区四区| 日本免费在线视频不卡一不卡二| 国产成人丝袜美腿| 91久久香蕉国产日韩欧美9色| 精品免费日韩av| 性欧美疯狂xxxxbbbb| 成人午夜电影网站| 欧美人牲a欧美精品| 亚洲日本乱码在线观看| 狠狠色丁香婷婷综合| 色8久久精品久久久久久蜜| 精品精品国产高清一毛片一天堂| 亚洲欧美日韩一区二区 | 91豆麻精品91久久久久久| 久久久久国产精品人| 久久99深爱久久99精品| 7777精品伊人久久久大香线蕉超级流畅| 日本一区二区电影| 在线一区二区三区四区| 国产视频一区二区在线观看| 黄一区二区三区| 久久久亚洲欧洲日产国码αv| 丝袜亚洲另类欧美综合| 欧美日韩电影在线播放| 一区二区三区高清| 色先锋aa成人| 青青草原综合久久大伊人精品| 欧美日本视频在线| 麻豆久久久久久久|