📄 usb.asm
字号:
*
.mmregs
.include constant.inc
.include c54.inc
.def usb_read
.ref sensor_map
.ref io_map,page
.ref usbbuf,BUFFER
.ref IC_COLD_RST,COM_IC
.ref select_a,select_b
.sect "progsys"
*********************** usb_read *********************
usb_read:
PSHM AL
PSHM AH
PSHM AG
PSHM AR2
PSHM AR3
* b write_card
PORTR USB_COMMAND,*(io_map)
ANDM #0x03,*(io_map)
CMPM *(io_map),#0
nop
nop
XC 2,TC
B reset_card ;复位卡子程序
CMPM *(io_map),#2
nop
nop
XC 2,TC
B write_card ;向卡写命令子程序
CMPM *(io_map),#3
nop
nop
XC 2,TC
B select_card ;选择A卡或B卡
********************************************************
*采集指纹图象子程序:
stm #(600-1),BRC ;延时400 * 10000 *10ns=40ms
rptb delay-1
rpt #10000
nop
delay: nop
*RAH=0 ;设置图象区域
ST Sensor_RAH,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #0,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*RAL=22
ST Sensor_RAL,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #22,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*CAL=0
ST Sensor_CAL,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #0,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*REH=1
ST Sensor_REH,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #1,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*REL=21
ST Sensor_REL,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #21,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*CEL=255
ST Sensor_CEL,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #255,*(sensor_map)
PORTW *(sensor_map),Sensor_data
RPT #3000
NOP
*mbf200_P1=1 LED=1
ST Sensor_CTRLC,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #0x41,*(sensor_map)
PORTW *(sensor_map),Sensor_data
*CTRLA=0x04 开始采集:256*256
ST Sensor_CTRLA,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #0x04,*(sensor_map)
PORTW *(sensor_map),Sensor_data
STM #(256-1),AR3
finger_begin:
RPT #(280+1280) ;(280+1280)*10ns行等待时间,共256行
NOP
STM #(256-1), BRC
RPTB end_line-1
PORTR Sensor_data,*(sensor_map)
ANDM #0xff,*(sensor_map)
next:
PORTR #(USB_STATUS+2),*(io_map)
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B next
PORTW *(sensor_map),#(USB_DATA+2)
RPT #(60-1) ;60*10ns点等待时间共256*256点
NOP
end_line:
nop
BANZ finger_begin,*AR3-
nop
ST Sensor_CTRLC,*(sensor_map)
PORTW *(sensor_map),Sensor_index
ST #0x40,*(sensor_map)
PORTW *(sensor_map),Sensor_data
B usb_exit
*********************************************************
reset_card:
CALL IC_COLD_RST ;调用复位卡函数
MVMD AR7,*(usbbuf) ;返回数据的长度
STM #(usbbuf+1),AR2
STM #BUFFER,AR3 ;返回数据的起始地址
RPT #(18-1)
MVDD *AR3+,*AR2+
STM #usbbuf,AR2 ;usb发送缓冲区首地址
STM #(512-1),AR3
reset_card_1:
PORTR #(USB_STATUS+3),*(io_map) ;usb发送用端点8
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B reset_card_1
PORTW *AR2+,#(USB_DATA+3)
BANZ reset_card_1,*AR3-
B usb_exit
*********************************************************
write_card: ;向卡中写命令
STM #usbbuf,AR2
STM #(512-1),AR3
RPTZ A, #(1024-1) ;清接收缓冲区
STL A,*AR2+
STM #usbbuf,AR2
write_card_1:
PORTR #(USB_STATUS+1),*(io_map) ;接收usb数据用端点4,out
BITF *(io_map),0x02
BC write_card_1,NTC
PORTR #(USB_DATA+1) ,*AR2
ANDM #0xff,*AR2+
BANZ write_card_1,*AR3-
STM #(usbbuf+1),AR7 ;写命令到卡中
CALL COM_IC
*-------------------------------------------------------
*通过USB 端点8把数据返回到pc机中。
ST #2,*(usbbuf) ;返回数据的长度
STM #(usbbuf+1),AR2
STM #BUFFER,AR3 ;返回数据的起始地址
RPT #(18-1)
MVDD *AR3+,*AR2+
STM #usbbuf,AR2 ;usb发送缓冲区首地址
STM #(512-1),AR3
write_card_2:
PORTR #(USB_STATUS+3),*(io_map) ;usb发送用端点8
ANDM #0x01,*(io_map)
CMPM *(io_map),0x01
nop
nop
XC 2,NTC
B write_card_2
PORTW *AR2+,#(USB_DATA+3)
BANZ write_card_2,*AR3-
* 发送结束
B usb_exit
*********************************************************
select_card:
STM #usbbuf,AR2
STM #(512-1),AR3
RPTZ A, #(1024-1)
STL A,*AR2+
STM #usbbuf,AR2
select_card_1:
PORTR #(USB_STATUS+1),*(io_map) ;用端点4,out
BITF *(io_map),0x02
BC select_card_1,NTC
PORTR #(USB_DATA+1) ,*AR2
ANDM #0xff,*AR2+
BANZ select_card_1,*AR3-
CMPM *(usbbuf),#0xaa
CC select_a,TC ;选择A卡
CMPM *(usbbuf),#0xbb
CC select_b,TC ;选择B卡
*********************************************************
usb_exit:
POPM AR3
POPM AR2
POPM AG
POPM AH
POPM AL
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -