📄 main.s90
字号:
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 + -