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

📄 ata_wc.asm

📁 This is the famous CD-ROM interfacing using 8051. It also contains schematic.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                                                                 
                               
                       
                  
                                                                 


	list	p=16f877,r=hex	                       

	include	"pic16f877.inc"	                             
	include	"main.inc"		                  
	include "ata.inc"		                

                                                                 
                           
                                                                 
	global	AtaUpdate
	global	AtaInit

                                                                 
                             
                                                                 
	extern	Delay1ms
	extern	Delay10ms
	extern	Delay200ms
	extern	Delay5s

_rom1 code
                                                                 
                  
                                                              
               
                
                                                                 
AtaUpdate:
	movf	KeyEvent,w		            
	xorlw	0x00
	btfsc	status,z	
	return					   
	bsf		portd,LED_STATUS	    
	movlw	D'10'			                          
	movwf	AtaErrorRetries						
                                                
                         
                    
                                                
	btfsc	KeyState,KEY_STATE_OPEN_CLOSE
	goto	Iu2
	btfss	KeyEvent,KEY_EVENT_PLAY_STOP	
	goto	Iu2
	btfsc	KeyState,KEY_STATE_PLAY_STOP
	goto	Kst
Kpl:	call	AtaCmdReadToc
	movf	TrackStartMSF_M,w
	movwf	AtaPacket+3
	movf	TrackStartMSF_S,w
	movwf	AtaPacket+4
	movf	TrackStartMSF_F,w
	movwf	AtaPacket+5
	call	AtaCmdPlayAudio
	bsf		KeyState,KEY_STATE_PLAY_STOP
	bcf		KeyState,KEY_STATE_PAUSE_ONOFF
	goto	IuEnd
Kst:	call	AtaCmdStopAudio
	bcf		KeyState,KEY_STATE_PLAY_STOP
	goto	IuEnd
                                                
                         
                    
                  
                                                
Iu2:	btfsc	KeyState,KEY_STATE_OPEN_CLOSE
	goto	Iu3
	btfsc	KeyState,KEY_STATE_PAUSE_ONOFF
	goto	Iu3
	btfss	KeyEvent,KEY_EVENT_NEXT
	goto	Iu3
	incf	TrackStartNr,f
	btfss	KeyState,KEY_STATE_PLAY_STOP
	goto	IuEnd
	call	AtaCmdReadSubChannel
	incf	TrackCurrentNr,w
	movwf	TrackStartNr
	call	AtaCmdReadToc
	movf	TrackStartMSF_M,w
	movwf	AtaPacket+3
	movf	TrackStartMSF_S,w
	movwf	AtaPacket+4
	movf	TrackStartMSF_F,w
	movwf	AtaPacket+5
	call	AtaCmdPlayAudio
	goto	IuEnd
                                                
                             
                    
                  
                                                
Iu3:	btfsc	KeyState,KEY_STATE_OPEN_CLOSE
	goto	Iu4
	btfsc	KeyState,KEY_STATE_PAUSE_ONOFF
	goto	Iu4
	btfss	KeyEvent,KEY_EVENT_PREVIOUS
	goto	Iu4
	decf	TrackStartNr,f
	btfss	KeyState,KEY_STATE_PLAY_STOP
	goto	IuEnd
	call	AtaCmdReadSubChannel
	decf	TrackCurrentNr,w
	movwf	TrackStartNr
	call	AtaCmdReadToc
	movf	TrackStartMSF_M,w
	movwf	AtaPacket+3
	movf	TrackStartMSF_S,w
	movwf	AtaPacket+4
	movf	TrackStartMSF_F,w
	movwf	AtaPacket+5
	call	AtaCmdPlayAudio
	goto	IuEnd
                                                
                               
                                                
Iu4:	btfss	KeyEvent,KEY_EVENT_OPEN_CLOSE
	goto	Iu5
	btfsc	KeyState,KEY_STATE_OPEN_CLOSE
	goto	Kcl
Kop:	btfsc	KeyState,KEY_EVENT_PLAY_STOP
	call	AtaCmdStopAudio
	call	AtaCmdOpenDoor
	bsf		KeyState,KEY_STATE_OPEN_CLOSE
	goto	IuEnd
Kcl:	call	AtaCmdCloseDoor
	call	AtaCmdStopAudio
	bcf		KeyState,KEY_STATE_PLAY_STOP
	bcf		KeyState,KEY_STATE_PAUSE_ONOFF
	bcf		KeyState,KEY_STATE_OPEN_CLOSE
	movlw	0x01
	movwf	TrackStartNr
	goto	IuEnd
                                                
                            
                    
                     
                                                
Iu5:	btfsc	KeyState,KEY_STATE_OPEN_CLOSE
	goto	IuEnd
	btfss	KeyEvent,KEY_EVENT_PAUSE_ONOFF
	goto	IuEnd
	btfss	KeyState,KEY_STATE_PLAY_STOP
	goto	IuEnd
	btfsc  	KeyState,KEY_STATE_PAUSE_ONOFF
	goto	Kpf
Kpo:	call	AtaCmdPauseOn
	bsf		KeyState,KEY_STATE_PAUSE_ONOFF	
	goto	IuEnd
Kpf:	call	AtaCmdPauseOff
	bcf		KeyState,KEY_STATE_PAUSE_ONOFF
	goto	IuEnd
IuEnd:
	bcf		portd,LED_STATUS
	return
                                                                 
                
                                           
               
                
                                                                 
AtaInit:
	bsf		portd,LED_STATUS
	call	AtaReset		                      
	call	Delay5s		                      
	call	Delay5s

	movlw	D'12'		                                   
	movwf	AtaCounter
	movlw	AtaPacket
	movwf	fsr
Ai1:	clrf	indf	
	incf	fsr,f
	decfsz	AtaCounter,f
	goto	Ai1
	call	AtaCmdStopAudio	              
#ifdef LCD
	call	AtaCmdInquiry
#endif
	bcf		portd,LED_STATUS
	return
                                                                 
                 
                                              
               
                
                                                                 
AtaReset:
	bcf		portd,ATA_RST
	call	Delay200ms
	bsf		portd,ATA_RST
	call	Delay200ms	
	return
                                                                 
                        
                                                  
               
                
                                                                 
AtaCmdStopAudio:
	movlw	0x4e
	movwf	AtaPacket
	call	AtaWritePacket
	call	AtaReadPacketEmpty
	xorlw	0x01				                       
	btfss	status,z
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdStopAudio	                    
	call	AtaReset			                              
	return
                                                                 
                      
                                                     
               
                
                                                                 
AtaCmdPauseOn:
	movlw	0x4b
	movwf	AtaPacket
	call	AtaWritePacket
	call	AtaReadPacketEmpty			
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdPauseOn		                    
	call	AtaReset			                              
	return
                                                                 
                       
                                                     
               
                
                                                                 
AtaCmdPauseOff:
	movlw	0x4b
	movwf	AtaPacket
	movlw	0x01
	movwf	AtaPacket+8
	call	AtaWritePacket
	call	AtaReadPacketEmpty
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdPauseOff	                    
	call	AtaReset			                              
	return
                                                                 
                        
                                                       
               
                
                                                                 
AtaCmdPlayAudio:
	movlw	0x47
	movwf	AtaPacket
	movf	TrackLeadOutMSF_M,w
	movwf	AtaPacket+6
	movf	TrackLeadOutMSF_S,w
	movwf	AtaPacket+7
	movf	TrackLeadOutMSF_F,w
	movwf	AtaPacket+8
	call	AtaWritePacket
	call	AtaReadPacketEmpty
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdPlayAudio	                    
	call	AtaReset			                              
	return
                                                                 
                        
                                                        
               
                
                                                                 
AtaCmdCloseDoor:
	movlw	0x1b
	movwf	AtaPacket
	movlw	0x03
	movwf	AtaPacket+4
	call	AtaWritePacket
	call	AtaReadPacketEmpty
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdCloseDoor	                    
	call	AtaReset			                              
	return
                                                                 
                       
                                                        
               
                
                                                                 
AtaCmdOpenDoor:
	movlw	0x1b
	movwf	AtaPacket
	movlw	0x02
	movwf	AtaPacket+4
	call	AtaWritePacket
	call	AtaReadPacketEmpty
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdOpenDoor	                    
	call	AtaReset			                              
	return
                                                                 
                      
                                                
               
                
                                                                 
#ifdef LCD
AtaCmdInquiry:
	movlw	0x12
	movwf	AtaPacket
	movlw	0xff
	movwf	AtaPacket+4
	call	AtaWritePacket
	call	AtaReadPacketInquiry
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdInquiry		                    
	call	AtaReset			                              
	return
#endif
                                                                 
                      
                                                               
               
                
                                                                 
AtaCmdReadToc:
	movlw	0x43
	movwf	AtaPacket
	movlw	0x02
	movwf	AtaPacket+1
	movlw	0xff
	movwf	AtaPacket+7
	movlw	0xff
	movwf	AtaPacket+8
	call	AtaWritePacket
	call	AtaReadPacketToc
	btfsc	status,z			                       
	return					    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdReadToc		                    
	call	AtaReset			                              
	return
                                                                 
                             
                                                         
               
                
                                                                 
AtaCmdReadSubChannel:
	movlw	0x42
	movwf	AtaPacket
	movlw	0x02
	movwf	AtaPacket+1
	movlw	0x40
	movwf	AtaPacket+2
	movlw	0x01
	movwf	AtaPacket+3
	movlw	0xff
	movwf	AtaPacket+7
	movlw	0xff
	movwf	AtaPacket+8
	call	AtaWritePacket
	call	AtaReadPacketSubChannel
	btfsc	status,z				                       
	return						    
	decfsz	AtaErrorRetries,f
	goto	AtaCmdReadSubChannel	                    
	call	AtaReset				                              
	return
                                                                 
                
                                                                 
                                                                 
                       
                                            
                                    

⌨️ 快捷键说明

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