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

📄 ch375ev0.lis

📁 使用ATMEGA128加CH375对U盘扇区进行读写,本程序在ICCAVR上调试,并在相应硬件电路上调试通过!供参考用
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 040C           ;                                              col+=16;
 040C           ;                                     }
 040C           ;                                 }*/
 040C           ;                               mBufferPoint++;
 040C           ;                               mLength--;
 040C           ;                       }
 040C           ;               /*      do { //对于C51,这个DO+WHILE结构比上面的WHILE效率高,速度快
 040C           ;                               CH375_WR_DAT_PORT( DATA_BUFFER[mLength] );
 040C           ;                               mBufferPoint++;
 040C           ;                       } while ( --mLength );*/
 040C           ;                       CH375_WR_CMD_PORT( CMD_DISK_WR_GO );  /* 继续执行USB存储器的写操作 */
 040C 07E5              ldi R16,87
 040E 1ADE              xcall _CH375_WR_CMD_PORT
 0410                   .dbline 331
 0410           ;               }
 0410                   .dbline 332
 0410           ;               else break;  /* 返回错误状态 */
 0410           L92:
 0410                   .dbline 333
 0410           L88:
 0410                   .dbline 305
 0410 6150              subi R22,1
 0412 7040              sbci R23,0
 0414           L90:
 0414                   .dbline 305
 0414 6030              cpi R22,0
 0416 6707              cpc R22,R23
 0418 01F7              brne L87
 041A           X9:
 041A           L89:
 041A                   .dbline 334
 041A           ;       }
 041A           ;       if ( mBlockCount == 0 ) {
 041A 6030              cpi R22,0
 041C 6707              cpc R22,R23
 041E 31F4              brne L96
 0420           X10:
 0420                   .dbline 334
 0420                   .dbline 335
 0420           ;               mIntStatus = mWaitInterrupt( );  /* 等待中断并获取状态 */
 0420 4DDE              xcall _mWaitInterrupt
 0422 402F              mov R20,R16
 0424                   .dbline 336
 0424           ;               if ( mIntStatus == USB_INT_SUCCESS ) return( 0 );  /* 操作成功 */
 0424 0431              cpi R16,20
 0426 11F4              brne L98
 0428                   .dbline 336
 0428 0027              clr R16
 042A 02C0              xjmp L86
 042C           L98:
 042C                   .dbline 337
 042C           ;       }
 042C           L96:
 042C                   .dbline 339
 042C           ; //    if ( mIntStatus == USB_INT_DISCONNECT ) return( mIntStatus );  /* U盘断开 */
 042C           ;       mClearError( );  /* 清除U盘错误以便重试 */
 042C F9DE              xcall _mClearError
 042E                   .dbline 340
 042E           ;       return( mIntStatus );  /* 操作失败 */
 042E 042F              mov R16,R20
 0430                   .dbline -2
 0430           L86:
 0430 0E940000          xcall pop_gset4
 0434 2496              adiw R28,4
 0436                   .dbline 0 ; func end
 0436 0895              ret
 0438                   .dbsym r col 22 i
 0438                   .dbsym r j 22 i
 0438                   .dbsym r mBlockCount 22 i
 0438                   .dbsym r mIntStatus 20 c
 0438                   .dbsym r mBufferPoint 10 pc
 0438                   .dbsym r mLength 12 c
 0438                   .dbsym l iSectorCount 12 c
 0438                   .dbsym l iLbaStart 8 l
 0438                   .dbend
 0438                   .dbfunc e mInitSTDIO _mInitSTDIO fV
                        .even
 0438           _mInitSTDIO::
 0438                   .dbline -1
 0438                   .dbline 356
 0438           ; }
 0438           ; 
 0438           ; struct _HD_MBR_DPT {
 0438           ;       unsigned char   PartState;
 0438           ;       unsigned char   StartHead;
 0438           ;       unsigned int    StartSec;
 0438           ;       unsigned char   PartType;
 0438           ;       unsigned char   EndHead;
 0438           ;       unsigned int    EndSec;
 0438           ;       unsigned long   StartSector;
 0438           ;       unsigned long   TotalSector;
 0438           ; };
 0438           ; 
 0438           ; /* 为printf和getkey输入输出初始化串口 */
 0438           ; void  mInitSTDIO( )
 0438           ; {
 0438                   .dbline 364
 0438           ; /*    SCON = 0x50;
 0438           ;       PCON = 0x80;
 0438           ;       TMOD = 0x20;
 0438           ;       TH1 = 0xf3;  // 24MHz晶振, 9600bps//
 0438           ;       TR1 = 1;
 0438           ;       TI = 1;*/
 0438           ; 
 0438           ;  UCSR1B = 0x00; //disable while setting baud rate
 0438 2224              clr R2
 043A 20929A00          sts 154,R2
 043E                   .dbline 365
 043E           ;  UCSR1A = 0x00;
 043E 20929B00          sts 155,R2
 0442                   .dbline 366
 0442           ;  UCSR1C = 0x06;
 0442 86E0              ldi R24,6
 0444 80939D00          sts 157,R24
 0448                   .dbline 367
 0448           ;  UBRR1L = 0x67; //set baud rate lo
 0448 87E6              ldi R24,103
 044A 80939900          sts 153,R24
 044E                   .dbline 368
 044E           ;  UBRR1H = 0x00; //set baud rate hi
 044E 20929800          sts 152,R2
 0452                   .dbline 369
 0452           ;  UCSR1B = 0x1C; //1c
 0452 8CE1              ldi R24,28
 0454 80939A00          sts 154,R24
 0458                   .dbline -2
 0458           L100:
 0458                   .dbline 0 ; func end
 0458 0895              ret
 045A                   .dbend
 045A                   .dbfunc e main _main fI
 045A           ;              c -> R10
 045A           ;              i -> R12,R13
 045A           ;     mIntStatus -> R14
                        .even
 045A           _main::
 045A 2297              sbiw R28,2
 045C                   .dbline -1
 045C                   .dbline 373
 045C           ;  
 045C           ; }
 045C           ; 
 045C           ; main() {
 045C                   .dbline 375
 045C           ;       unsigned char   c, mIntStatus;
 045C           ;       unsigned int i=0;
 045C CC24              clr R12
 045E DD24              clr R13
 0460                   .dbline 377
 0460           ; //-------------------------------------------------------
 0460           ;     init_devices();
 0460 0E940000          xcall _init_devices
 0464                   .dbline 379
 0464           ;     //-----------------------------------------------------------------------------
 0464           ;     CH375_PORT_INIT(); //首先将串口初始化为9600 因为CH375默认的波特率是9600
 0464 E2D0              xcall _CH375_PORT_INIT
 0466                   .dbline 380
 0466           ;     SET_BAUDRATE();  //设置CH375的串口通讯波特率 57600
 0466 F2D0              xcall _SET_BAUDRATE
 0468                   .dbline 381
 0468           ;     CH375_PORT_INIT_57600();//重新调整波特率 单片机串口波特率57600
 0468 CFD0              xcall _CH375_PORT_INIT_57600
 046A                   .dbline 383
 046A           ;     //-----------------------------------------------------------------------------
 046A           ;         initLCDM();     //初始化LCD
 046A 0E940000          xcall _initLCDM
 046E                   .dbline 384
 046E           ;         CleanScreen();
 046E 0E940000          xcall _CleanScreen
 0472                   .dbline 389
 0472           ;       //Welcome_interface();  //显示欢迎界面 
 0472           ; 
 0472           ; //-------------------------------------------------------
 0472           ;       
 0472           ;       LED_OUT_ACT( );  /* 开机后LED亮一下以示工作 */
 0472                   .dbline 389
 0472 80916500          lds R24,101
 0476 8F7E              andi R24,239
 0478 80936500          sts 101,R24
 047C                   .dbline 389
 047C                   .dbline 389
 047C                   .dbline 390
 047C           ;       mDelaymS( 100 );  /* 延时100毫秒 */
 047C 04E6              ldi R16,100
 047E CFDD              xcall _mDelaymS
 0480                   .dbline 391
 0480           ;       LED_OUT_INACT( );
 0480                   .dbline 391
 0480 80916500          lds R24,101
 0484 8061              ori R24,16
 0486 80936500          sts 101,R24
 048A                   .dbline 391
 048A                   .dbline 391
 048A                   .dbline 394
 048A           ;       //mInitSTDIO( );
 048A           ;   //  printf( "Start\n" );
 048A           ;   ShowText(10,5,"开始");
 048A 80E0              ldi R24,<L102
 048C 90E0              ldi R25,>L102
 048E 9983              std y+1,R25
 0490 8883              std y+0,R24
 0492 25E0              ldi R18,5
 0494 30E0              ldi R19,0
 0496 0AE0              ldi R16,10
 0498 10E0              ldi R17,0
 049A 0E940000          xcall _ShowText
 049E                   .dbline 395
 049E           ;       c = mCH375Init( );  /* 初始化CH375 */
 049E 23DE              xcall _mCH375Init
 04A0 A02E              mov R10,R16
 04A2                   .dbline 413
 04A2           ;       //if ( c );// printf( "Error @CH375Init\n" );
 04A2           ;       /*      {
 04A2           ;                       ShowText(10,21,"初始化错误!");
 04A2           ;           while ( 1 ) 
 04A2           ;            {
 04A2           ;                    LED_OUT_ACT( );  //LED闪烁 
 04A2           ;                    mDelaymS( 80 );
 04A2           ;                    LED_OUT_INACT( );
 04A2           ;                    mDelaymS( 80 );
 04A2           ;            }
 04A2           ;               } */
 04A2           ;       //printf( "Insert USB disk\n" );
 04A2           ;       
 04A2           ;       
 04A2           ; 
 04A2           ; 
 04A2           ;       
 04A2           ;       ShowText(10,21,"等待插入U盘......");
 04A2 80E0              ldi R24,<L103
 04A4 90E0              ldi R25,>L103
 04A6 9983              std y+1,R25
 04A8 8883              std y+0,R24
 04AA 25E1              ldi R18,21
 04AC 30E0              ldi R19,0
 04AE 0AE0              ldi R16,10
 04B0 10E0              ldi R17,0
 04B2 0E940000          xcall _ShowText
 04B6           L104:
 04B6                   .dbline 414
 04B6           ;       do {  /* 等待U盘连接 */
 04B6                   .dbline 415
 04B6           ;               mIntStatus = mWaitInterrupt( );  /* 等待中断并获取状态 */
 04B6 02DE              xcall _mWaitInterrupt
 04B8 E02E              mov R14,R16
 04BA                   .dbline 416
 04BA           L105:
 04BA                   .dbline 416
 04BA           ;       } while ( mIntStatus != USB_INT_CONNECT );  /* U盘没有连接或者已经拔出 */
 04BA 8E2D              mov R24,R14
 04BC 8531              cpi R24,21
 04BE D9F7              brne L104
 04C0                   .dbline 417
 04C0           ;       mDelaymS( 200 );  /* 延时等待U盘进入正常工作状态 */
 04C0 08EC              ldi R16,200
 04C2 ADDD              xcall _mDelaymS
 04C4                   .dbline 419
 04C4           ;       //printf( "InitDisk\n" ); 
 04C4           ;       ShowText(10,37,"已插入U盘......");
 04C4 80E0              ldi R24,<L107
 04C6 90E0              ldi R25,>L107
 04C8 9983              std y+1,R25
 04CA 8883              std y+0,R24
 04CC 25E2              ldi R18,37
 04CE 30E0              ldi R19,0
 04D0 0AE0              ldi R16,10
 04D2 10E0              ldi R17,0
 04D4 0E940000          xcall _ShowText
 04D8           L108:
 04D8                   .dbline 421
 04D8           ;       loop:
 04D8           ;       c = mInitDisk( );  /* 初始化U盘,实际是识别U盘的类型,不影响U盘中的数据,在所有读写操作之前必须进行此步骤 */
 04D8 39DE              xcall _mInitDisk
 04DA A02E              mov R10,R16
 04DC                   .dbline 422
 04DC           ;       if ( c )// printf( "Error @InitDisk, %02X\n", c );
 04DC 0023              tst R16
 04DE D1F0              breq L109
 04E0                   .dbline 423
 04E0           ;               {
 04E0                   .dbline 424
 04E0           ;                  ShowText(10,53,"初始化U盘错误");
 04E0 80E0              ldi R24,<L111
 04E2 90E0              ldi R25,>L111
 04E4 9983              std y+1,R25
 04E6 8883              std y+0,R24
 04E8 25E3              ldi R18,53
 04EA 30E0              ldi R19,0
 04EC 0AE0              ldi R16,10
 04EE 10E0              ldi R17,0
 04F0 0E940000          xcall _ShowText
 04F4 0EC0              xjmp L113
 04F6           L112:
 04F6                   .dbline 426
 04F6                

⌨️ 快捷键说明

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