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

📄 main.c.lss

📁 AVR单片机控制的PDIUSBD12原程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:

00000206 <outportb>:
#define TXD232		1
#define INT_N		2
#define wait		asm("nop")
void outportb(unsigned int Addr,unsigned char Data)
{
 206:	9c 01       	movw	r18, r24
	DDRA=0xff;			//IOA OUT
 208:	8f ef       	ldi	r24, 0xFF	; 255
 20a:	8a bb       	out	0x1a, r24	; 26
	PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);	//IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;
 20c:	88 e3       	ldi	r24, 0x38	; 56
 20e:	88 bb       	out	0x18, r24	; 24
	PORTA=Addr;
 210:	2b bb       	out	0x1b, r18	; 27
	PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=1,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
 212:	98 e7       	ldi	r25, 0x78	; 120
 214:	98 bb       	out	0x18, r25	; 24
	// 在ALE 下降沿的时候,D12锁定地址;
	PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1
 216:	88 bb       	out	0x18, r24	; 24
	// 准备数据写入D12
	PORTB=(0<<CS_N)|(0<<ALE)|(0<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=0,RD_N=1,RESET_N=1,INT_N=1
 218:	88 e1       	ldi	r24, 0x18	; 24
 21a:	88 bb       	out	0x18, r24	; 24
	PORTA=Data;
 21c:	6b bb       	out	0x1b, r22	; 27
	asm("NOP");
 21e:	00 00       	nop
	asm("NOP");
 220:	00 00       	nop
	PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0,ALE=0,WR_N=1,RD_N=1,RESET_N=1,INT_N=1	
 222:	98 bb       	out	0x18, r25	; 24
 224:	08 95       	ret

00000226 <inportb>:
}
unsigned char inportb(unsigned Addr)
{
 226:	9c 01       	movw	r18, r24
	unsigned char temp;
	DDRA=0xff;			//IOA IN
 228:	8f ef       	ldi	r24, 0xFF	; 255
 22a:	8a bb       	out	0x1a, r24	; 26
	PORTB=0b00111010;	//IOB7=CS_N=0,IOB6=ALE=0,IOB5=WR_N=1,IOB4=RD_N=1,IOB3=RESET_N=1,IOB1=1;	
 22c:	8a e3       	ldi	r24, 0x3A	; 58
 22e:	88 bb       	out	0x18, r24	; 24
	PORTA=Addr;
 230:	2b bb       	out	0x1b, r18	; 27
	PORTB=(0<<CS_N)|(1<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=1,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
 232:	88 e7       	ldi	r24, 0x78	; 120
 234:	88 bb       	out	0x18, r24	; 24
	PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1
 236:	98 e3       	ldi	r25, 0x38	; 56
 238:	98 bb       	out	0x18, r25	; 24
	DDRA=0x00;
 23a:	1a ba       	out	0x1a, r1	; 26
	PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(0<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=0;RESET_N=1,INT_N=1	
 23c:	88 e2       	ldi	r24, 0x28	; 40
 23e:	88 bb       	out	0x18, r24	; 24
	temp=PORTA;
 240:	8b b3       	in	r24, 0x1b	; 27
	asm("NOP");
 242:	00 00       	nop
	asm("NOP");
 244:	00 00       	nop
	PORTB=(0<<CS_N)|(0<<ALE)|(1<<WR_N)|(1<<RD_N)|(1<<RESET_N);// CS_N=0, ALE=0,WR_N=1,RD_N=1;RESET_N=1,INT_N=1	
 246:	98 bb       	out	0x18, r25	; 24
	return temp;
}
 248:	99 27       	eor	r25, r25
 24a:	08 95       	ret

0000024c <D12_SetAddressEnable>:


//设置地址使能命令
void D12_SetAddressEnable(unsigned char bAddress,unsigned char bEnable)
{
 24c:	1f 93       	push	r17
 24e:	cf 93       	push	r28
 250:	c8 2f       	mov	r28, r24
 252:	16 2f       	mov	r17, r22
	outportb(D12_COMMAND,0xD0);
 254:	60 ed       	ldi	r22, 0xD0	; 208
 256:	70 e0       	ldi	r23, 0x00	; 0
 258:	83 e0       	ldi	r24, 0x03	; 3
 25a:	90 e0       	ldi	r25, 0x00	; 0
 25c:	0e 94 03 01 	call	0x206 <outportb>
	if(bEnable)
 260:	11 11       	cpse	r17, r1
		bAddress|=0x80;
 262:	c0 68       	ori	r28, 0x80	; 128
	outportb(D12_DATA,bAddress);
 264:	8c 2f       	mov	r24, r28
 266:	99 27       	eor	r25, r25
 268:	bc 01       	movw	r22, r24
 26a:	82 e0       	ldi	r24, 0x02	; 2
 26c:	90 e0       	ldi	r25, 0x00	; 0
 26e:	0e 94 03 01 	call	0x206 <outportb>
 272:	cf 91       	pop	r28
 274:	1f 91       	pop	r17
 276:	08 95       	ret

00000278 <D12_SetEndpointEnable>:
}
//设置端点使能命令
void D12_SetEndpointEnable(unsigned char bEnable)
{
 278:	1f 93       	push	r17
	outportb(D12_COMMAND,0xD8);
 27a:	68 ed       	ldi	r22, 0xD8	; 216
 27c:	70 e0       	ldi	r23, 0x00	; 0
 27e:	83 e0       	ldi	r24, 0x03	; 3
 280:	90 e0       	ldi	r25, 0x00	; 0
 282:	0e 94 03 01 	call	0x206 <outportb>
	if(bEnable)
		outportb(D12_DATA,1);
	else
		outportb(D12_DATA,1);
 286:	61 e0       	ldi	r22, 0x01	; 1
 288:	70 e0       	ldi	r23, 0x00	; 0
 28a:	82 e0       	ldi	r24, 0x02	; 2
 28c:	90 e0       	ldi	r25, 0x00	; 0
 28e:	0e 94 03 01 	call	0x206 <outportb>
 292:	1f 91       	pop	r17
 294:	08 95       	ret

00000296 <D12_SetMode>:
}
//设置模式命令
void D12_SetMode(unsigned char bConfig,unsigned char bClkDiv)
{
 296:	0f 93       	push	r16
 298:	1f 93       	push	r17
 29a:	18 2f       	mov	r17, r24
 29c:	06 2f       	mov	r16, r22
	outportb(D12_COMMAND,0xF3);
 29e:	63 ef       	ldi	r22, 0xF3	; 243
 2a0:	70 e0       	ldi	r23, 0x00	; 0
 2a2:	83 e0       	ldi	r24, 0x03	; 3
 2a4:	90 e0       	ldi	r25, 0x00	; 0
 2a6:	0e 94 03 01 	call	0x206 <outportb>
	outportb(D12_DATA,bConfig);
 2aa:	81 2f       	mov	r24, r17
 2ac:	99 27       	eor	r25, r25
 2ae:	bc 01       	movw	r22, r24
 2b0:	82 e0       	ldi	r24, 0x02	; 2
 2b2:	90 e0       	ldi	r25, 0x00	; 0
 2b4:	0e 94 03 01 	call	0x206 <outportb>
	outportb(D12_DATA,bClkDiv);
 2b8:	80 2f       	mov	r24, r16
 2ba:	99 27       	eor	r25, r25
 2bc:	bc 01       	movw	r22, r24
 2be:	82 e0       	ldi	r24, 0x02	; 2
 2c0:	90 e0       	ldi	r25, 0x00	; 0
 2c2:	0e 94 03 01 	call	0x206 <outportb>
 2c6:	1f 91       	pop	r17
 2c8:	0f 91       	pop	r16
 2ca:	08 95       	ret

000002cc <D12_SetDMA>:

}
//设置DMA
void D12_SetDMA(unsigned char bMode)
{
 2cc:	1f 93       	push	r17
 2ce:	18 2f       	mov	r17, r24
	outportb(D12_COMMAND,0xFB);
 2d0:	6b ef       	ldi	r22, 0xFB	; 251
 2d2:	70 e0       	ldi	r23, 0x00	; 0
 2d4:	83 e0       	ldi	r24, 0x03	; 3
 2d6:	90 e0       	ldi	r25, 0x00	; 0
 2d8:	0e 94 03 01 	call	0x206 <outportb>
	outportb(D12_DATA,bMode);
 2dc:	81 2f       	mov	r24, r17
 2de:	99 27       	eor	r25, r25
 2e0:	bc 01       	movw	r22, r24
 2e2:	82 e0       	ldi	r24, 0x02	; 2
 2e4:	90 e0       	ldi	r25, 0x00	; 0
 2e6:	0e 94 03 01 	call	0x206 <outportb>
 2ea:	1f 91       	pop	r17
 2ec:	08 95       	ret

000002ee <D12_ReadInterruptRegister>:

}
//读取中断寄存器
unsigned short D12_ReadInterruptRegister(void)
{
 2ee:	1f 93       	push	r17
	unsigned char b1;
	unsigned int j;
	outportb(D12_COMMAND,0xF4);
 2f0:	64 ef       	ldi	r22, 0xF4	; 244
 2f2:	70 e0       	ldi	r23, 0x00	; 0
 2f4:	83 e0       	ldi	r24, 0x03	; 3
 2f6:	90 e0       	ldi	r25, 0x00	; 0
 2f8:	0e 94 03 01 	call	0x206 <outportb>
	b1=inportb(D12_DATA)&0xff;
 2fc:	82 e0       	ldi	r24, 0x02	; 2
 2fe:	90 e0       	ldi	r25, 0x00	; 0
 300:	0e 94 13 01 	call	0x226 <inportb>
 304:	18 2f       	mov	r17, r24
	j=inportb(D12_DATA)&0x01;
 306:	82 e0       	ldi	r24, 0x02	; 2
 308:	90 e0       	ldi	r25, 0x00	; 0
 30a:	0e 94 13 01 	call	0x226 <inportb>
 30e:	81 70       	andi	r24, 0x01	; 1
 310:	90 70       	andi	r25, 0x00	; 0
//	put_c(b1);
//	put_c(j);
	j<<=8;
 312:	98 2f       	mov	r25, r24
 314:	88 27       	eor	r24, r24
	j+=b1;
	return j;
}
 316:	81 0f       	add	r24, r17
 318:	91 1d       	adc	r25, r1
 31a:	1f 91       	pop	r17
 31c:	08 95       	ret

0000031e <D12_SelectEndpoint>:
//端点选择命令
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
	unsigned char c;
	outportb(D12_COMMAND,bEndp);
 31e:	99 27       	eor	r25, r25
 320:	bc 01       	movw	r22, r24
 322:	83 e0       	ldi	r24, 0x03	; 3
 324:	90 e0       	ldi	r25, 0x00	; 0
 326:	0e 94 03 01 	call	0x206 <outportb>
	c=inportb(D12_DATA);
 32a:	82 e0       	ldi	r24, 0x02	; 2
 32c:	90 e0       	ldi	r25, 0x00	; 0
 32e:	0e 94 13 01 	call	0x226 <inportb>
	return c;
}
 332:	99 27       	eor	r25, r25
 334:	08 95       	ret

00000336 <D12_ReadLastTransactionStatus>:
//读取端点最后处理状态
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
	unsigned char c;
	outportb(D12_COMMAND,0x40+bEndp);
 336:	99 27       	eor	r25, r25
 338:	80 5c       	subi	r24, 0xC0	; 192
 33a:	9f 4f       	sbci	r25, 0xFF	; 255
 33c:	bc 01       	movw	r22, r24
 33e:	83 e0       	ldi	r24, 0x03	; 3
 340:	90 e0       	ldi	r25, 0x00	; 0
 342:	0e 94 03 01 	call	0x206 <outportb>
	c=inportb(D12_DATA);
 346:	82 e0       	ldi	r24, 0x02	; 2
 348:	90 e0       	ldi	r25, 0x00	; 0
 34a:	0e 94 13 01 	call	0x226 <inportb>
	return c;
}
 34e:	99 27       	eor	r25, r25
 350:	08 95       	ret

00000352 <D12_SetEndpointStatus>:
//设置端点状态
void D12_SetEndpointStatus(unsigned char bEndp,unsigned char bStalled)
{
 352:	1f 93       	push	r17
 354:	16 2f       	mov	r17, r22
	outportb(D12_COMMAND,0x40+bEndp);
 356:	99 27       	eor	r25, r25
 358:	80 5c       	subi	r24, 0xC0	; 192
 35a:	9f 4f       	sbci	r25, 0xFF	; 255
 35c:	bc 01       	movw	r22, r24
 35e:	83 e0       	ldi	r24, 0x03	; 3
 360:	90 e0       	ldi	r25, 0x00	; 0
 362:	0e 94 03 01 	call	0x206 <outportb>
	outportb(D12_DATA,bStalled);
 366:	81 2f       	mov	r24, r17
 368:	99 27       	eor	r25, r25
 36a:	bc 01       	movw	r22, r24
 36c:	82 e0       	ldi	r24, 0x02	; 2
 36e:	90 e0       	ldi	r25, 0x00	; 0
 370:	0e 94 03 01 	call	0x206 <outportb>
 374:	1f 91       	pop	r17
 376:	08 95       	ret

00000378 <D12_ReadEndpointStatus>:
}
//读取端点状态
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
	unsigned char temp;
	outportb(D12_COMMAND,0x80+bEndp);
 378:	99 27       	eor	r25, r25
 37a:	80 58       	subi	r24, 0x80	; 128
 37c:	9f 4f       	sbci	r25, 0xFF	; 255
 37e:	bc 01       	movw	r22, r24
 380:	83 e0       	ldi	r24, 0x03	; 3
 382:	90 e0       	ldi	r25, 0x00	; 0
 384:	0e 94 03 01 	call	0x206 <outportb>
	temp=inportb(D12_DATA);
 388:	82 e0       	ldi	r24, 0x02	; 2
 38a:	90 e0       	ldi	r25, 0x00	; 0
 38c:	0e 94 13 01 	call	0x226 <inportb>
	return temp;
}
 390:	99 27       	eor	r25, r25
 392:	08 95       	ret

00000394 <D12_SendResume>:
//发送恢复命令
void D12_SendResume(void)
{
	outportb(D12_COMMAND,0xF6);
 394:	66 ef       	ldi	r22, 0xF6	; 246
 396:	70 e0       	ldi	r23, 0x00	; 0
 398:	83 e0       	ldi	r24, 0x03	; 3
 39a:	90 e0       	ldi	r25, 0x00	; 0
 39c:	0e 94 03 01 	call	0x206 <outportb>
 3a0:	08 95       	ret

000003a2 <D12_ReadCurrentFrameNumber>:
}
//读取当前帧标志
unsigned short D12_ReadCurrentFrameNumber(void)
{
 3a2:	0f 93       	push	r16
 3a4:	1f 93       	push	r17
	unsigned short i,j;
	outportb(D12_COMMAND,0xF5);
 3a6:	65 ef       	ldi	r22, 0xF5	; 245
 3a8:	70 e0       	ldi	r23, 0x00	; 0
 3aa:	83 e0       	ldi	r24, 0x03	; 3
 3ac:	90 e0       	ldi	r25, 0x00	; 0
 3ae:	0e 94 03 01 	call	0x206 <outportb>
	i=inportb(D12_DATA);
 3b2:	82 e0       	ldi	r24, 0x02	; 2
 3b4:	90 e0       	ldi	r25, 0x00	; 0
 3b6:	0e 94 13 01 	call	0x226 <inportb>
 3ba:	8c 01       	movw	r16, r24
	j=inportb(D12_DATA);
 3bc:	82 e0       	ldi	r24, 0x02	; 2
 3be:	90 e0       	ldi	r25, 0x00	; 0
 3c0:	0e 94 13 01 	call	0x226 <inportb>
	i+=(j<<8);
 3c4:	98 2f       	mov	r25, r24
 3c6:	88 27       	eor	r24, r24
	return i;
}
 3c8:	80 0f       	add	r24, r16
 3ca:	91 1f       	adc	r25, r17
 3cc:	1f 91       	pop	r17
 3ce:	0f 91       	pop	r16
 3d0:	08 95       	ret

000003d2 <D12_ReadEndpoint>:
//读取端点数据
unsigned char D12_ReadEndpoint(unsigned char endp,unsigned char len,unsigned char *buf)
{
 3d2:	df 92       	push	r13
 3d4:	ef 92       	push	r14
 3d6:	ff 92       	push	r15
 3d8:	0f 93       	push	r16
 3da:	1f 93       	push	r17
 3dc:	cf 93       	push	r28
 3de:	df 93       	push	r29
 3e0:	e8 2e       	mov	r14, r24
 3e2:	d6 2e       	mov	r13, r22
 3e4:	8a 01       	movw	r16, r20
	unsigned char i,j;
	outportb(D12_COMMAND,endp);		//读取端点缓冲区状态
 3e6:	c8 2f       	mov	r28, r24
 3e8:	dd 27       	eor	r29, r29
 3ea:	be 01       	movw	r22, r28
 3ec:	83 e0       	ldi	r24, 0x03	; 3
 3ee:	90 e0       	ldi	r25, 0x00	; 0
 3f0:	0e 94 03 01 	call	0x206 <outportb>
	if((inportb(D12_DATA) & D12_FULLEMPTY)==0)
 3f4:	82 e0       	ldi	r24, 0x02	; 2
 3f6:	90 e0       	ldi	r25, 0x00	; 0
 3f8:	0e 94 13 01 	call	0x226 <inportb>
 3fc:	80 fd       	sbrc	r24, 0
 3fe:	03 c0       	rjmp	.+6      	; 0x406 <D12_ReadEndpoint+0x34>
		return 0;							//当前缓冲区为空,返回
 400:	80 e0       	ldi	r24, 0x00	; 0
 402:	90 e0       	ldi	r25, 0x00	; 0

⌨️ 快捷键说明

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