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

📄 ch375ev0.s

📁 使用ATMEGA128加CH375对U盘扇区进行读写,本程序在ICCAVR上调试,并在相应硬件电路上调试通过!供参考用
💻 S
📖 第 1 页 / 共 3 页
字号:
; 	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 + -