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

📄 main.s90

📁 达拉斯 1-Wire 主机通信 这份资料展示了如何把 1-Wire 主机通信在应用到一个AVR系统中
💻 S90
📖 第 1 页 / 共 3 页
字号:
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_ReceiveByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_SendByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_ReceiveByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_DetectPresence
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_MatchRom
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_SendByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_SendByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_ReceiveByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_SendByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
        FUNCALL DS2890_SetWiperPosition, OWI_ReceiveByte
        LOCFRAME CSTACK, 4, STACK
        LOCFRAME RSTACK, 2, STACK
	CALL	?PROLOGUE4_L09
        CFI R27 Frame(CFA_Y, -1)
        CFI R26 Frame(CFA_Y, -2)
        CFI R25 Frame(CFA_Y, -3)
        CFI R24 Frame(CFA_Y, -4)
        CFI CFA_Y Y+4
	MOV	R25,R16
	MOV	R24,R17
	MOVW	R27 : R26,R19 : R18
//  305     // Reset, presence.
//  306     if(!OWI_DetectPresence(bus))
	MOV	R16,R24
	CALL	OWI_DetectPresence
	TST	R16
	BREQ	??DS2890_SetWiperPosition_0
//  307     {
//  308         return;
//  309     }
//  310     //Match id.
//  311     OWI_MatchRom(id, bus);
	MOV	R18,R24
	MOVW	R17 : R16,R27 : R26
	CALL	OWI_MatchRom
//  312     
//  313     // Send Write control register command.
//  314     OWI_SendByte(DS2890_WRITE_CONTROL_REGISTER, bus);
	MOV	R17,R24
	LDI	R16,85
	CALL	OWI_SendByte
//  315     
//  316     // Write 0x4c to control register to enable charge pump.
//  317     OWI_SendByte(0x4c, bus);
	MOV	R17,R24
	LDI	R16,76
	CALL	OWI_SendByte
//  318     
//  319     // Check that the value returned matches the value sent.
//  320     if (OWI_ReceiveByte(bus) != 0x4c)
	MOV	R16,R24
	CALL	OWI_ReceiveByte
	CPI	R16,76
	BRNE	??DS2890_SetWiperPosition_0
//  321     {
//  322         return;
//  323     }
//  324     
//  325     // Send release code to update control register.
//  326     OWI_SendByte(DS2890_RELEASE_CODE, bus);
	MOV	R17,R24
	LDI	R16,150
	CALL	OWI_SendByte
//  327     
//  328     // Check that zeros are returned to ensure that the operation was
//  329     // successful.
//  330     if (OWI_ReceiveByte(bus) == 0xff)
	MOV	R16,R24
	CALL	OWI_ReceiveByte
	CPI	R16,255
	BREQ	??DS2890_SetWiperPosition_0
//  331     {
//  332         return;
//  333     }
//  334     
//  335     // Reset, presence.
//  336     if (!OWI_DetectPresence(bus))
	MOV	R16,R24
	CALL	OWI_DetectPresence
	TST	R16
	BREQ	??DS2890_SetWiperPosition_0
//  337     {
//  338         return;
//  339     }
//  340     
//  341     // Match id.
//  342     OWI_MatchRom(id, bus);
	MOV	R18,R24
	MOVW	R17 : R16,R27 : R26
	CALL	OWI_MatchRom
//  343     
//  344     // Send the Write Position command.
//  345     OWI_SendByte(DS2890_WRITE_POSITION, bus);
	MOV	R17,R24
	LDI	R16,15
	CALL	OWI_SendByte
//  346     
//  347     // Send the new position.
//  348     OWI_SendByte(position, bus);
	MOV	R17,R24
	MOV	R16,R25
	CALL	OWI_SendByte
//  349     
//  350     // Check that the value returned matches the value sent.
//  351     if (OWI_ReceiveByte(bus) != position)
	MOV	R16,R24
	CALL	OWI_ReceiveByte
	CP	R16,R25
	BRNE	??DS2890_SetWiperPosition_0
//  352     {
//  353         return;
//  354     }
//  355     
//  356     // Send release code to update wiper position.
//  357     OWI_SendByte(DS2890_RELEASE_CODE, bus);
	MOV	R17,R24
	LDI	R16,150
	CALL	OWI_SendByte
//  358     
//  359     // Check that zeros are returned to ensure that the operation was
//  360     // successful.
//  361     if (OWI_ReceiveByte(bus) == 0xff)
	MOV	R16,R24
	CALL	OWI_ReceiveByte
??DS2890_SetWiperPosition_0:
	LDI	R30,4
	JMP	?EPILOGUE_B4_L09
        CFI EndBlock cfiBlock4
//  362     {   
//  363         return;
//  364     }
//  365 }

        RSEG INITTAB:CODE:NOROOT(0)
`?<Segment init: NEAR_Z>`:
	DW	SFE(NEAR_Z) - SFB(NEAR_Z)
	DW	SFB(NEAR_Z)
	DW	0
	REQUIRE ?need_segment_init

        ASEGN ABSOLUTE:DATA:ROOT,03eH
// union <unnamed> volatile __io _A_EEAR
_A_EEAR:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,040H
// union <unnamed> volatile __io _A_UBRRH
_A_UBRRH:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,041H
// union <unnamed> volatile __io _A_WDTCR
_A_WDTCR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,042H
// union <unnamed> volatile __io _A_ASSR
_A_ASSR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,043H
// union <unnamed> volatile __io _A_OCR2
_A_OCR2:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,044H
// union <unnamed> volatile __io _A_TCNT2
_A_TCNT2:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,045H
// union <unnamed> volatile __io _A_TCCR2
_A_TCCR2:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,046H
// union <unnamed> volatile __io _A_ICR1
_A_ICR1:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,048H
// union <unnamed> volatile __io _A_OCR1B
_A_OCR1B:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,04aH
// union <unnamed> volatile __io _A_OCR1A
_A_OCR1A:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,04cH
// union <unnamed> volatile __io _A_TCNT1
_A_TCNT1:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,04eH
// union <unnamed> volatile __io _A_TCCR1B
_A_TCCR1B:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,04fH
// union <unnamed> volatile __io _A_TCCR1A
_A_TCCR1A:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,050H
// union <unnamed> volatile __io _A_SFIOR
_A_SFIOR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,051H
// union <unnamed> volatile __io _A_OSCCAL
_A_OSCCAL:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,052H
// union <unnamed> volatile __io _A_TCNT0
_A_TCNT0:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,053H
// union <unnamed> volatile __io _A_TCCR0
_A_TCCR0:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,054H
// union <unnamed> volatile __io _A_MCUCSR
_A_MCUCSR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,055H
// union <unnamed> volatile __io _A_MCUCR
_A_MCUCR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,056H
// union <unnamed> volatile __io _A_TWCR
_A_TWCR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,057H
// union <unnamed> volatile __io _A_SPMCR
_A_SPMCR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,058H
// union <unnamed> volatile __io _A_TIFR
_A_TIFR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,059H
// union <unnamed> volatile __io _A_TIMSK
_A_TIMSK:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,05aH
// union <unnamed> volatile __io _A_GIFR
_A_GIFR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,05bH
// union <unnamed> volatile __io _A_GICR
_A_GICR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,05cH
// union <unnamed> volatile __io _A_OCR0
_A_OCR0:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,05dH
// union <unnamed> volatile __io _A_SP
_A_SP:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,05fH
// union <unnamed> volatile __io _A_SREG
_A_SREG:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,020H
// union <unnamed> volatile __io _A_TWBR
_A_TWBR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,021H
// union <unnamed> volatile __io _A_TWSR
_A_TWSR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,022H
// union <unnamed> volatile __io _A_TWAR
_A_TWAR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,023H
// union <unnamed> volatile __io _A_TWDR
_A_TWDR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,024H
// union <unnamed> volatile __io _A_ADC
_A_ADC:
        DS 2

        ASEGN ABSOLUTE:DATA:ROOT,026H
// union <unnamed> volatile __io _A_ADCSRA
_A_ADCSRA:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,027H
// union <unnamed> volatile __io _A_ADMUX
_A_ADMUX:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,028H
// union <unnamed> volatile __io _A_ACSR
_A_ACSR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,029H
// union <unnamed> volatile __io _A_UBRRL
_A_UBRRL:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02aH
// union <unnamed> volatile __io _A_UCSRB
_A_UCSRB:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02bH
// union <unnamed> volatile __io _A_UCSRA
_A_UCSRA:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02cH
// union <unnamed> volatile __io _A_UDR
_A_UDR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02dH
// union <unnamed> volatile __io _A_SPCR
_A_SPCR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02eH
// union <unnamed> volatile __io _A_SPSR
_A_SPSR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,02fH
// union <unnamed> volatile __io _A_SPDR
_A_SPDR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,030H
// union <unnamed> volatile __io _A_PIND
_A_PIND:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,031H
// union <unnamed> volatile __io _A_DDRD
_A_DDRD:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,032H
// union <unnamed> volatile __io _A_PORTD
_A_PORTD:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,033H
// union <unnamed> volatile __io _A_PINC
_A_PINC:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,034H
// union <unnamed> volatile __io _A_DDRC
_A_DDRC:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,035H
// union <unnamed> volatile __io _A_PORTC
_A_PORTC:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,036H
// union <unnamed> volatile __io _A_PINB
_A_PINB:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,037H
// union <unnamed> volatile __io _A_DDRB
_A_DDRB:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,038H
// union <unnamed> volatile __io _A_PORTB
_A_PORTB:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,039H
// union <unnamed> volatile __io _A_PINA
_A_PINA:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,03aH
// union <unnamed> volatile __io _A_DDRA
_A_DDRA:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,03bH
// union <unnamed> volatile __io _A_PORTA
_A_PORTA:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,03cH
// union <unnamed> volatile __io _A_EECR
_A_EECR:
        DS 1

        ASEGN ABSOLUTE:DATA:ROOT,03dH
// union <unnamed> volatile __io _A_EEDR
_A_EEDR:
        DS 1

        ASEGN ABSOLUTE:DATA:NOROOT,01cH
__?EECR:

        ASEGN ABSOLUTE:DATA:NOROOT,01dH
__?EEDR:

        ASEGN ABSOLUTE:DATA:NOROOT,01eH
__?EEARL:

        ASEGN ABSOLUTE:DATA:NOROOT,01fH
__?EEARH:

        END
// 
//  64 bytes in segment ABSOLUTE
// 658 bytes in segment CODE
//   6 bytes in segment INITTAB
//  72 bytes in segment NEAR_Z
// 
// 658 bytes of CODE memory (+  6 bytes shared)
//  72 bytes of DATA memory (+ 64 bytes shared)
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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