📄 ch375ev0.s
字号:
; TI = 1;*/
;
; UCSR1B = 0x00; //disable while setting baud rate
clr R2
sts 154,R2
.dbline 365
; UCSR1A = 0x00;
sts 155,R2
.dbline 366
; UCSR1C = 0x06;
ldi R24,6
sts 157,R24
.dbline 367
; UBRR1L = 0x67; //set baud rate lo
ldi R24,103
sts 153,R24
.dbline 368
; UBRR1H = 0x00; //set baud rate hi
sts 152,R2
.dbline 369
; UCSR1B = 0x1C; //1c
ldi R24,28
sts 154,R24
.dbline -2
L100:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fI
; c -> R10
; i -> R12,R13
; mIntStatus -> R14
.even
_main::
sbiw R28,2
.dbline -1
.dbline 373
;
; }
;
; main() {
.dbline 375
; unsigned char c, mIntStatus;
; unsigned int i=0;
clr R12
clr R13
.dbline 377
; //-------------------------------------------------------
; init_devices();
xcall _init_devices
.dbline 379
; //-----------------------------------------------------------------------------
; CH375_PORT_INIT(); //首先将串口初始化为9600 因为CH375默认的波特率是9600
xcall _CH375_PORT_INIT
.dbline 380
; SET_BAUDRATE(); //设置CH375的串口通讯波特率 57600
xcall _SET_BAUDRATE
.dbline 381
; CH375_PORT_INIT_57600();//重新调整波特率 单片机串口波特率57600
xcall _CH375_PORT_INIT_57600
.dbline 383
; //-----------------------------------------------------------------------------
; initLCDM(); //初始化LCD
xcall _initLCDM
.dbline 384
; CleanScreen();
xcall _CleanScreen
.dbline 389
; //Welcome_interface(); //显示欢迎界面
;
; //-------------------------------------------------------
;
; LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */
.dbline 389
lds R24,101
andi R24,239
sts 101,R24
.dbline 389
.dbline 389
.dbline 390
; mDelaymS( 100 ); /* 延时100毫秒 */
ldi R16,100
xcall _mDelaymS
.dbline 391
; LED_OUT_INACT( );
.dbline 391
lds R24,101
ori R24,16
sts 101,R24
.dbline 391
.dbline 391
.dbline 394
; //mInitSTDIO( );
; // printf( "Start\n" );
; ShowText(10,5,"开始");
ldi R24,<L102
ldi R25,>L102
std y+1,R25
std y+0,R24
ldi R18,5
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
.dbline 395
; c = mCH375Init( ); /* 初始化CH375 */
xcall _mCH375Init
mov R10,R16
.dbline 413
; //if ( c );// printf( "Error @CH375Init\n" );
; /* {
; ShowText(10,21,"初始化错误!");
; while ( 1 )
; {
; LED_OUT_ACT( ); //LED闪烁
; mDelaymS( 80 );
; LED_OUT_INACT( );
; mDelaymS( 80 );
; }
; } */
; //printf( "Insert USB disk\n" );
;
;
;
;
;
; ShowText(10,21,"等待插入U盘......");
ldi R24,<L103
ldi R25,>L103
std y+1,R25
std y+0,R24
ldi R18,21
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
L104:
.dbline 414
; do { /* 等待U盘连接 */
.dbline 415
; mIntStatus = mWaitInterrupt( ); /* 等待中断并获取状态 */
xcall _mWaitInterrupt
mov R14,R16
.dbline 416
L105:
.dbline 416
; } while ( mIntStatus != USB_INT_CONNECT ); /* U盘没有连接或者已经拔出 */
mov R24,R14
cpi R24,21
brne L104
.dbline 417
; mDelaymS( 200 ); /* 延时等待U盘进入正常工作状态 */
ldi R16,200
xcall _mDelaymS
.dbline 419
; //printf( "InitDisk\n" );
; ShowText(10,37,"已插入U盘......");
ldi R24,<L107
ldi R25,>L107
std y+1,R25
std y+0,R24
ldi R18,37
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
L108:
.dbline 421
; loop:
; c = mInitDisk( ); /* 初始化U盘,实际是识别U盘的类型,不影响U盘中的数据,在所有读写操作之前必须进行此步骤 */
xcall _mInitDisk
mov R10,R16
.dbline 422
; if ( c )// printf( "Error @InitDisk, %02X\n", c );
tst R16
breq L109
.dbline 423
; {
.dbline 424
; ShowText(10,53,"初始化U盘错误");
ldi R24,<L111
ldi R25,>L111
std y+1,R25
std y+0,R24
ldi R18,53
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
xjmp L113
L112:
.dbline 426
.dbline 427
.dbline 427
lds R24,101
andi R24,239
sts 101,R24
.dbline 427
.dbline 427
.dbline 428
ldi R16,80
xcall _mDelaymS
.dbline 429
.dbline 429
lds R24,101
ori R24,16
sts 101,R24
.dbline 429
.dbline 429
.dbline 430
ldi R16,80
xcall _mDelaymS
.dbline 431
L113:
.dbline 425
; while ( 1 )
xjmp L112
X11:
.dbline 432
; {
; LED_OUT_ACT( ); /* LED闪烁 */
; mDelaymS( 80 );
; LED_OUT_INACT( );
; mDelaymS( 80 );
; }
; }
L109:
.dbline 434
;
; for(i=0;i<100;i++)
clr R12
clr R13
xjmp L118
L115:
.dbline 435
.dbline 436
ldi R24,<_DATA_BUFFER
ldi R25,>_DATA_BUFFER
movw R30,R12
add R30,R24
adc R31,R25
ldi R24,168
std z+0,R24
.dbline 437
L116:
.dbline 434
movw R24,R12
adiw R24,1
movw R12,R24
L118:
.dbline 434
movw R24,R12
cpi R24,100
ldi R30,0
cpc R25,R30
brlo L115
.dbline 449
; {
; DATA_BUFFER[i]=168;
; }
;
;
; /* 检查U盘是否准备好,大多数U盘不需要这一步,但是某些U盘必须要执行这一步才能工作 */
; // do {
; // mDelaymS( 100 );
; // printf( "Disk Ready ?\n" );
; // i = CH375DiskReady( ); /* 查询磁盘是否准备好,如果省掉这个子程序可以节约将近1KB的程序代码 */
; // } while ( i != ERR_SUCCESS );
; /* CH375DiskReady 在CH375的U盘文件子程序库中,因为代码较多,所以此处省去 */
;
; //printf( "ReadSector 0# to buffer\n" );
; ShowText(10,53,"读扇区......");
ldi R24,<L119
ldi R25,>L119
std y+1,R25
std y+0,R24
ldi R18,53
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
.dbline 450
; c = mWriteSector( 2, 1 );
ldi R24,1
std y+0,R24
ldi R16,2
ldi R17,0
ldi R18,0
ldi R19,0
xcall _mWriteSector
.dbline 451
; c = mReadSector( 2, 1 );
ldi R24,1
std y+0,R24
ldi R16,2
ldi R17,0
ldi R18,0
ldi R19,0
xcall _mReadSector
mov R10,R16
.dbline 453
; //---------------------------------------------------
; if ( c )//printf( "Error @ReadSector, %02X\n", c );
tst R16
breq L120
.dbline 454
; {
.dbline 455
; ShowText(10,69,"读取U盘失败!");
ldi R24,<L122
ldi R25,>L122
std y+1,R25
std y+0,R24
ldi R18,69
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
xjmp L124
L123:
.dbline 457
.dbline 458
.dbline 458
lds R24,101
andi R24,239
sts 101,R24
.dbline 458
.dbline 458
.dbline 459
ldi R16,80
xcall _mDelaymS
.dbline 460
.dbline 460
lds R24,101
ori R24,16
sts 101,R24
.dbline 460
.dbline 460
.dbline 461
ldi R16,80
xcall _mDelaymS
.dbline 462
L124:
.dbline 456
; while ( 1 )
xjmp L123
X12:
.dbline 463
; {
; LED_OUT_ACT(); /* LED闪烁 */
; mDelaymS( 80 );
; LED_OUT_INACT();
; mDelaymS( 80 );
; }
; }
xjmp L128
L120:
.dbline 465
; else
; {
.dbline 466
; ShowText(10,69,"读取U盘扇区成功!");
ldi R24,<L126
ldi R25,>L126
std y+1,R25
std y+0,R24
ldi R18,69
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
.dbline 467
; }
xjmp L128
L127:
.dbline 489
; //---------------------------------------------------
; /* if ( DATA_BUFFER[0x01FF] == 0xAA )
; { // 磁盘分区有效
; //printf( "WriteSector 1# from buffer\n" );
; ShowText(10,69,"磁盘分区有效");
; c = mWriteSector( 1, 1 );
; if ( c )// printf( "Error @WriteSector, %02X\n", c );
; memset( DATA_BUFFER, 0, sizeof(DATA_BUFFER) ); // 清空数据缓冲区,代替原来的分区信息
; //printf( "WriteSector 0# for clear\n" );
; c = mWriteSector( 0, 1 );
; if ( c ); //printf( "Error @WriteSector, %02X\n", c );
; }
; else {
; //printf( "ReadSector 1# to buffer\n" );
; // c = mReadSector( 1, 1 );
; if ( c )// printf( "Error @ReadSector, %02X\n", c );
; //printf( "WriteSector 0# from buffer\n" );
; c = mWriteSector( 0, 1 );
; if ( c ); //printf( "Error @WriteSector, %02X\n", c );
; }*/
; //printf( "Stop\n" );
; while ( 1 ) {
.dbline 490
; mIntStatus = mWaitInterrupt( ); // 等待中断并获取状态
xcall _mWaitInterrupt
mov R14,R16
.dbline 491
; if ( mIntStatus == USB_INT_DISCONNECT )
cpi R16,22
brne L130
.dbline 492
; { // U盘没有连接或者已经拔出 //
.dbline 494
; //printf( "Out\n" );
; ShowText(10,85,"U盘已拨出!");
ldi R24,<L132
ldi R25,>L132
std y+1,R25
std y+0,R24
ldi R18,85
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
.dbline 495
; }
xjmp L131
L130:
.dbline 496
; else if ( mIntStatus == USB_INT_CONNECT )
mov R24,R14
cpi R24,21
brne L133
.dbline 497
; { // U盘已经连接//
.dbline 499
; //printf( "In\n" );
; ShowText(10,101,"U盘插入!");
ldi R24,<L135
ldi R25,>L135
std y+1,R25
std y+0,R24
ldi R18,101
ldi R19,0
ldi R16,10
ldi R17,0
xcall _ShowText
.dbline 500
; LED_OUT_ACT( );
.dbline 500
lds R24,101
andi R24,239
sts 101,R24
.dbline 500
.dbline 500
.dbline 501
; CleanScreen();
xcall _CleanScreen
.dbline 502
; goto loop;
xjmp L108
L133:
L131:
.dbline 504
L128:
.dbline 489
xjmp L127
X13:
.dbline -2
L101:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r c 10 c
.dbsym r i 12 i
.dbsym r mIntStatus 14 c
.dbend
.dbfunc e CH375_PORT_INIT_57600 _CH375_PORT_INIT_57600 fV
.even
_CH375_PORT_INIT_57600::
.dbline -1
.dbline 507
; }
; }
; }
; void CH375_PORT_INIT_57600() /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
; {
.dbline 508
; UCSR1B = 0x00; //disable while setting baud rate
clr R2
sts 154,R2
.dbline 509
; UCSR1A = 0x00;
sts 155,R2
.dbline 510
; UCSR1C = 0x06;
ldi R24,6
sts 157,R24
.dbline 511
; UBRR1L = 0x10; //set baud rate lo
ldi R24,16
sts 153,R24
.dbline 512
; UBRR1H = 0x00; //set baud rate hi
sts 152,R2
.dbline 513
; UCSR1B = 0x1C; //1c
ldi R24,28
sts 154,R24
.dbline -2
L136:
.dbline 0 ; func end
ret
.dbend
.dbfunc e CH375_PORT_INIT _CH375_PORT_INIT fV
.even
_CH375_PORT_INIT::
.dbline -1
.dbline 516
; }
; void CH375_PORT_INIT() /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
; {
.dbline 517
; UCSR1B = 0x00; //disable while setting baud rate
clr R2
sts 154,R2
.dbline 518
; UCSR1A = 0x00;
sts 155,R2
.dbline 519
; UCSR1C = 0x06;
ldi R24,6
sts 157,R24
.dbline 520
; UBRR1L = 0x67; //set baud rate lo
ldi R24,103
sts 153,R24
.dbline 521
; UBRR1H = 0x00; //set baud rate hi
sts 152,R2
.dbline 522
; UCSR1B = 0x1C; //1c
ldi R24,28
sts 154,R24
.dbline -2
L137:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SET_BAUDRATE _SET_BAUDRATE fV
.even
_SET_BAUDRATE::
.dbline -1
.dbline 525
; }
; void SET_BAUDRATE() //设置CH375的串口通讯波特率
; {
.dbline 526
; CH375_WR_CMD_PORT( CMD_SET_BAUDRATE ); //发送设置波特率的命令
ldi R16,2
xcall _CH375_WR_CMD_PORT
.dbline 527
; CH375_WR_DAT_PORT(0x03);CH375_WR_DAT_PORT(0x98); //57600Bps
ldi R16,3
xcall _CH375_WR_DAT_PORT
.dbline 527
ldi R16,152
xcall _CH375_WR_DAT_PORT
.dbline -2
L138:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
_BlockPerSector::
.blkb 1
.dbsym e BlockPerSector _BlockPerSector c
_BytePerSector::
.blkb 2
.dbsym e BytePerSector _BytePerSector s
_DATA_BUFFER::
.blkb 2048
.dbsym e DATA_BUFFER _DATA_BUFFER A[2048:2048]c
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L135:
.blkb 9
.area idata
.byte 'U,197,204,178,229,200,235,33,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L132:
.blkb 11
.area idata
.byte 'U,197,204,210,209,178,166,179,246,33,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L126:
.blkb 17
.area idata
.byte 182,193,200,161,'U,197,204,201,200,199,248,179,201,185,166,33
.byte 0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L122:
.blkb 13
.area idata
.byte 182,193,200,161,'U,197,204,202,167,176,220,33,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L119:
.blkb 13
.area idata
.byte 182,193,201,200,199,248,46,46,46,46,46,46,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L111:
.blkb 14
.area idata
.byte 179,245,202,188,187,175,'U,197,204,180,237,206,243,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L107:
.blkb 16
.area idata
.byte 210,209,178,229,200,235,'U,197,204,46,46,46,46,46,46,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L103:
.blkb 18
.area idata
.byte 181,200,180,253,178,229,200,235,'U,197,204,46,46,46,46,46
.byte 46,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L102:
.blkb 5
.area idata
.byte 191,170,202,188,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
L41:
.blkb 11
.area idata
.byte 'C,'H,51,55,53,179,246,180,237,33,0
.area data(ram, con, rel)
.dbfile E:\ICC128\2008控制台\2008console0TEST\U盘扇区读写\CH375EV0.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -