📄 my63101.asm
字号:
;==start=========================
;
;本人无CYASM编译器,希望能得到您的帮助为盼。
;
;=以下为设定相关参数=======
include "63101.inc"
Data_Byte0: equ 38h
Data_Byte1: equ 39h
Data_Byte2: equ 3Ah
Data_Byte3: equ 3Bh
Data_Byte4: equ 3Ch
Data_Byte5: equ 3Dh
Data_Byte6: equ 3Eh
Data_Byte7: equ 3Fh
;
suspend_counter: equ 35h
loop_temp: equ 37h
start_send: equ 32h
temp: equ 25h
start_time: equ 21h
testbit: equ 22h
interrupt_mask: equ 20h
endp0_data_toggle:equ 23h
loop_counter: equ 24h
data_start: equ 27h
data_count: equ 28h
endpoint_stall: equ 29h
;===========================
;以下为128MS與Cext中断,可根據需要再加以设定。
;================
org 00h
jmp Reset
org 02h
jmp DoNothing_ISR
org 04h
jmp One_mSec_ISR
org 06h
jmp USB_EP0_ISR
org 08h
jmp USB_EP1_ISR
org 0Ah
jmp Reset
org 0CH
jmp GPIO_ISR
org 0Eh
jmp DoNothing_ISR
org 10h
;===========================
;中断子程序
;==========================
;未用到的中断
;==========================
DoNothing_ISR:
push A
mov A,[interrupt_mask]
ipret Global_Interrupt
;==================================
;1ms 中断
;=============================
One_mSec_ISR:
push A
iowr Watchdog
mov A,[loop_temp]
cmp A,0h
jz not_main
dec [loop_temp]
not_main:
iord USB_Status_Control
and A,01h
cmp A,0h
jz Inc_counter
iord USB_Status_Control
and A,0FEh
iowr USB_Status_Control
mov A,0h
mov [suspend_counter]
jmp Suspend_end
Inc_counter:
inc [suspend_counter]
mov A,[suspend_counter]
cmp A,03h
jnz Suspend_end
mov A,0h
mov [suspend_counter],A
iord Status_Control
or A,08h
iowr Status_Control
nop
Suspend_end:
iord USB_EP1_TX_Config
cmp A,0
jz Select
mov A,[start_send]
cmp A,01h
jnz Select
jmp send_value
send_value:
mov A,[interrupt_mask]
and A,efh
mov [interrupt_mask],A
iowr Global_Interrupt
mov A,[Data_Byte0]
mov [Endpoint1_Byte0],A
iord SUB_EP1_TX_CONFIG
and A,40h
or A,91h
;==============================
iowr USB_EP1TX_Config
Select:
mov A,[interrupt_mask]
or A,10h
mov [interrupt_mask],A
ipret Global_Interrupt
;====================
;GPIO 中断,在主程序中未使用。
;==================
GPIO_ISR:
push A
push X
pop X
mov [interrupt_mask],A
ipret Global_Interrupt
;==================
;执行端点一的中断服务程序。
;==================
USB_EP1_ISR:
push A
iord USB_EP1_TX_Config
xor A,40h
or A,91h
iowr USB_EP1_Config
mov A,[interrupt_mask]
ipret Global_Interrupt
;=============================
;电源打开重置的服务程序。
;==========================
Reset:
mov A,Endpoint_0
swap A,dsp
mov A,0ffh
iowr Port0_Data
iowr Port1_Pullup
iowr port1_Isink0
iowr port1_Isink1
iowr port1_Isink2
iowr port1_Isink3
mov A,0h
iowr Port0_Datd
iowr Port0_Interrupt
iowr Port0_Pullup
iowr Port0_Isink0
iowr Port0_Isink1
iowr Port0_Isink2
iowr Port0_Isink3
iowr Port0_Isink4
iowr Port0_Isink5
iowr Port0_Isink6
iowr Port0_Isink7
mov [Endpoint1_Byte0],A
mov [Endpoint1_Byte1],A
mov [Endpoint1_Byte2],A
mov [endpoint_stall],A
mov [remote_wakeup_status],A
mov [configuration_status],A
mov [start_send],A
iowr Watchdog
iord Status_Control
and A,USBReset
jnz Busreset
iord Status_Control
jz suspendReset
mov A,TIMER_ONLY
mov [interrupt_mask],A
iowr Global_Interrupt
WatchdogHandler:
jmp WatchdogHandler
suspendReset:
mov A,09h
iowr Status_Control
nop
jmp susspendReset
BusReset:
mov A,RunBit
iowr Status_Control
mov A, ENUMERATE_MASK
mov [interrupt_mask],A
iowr Global_Inierrupt
wait:
iord USB_EP1_TX_Config
cmp A,0
iowr Watchdog
jz wait
mov A,offh
mov [loop_temp],A
iord USB_EP1_TX_Config
;=======================================
;主程序的循环
;========================================
main:
mov A,[loop_temp]
cmp A,0ah
jnc no_set
mov A,01h
mov [start_send],A
no_set:
iowr Watchdog
nochange:
jmp main
;============================
;端点0的中断服务程序。
;=========================
USB_EP0_ISR:
push A
iord USB_EP0_RX_Status
and A,01
jz check_for_out_packet
mov A,[interrupt_mask]
and A,0F7h
mov [interrupt_mask],A
iowrGlobal_Interrupt
call StageOne
mov A,[interrupt_mask]
or A,08h
mov [interrupt_mask],A
jmp done_with_packet
check_with_packet
check_for_packet:
iord USB_EP0_RX_Status
and A,02h
jz done_with_packet
mov A,[interrupt_mask]
and A,0f7h
mov [interrupt_mask],A
iowr Global_Interrupt
push X
mov X,0
Get_Received_Data:
mov A,0
cmp A,[data_count]
jz DoneWithReceiveData
mov A,[X_eNDPOINT_0]
mov [X+Data_Byte0],A
dec [data_count]
inc X
jmp Get_Received_Data
DoneWithReceivedDa:
pop x
call Send0ByteDataPacket
done_with_packet:
mov A,[interrupt_mask]
or A,08h
mov [interrupt_mask],A
ipret Global_Interrupt
;==================END============
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -