⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbd12.lis

📁 1.实现单片机驱动USBD12的固件
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01F4           ;       EP2_PACKET_SIZE,0x00,                                           //端点最大包的大小,= 0040H
 01F4           ;       10                                                                                      //批量传输时该设备无效
 01F4           ; },
 01F4           ; //端点2输出
 01F4           ; {
 01F4           ;       sizeof(USB_ENDPOINT_DESCRIPTOR),                        //端点描述符长度,= 07H
 01F4           ;       USB_ENDPOINT_DESCRIPTOR_TYPE,                           //端点描述符类型,= 05H
 01F4           ;       0x2,                                                                            //端点2 IN      
 01F4           ;       USB_ENDPOINT_TYPE_BULK,                                         //批量传输,= 02H
 01F4           ;       EP2_PACKET_SIZE,0x00,                                           //端点最大包的大小,= 0040H
 01F4           ;       10                                                                                      //批量传输时该设备无效
 01F4           ; } 
 01F4           ; };
 01F4           ; //#pragma data:data
 01F4           ; //#pragma data:code
 01F4           ; void (*StandardDeviceRequest[])(void)=
 01F4           ; {
 01F4           ;       Get_status,
 01F4           ;       Clr_feature,
 01F4           ;       Reserved,
 01F4           ;       Set_feature,
 01F4           ;       Reserved,
 01F4           ;       Set_addr,
 01F4           ;       Get_descriptor,
 01F4           ;       Reserved,
 01F4           ;       Get_config,
 01F4           ;       Set_config,
 01F4           ;       Get_interface,
 01F4           ;       Set_interface,
 01F4           ;       Reserved,
 01F4           ;       Reserved,
 01F4           ;       Reserved,
 01F4           ;       Reserved
 01F4           ; };
 01F4           ; //#pragma data:data
 01F4           ; /*******************************************
 01F4           ; 函数名称: D12_init
 01F4           ; 功    能: 初始化D12接口(包括数据接口和控制接口)
 01F4           ; 参    数: 无
 01F4           ; 返回值  : 无
 01F4           ; /********************************************/
 01F4           ; void D12_init(void)
 01F4           ; {
 01F4                   .dbline 228
 01F4           ;  DDRA|=BIT(CSUSB);                            //USB的573锁存端设置为输出                        
 01F4 D79A              sbi 0x1a,7
 01F6                   .dbline 229
 01F6           ;  PORTA&=~BIT(CSUSB);                  //573锁存端关闭
 01F6 DF98              cbi 0x1b,7
 01F8                   .dbline 230
 01F8           ;  USBDAT_DDR|=0xFF;                            //数据端口设置为输出
 01F8 87B3              in R24,0x17
 01FA 8F6F              ori R24,255
 01FC 87BB              out 0x17,R24
 01FE                   .dbline 231
 01FE           ;  USBCTL_DDR|=BIT(WR_N)|BIT(RD_N)|BIT(C_D)|BIT(D12_CS);//控制引脚设置为输出
 01FE 81B3              in R24,0x11
 0200 806F              ori R24,240
 0202 81BB              out 0x11,R24
 0204                   .dbline 232
 0204           ;  USBCTL_DDR&=~BIT(D12_INT);                                                     //中断引脚设置为输入                            
 0204 8B98              cbi 0x11,3
 0206                   .dbline 233
 0206           ;  USBCTL_PORT|=BIT(D12_INT);                                                     //上拉使能
 0206 939A              sbi 0x12,3
 0208                   .dbline 234
 0208           ;  USBCTL_PORT|=BIT(WR_N)|BIT(RD_N)|BIT(D12_CS);                  //控制引脚无效
 0208 82B3              in R24,0x12
 020A 806B              ori R24,176
 020C 82BB              out 0x12,R24
 020E                   .dbline 235
 020E           ;  PORTA|=BIT(CSUSB);                                                                     //送出控制信号
 020E DF9A              sbi 0x1b,7
 0210                   .dbline 237
 0210           ;  
 0210           ;  SREG|=BIT(GLOBAL);                                   //使能全局中断
 0210 7894              bset 7
 0212                   .dbline 238
 0212           ;  MCUCR&=0xF3;                                         //外部中断1采用低电平触发
 0212 85B7              in R24,0x35
 0214 837F              andi R24,243
 0216 85BF              out 0x35,R24
 0218                   .dbline 239
 0218           ;  GICR|=BIT(EXTINT1);  //使能外部中断0和1  
 0218 8BB7              in R24,0x3b
 021A 8068              ori R24,128
 021C 8BBF              out 0x3b,R24
 021E                   .dbline 241
 021E           ;  
 021E           ;  USBCTL_PORT&=~BIT(D12_CS);
 021E 9798              cbi 0x12,7
 0220                   .dbline -2
 0220                   .dbline 242
 0220           ; }
 0220           L44:
 0220                   .dbline 0 ; func end
 0220 0895              ret
 0222                   .dbend
 0222                   .dbfunc e OutB _OutB fV
 0222           ;            dat -> R20
 0222           ;            cmd -> R22
                        .even
 0222           _OutB::
 0222 0E940000          xcall push_gset2
 0226 422F              mov R20,R18
 0228 602F              mov R22,R16
 022A                   .dbline -1
 022A                   .dbline 251
 022A           ; /*******************************************
 022A           ; 函数名称: OutB
 022A           ; 功    能: 向D12写入一个字节数据或者命令
 022A           ; 参    数: cmd--命令标识(为CMD是命令,为DAT是数据)
 022A           ;                 dat--要写入的字节数据
 022A           ; 返回值  : 无
 022A           ; /********************************************/
 022A           ; void OutB(uchar cmd,uchar dat)
 022A           ; {
 022A                   .dbline 252
 022A           ;  if(cmd==CMD)
 022A 6130              cpi R22,1
 022C 71F4              brne L46
 022E                   .dbline 253
 022E           ;  {
 022E                   .dbline 254
 022E           ;   USBCTL_PORT|=BIT(C_D); 
 022E 969A              sbi 0x12,6
 0230                   .dbline 255
 0230           ;   Delayus(5);
 0230 05E0              ldi R16,5
 0232 10E0              ldi R17,0
 0234 E5DE              xcall _Delayus
 0236                   .dbline 256
 0236           ;   USBCTL_PORT&=~BIT(WR_N);
 0236 9498              cbi 0x12,4
 0238                   .dbline 257
 0238           ;   Delayus(5);
 0238 05E0              ldi R16,5
 023A 10E0              ldi R17,0
 023C E1DE              xcall _Delayus
 023E                   .dbline 258
 023E           ;   USBDAT_PORT=dat;  
 023E 48BB              out 0x18,R20
 0240                   .dbline 259
 0240           ;   Delayus(5);
 0240 05E0              ldi R16,5
 0242 10E0              ldi R17,0
 0244 DDDE              xcall _Delayus
 0246                   .dbline 260
 0246           ;   USBCTL_PORT|=BIT(WR_N);
 0246 949A              sbi 0x12,4
 0248                   .dbline 261
 0248           ;  }
 0248 0DC0              xjmp L47
 024A           L46:
 024A                   .dbline 263
 024A                   .dbline 264
 024A 9698              cbi 0x12,6
 024C                   .dbline 265
 024C 01E0              ldi R16,1
 024E 10E0              ldi R17,0
 0250 D7DE              xcall _Delayus
 0252                   .dbline 266
 0252 9498              cbi 0x12,4
 0254                   .dbline 267
 0254 01E0              ldi R16,1
 0256 10E0              ldi R17,0
 0258 D3DE              xcall _Delayus
 025A                   .dbline 268
 025A 48BB              out 0x18,R20
 025C                   .dbline 269
 025C 01E0              ldi R16,1
 025E 10E0              ldi R17,0
 0260 CFDE              xcall _Delayus
 0262                   .dbline 270
 0262 949A              sbi 0x12,4
 0264                   .dbline 271
 0264           L47:
 0264                   .dbline -2
 0264                   .dbline 272
 0264           ;  else
 0264           ;  {
 0264           ;   USBCTL_PORT&=~BIT(C_D);
 0264           ;   Delayus(1);
 0264           ;   USBCTL_PORT&=~BIT(WR_N);
 0264           ;   Delayus(1);
 0264           ;   USBDAT_PORT=dat;  
 0264           ;   Delayus(1);
 0264           ;   USBCTL_PORT|=BIT(WR_N);
 0264           ;  }
 0264           ; }
 0264           L45:
 0264 0E940000          xcall pop_gset2
 0268                   .dbline 0 ; func end
 0268 0895              ret
 026A                   .dbsym r dat 20 c
 026A                   .dbsym r cmd 22 c
 026A                   .dbend
 026A                   .dbfunc e InB _InB fc
 026A           ;            dat -> R20
                        .even
 026A           _InB::
 026A 0E940000          xcall push_gset1
 026E                   .dbline -1
 026E                   .dbline 280
 026E           ; /*******************************************
 026E           ; 函数名称: InB
 026E           ; 功    能: 从D12读出一个字节数据
 026E           ; 参    数: 无
 026E           ; 返回值  : dat--读出的字节数据
 026E           ; /********************************************/
 026E           ; uchar InB(void)
 026E           ; { 
 026E                   .dbline 282
 026E           ;   uchar dat;
 026E           ;   USBDAT_DDR=0x00;
 026E 2224              clr R2
 0270 27BA              out 0x17,R2
 0272                   .dbline 283
 0272           ;   USBDAT_PORT=0xFF;
 0272 8FEF              ldi R24,255
 0274 88BB              out 0x18,R24
 0276                   .dbline 284
 0276           ;   USBCTL_PORT&=~BIT(C_D);
 0276 9698              cbi 0x12,6
 0278                   .dbline 285
 0278           ;   Delayus(1);
 0278 01E0              ldi R16,1
 027A 10E0              ldi R17,0
 027C C1DE              xcall _Delayus
 027E                   .dbline 286
 027E           ;   USBCTL_PORT&=~BIT(RD_N);
 027E 9598              cbi 0x12,5
 0280                   .dbline 287
 0280           ;   Delayus(1);
 0280 01E0              ldi R16,1
 0282 10E0              ldi R17,0
 0284 BDDE              xcall _Delayus
 0286                   .dbline 288
 0286           ;   dat=USBDAT_PIN;
 0286 46B3              in R20,0x16
 0288                   .dbline 289
 0288           ;   Delayus(1);
 0288 01E0              ldi R16,1
 028A 10E0              ldi R17,0
 028C B9DE              xcall _Delayus
 028E                   .dbline 290
 028E           ;   USBCTL_PORT|=BIT(RD_N);
 028E 959A              sbi 0x12,5
 0290                   .dbline 291
 0290           ;   USBDAT_DDR=0xFF;
 0290 8FEF              ldi R24,255
 0292 87BB              out 0x17,R24
 0294                   .dbline 292
 0294           ;   return dat;
 0294 042F              mov R16,R20
 0296                   .dbline -2
 0296           L48:
 0296 0E940000          xcall pop_gset1
 029A                   .dbline 0 ; func end
 029A 0895              ret
 029C                   .dbsym r dat 20 c
 029C                   .dbend
 029C                   .dbfunc e Set_addren _Set_addren fV
 029C           ;         enable -> R22
 029C           ;           addr -> R20
                        .even
 029C           _Set_addren::
 029C 0E940000          xcall push_gset2
 02A0 622F              mov R22,R18
 02A2 402F              mov R20,R16
 02A4                   .dbline -1
 02A4                   .dbline 302
 02A4           ; }
 02A4           ; /*******************************************
 02A4           ; 函数名称: Set_addren
 02A4           ; 功    能: 设置地址/使能----------------------------
 02A4           ; 参    数: addr--设置的地址
 02A4           ;                 enable--使能标志(为1使能,为0禁止)
 02A4           ; 返回值  : 无
 02A4           ; /********************************************/
 02A4           ; void Set_addren(uchar addr, uchar enable)
 02A4           ; {
 02A4                   .dbline 303
 02A4           ;       if(USB_FLAG.in

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -