SHARE
TWEET

1-Wire address reader

Ocelot Mar 1st, 2012 371 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Тактовая частота 1200 kHz
  2.  
  3. .include "tn12def.inc"
  4. .def    Temp=R16
  5. .def    Temp1=R17
  6. .def    Data=R18
  7. .def    Duration=R19
  8. .def    Count=R20
  9. .def    Count1=R21
  10. .def    EEAdr=R22
  11.  
  12. .equ DATAPIN=2
  13. .equ PULLUPPIN=1
  14. .equ POWERPIN=0
  15. .equ RANDPIN=4
  16. .equ LED_B=3
  17.  
  18. .cseg
  19. .org $000               ; вектора прерываний
  20.         rjmp RESET
  21.         reti            ; int0
  22.         reti            ; pins
  23.         rjmp TIMER      ; timer0 ovfl
  24.         reti            ; eeprom
  25.         reti            ; anacomp
  26.        
  27. RESET:
  28.  
  29.         ldi Temp, (1<<ACD)
  30.         out AINBG, Temp         ; отключить аналоговый компаратор
  31.         ldi Temp, (1<<SE)
  32.         out MCUCR, Temp        
  33.        
  34.         ldi Temp, 0b00000010
  35.         out TIMSK, Temp         ; включить прерывание по таймеру T0
  36.         ldi Temp, (1<<PULLUPPIN)
  37.         out DDRB, Temp          ;
  38.         out PORTB, Temp
  39.  
  40.        
  41. START:
  42.         sei
  43.         rcall ONEWIRE_RESET
  44.         ldi Data, 0x33          ; read Rom
  45.         rcall ONEWIRE_SEND
  46.        
  47.         ldi Count1, 8
  48.         ldi EEAdr, 0x00
  49.         RD_LOOP:
  50.                 rcall ONEWIRE_RECEIVE
  51.                 cpi EEAdr, 0x00
  52.                 brne NoCompare
  53.                 cpi Data, 0x00
  54.                 breq STOP
  55.                 cpi Data, 0xFF
  56.                 breq STOP
  57.         NoCompare:
  58.                 rcall EEWR
  59.                 inc EEAdr
  60.                 dec Count1
  61.         brne RD_LOOP
  62.  
  63. STOP:
  64. ldi Duration, 0xFF
  65.         rcall DELAY_MS
  66.         rcall DELAY_MS
  67.         rcall DELAY_MS
  68.         rcall DELAY_MS
  69. rjmp START
  70.  
  71.        
  72. ONEWIRE_RESET:
  73.         sbi DDRB, DATAPIN
  74.         ldi Duration, 184       ; x3 600clk, 500uS
  75.         rcall DELAY_US
  76.         rcall DELAY_US
  77.         rcall DELAY_US
  78.         cbi DDRB, DATAPIN       ; release dataline
  79.         sbi PORTB, DATAPIN      ; pullup on
  80.         ldi Duration, 50        ; 66clk, 55uS
  81.         rcall DELAY_US
  82.         sbic PINB, DATAPIN
  83.         ldi Duration, 239       ; x2 510clk, 425uS
  84.         rcall DELAY_US
  85.         rcall DELAY_US
  86.         sbi PORTB, DATAPIN      ; pullup off
  87. ret
  88.  
  89. ONEWIRE_SEND:
  90.         ldi Count, 8
  91.         TX_LOOP:
  92.                 lsr Data
  93.                 brcs TX_ONE
  94.         TX_ZERO:
  95.                 sbi DDRB, DATAPIN       ; pull down
  96.                 ldi Duration, 56        ; 72clk, 60uS
  97.                 rcall DELAY_US
  98.                 cbi DDRB, DATAPIN       ; release
  99.                 ldi Duration, 1         ; 16clk, 10uS
  100.                 rcall DELAY_US
  101.                 rjmp TX_ENDBIT
  102.         TX_ONE:
  103.                 sbi DDRB, DATAPIN       ; pull down
  104.                 nop                                     ; 7clk, 6uS
  105.                 nop
  106.                 nop
  107.                 nop
  108.                 nop
  109.                 nop
  110.                 nop            
  111.                 cbi DDRB, DATAPIN       ; release
  112.                 ldi Duration, 60        ; 76clk, 64uS
  113.                 rcall DELAY_US
  114.         TX_ENDBIT:
  115.                 dec Count
  116.         brne TX_LOOP
  117. ret
  118.  
  119. ONEWIRE_RECEIVE:
  120.         ldi Data, 0
  121.         ldi Count, 8
  122.         RX_LOOP:
  123.                 lsr Data
  124.                 sbi DDRB, DATAPIN       ; pull down
  125.                 nop                                     ; 7clk, 6uS
  126.                 nop
  127.                 nop
  128.                 nop
  129.                 nop
  130.                 nop
  131.                 nop
  132.                 cbi DDRB, DATAPIN       ; release
  133.                 nop                                     ; 10clk, 9uS
  134.                 nop
  135.                 nop
  136.                 nop
  137.                 nop
  138.                 nop
  139.                 nop
  140.                 nop
  141.                 nop
  142.                 nop
  143.                 sbic PINB, DATAPIN      ; 0 - skip
  144.                 ori Data, 0b10000000
  145.                
  146.                 ldi Duration, 50        ; 66 clk, 55uS
  147.                 rcall DELAY_US
  148.                 dec Count
  149.         brne RX_LOOP
  150. ret
  151.  
  152. EEWR:           ; запись в EEPROM
  153.         sbic EECR, 1
  154.         rjmp EEWR
  155.         cli
  156.         out EEAR, EEAdr
  157.         out EEDR, Data
  158.         sbi EECR, 2
  159.         sbi EECR, 1
  160.         sei
  161. ret
  162.  
  163. EEREAD:         ; чтение из EEPROM
  164.         sbic EECR, 1
  165.         rjmp EEREAD
  166.         out EEAR, EEAdr
  167.         sbi EECR, 0
  168.         in Data, EEDR
  169. ret
  170.  
  171. ; функции задержек
  172. DELAY_US:                               ; %Duration%+16 clk
  173.         ldi Temp, 0xFF
  174.         sub Temp, Duration
  175.         out TCNT0, Temp
  176.         ldi Temp, 0b00000001; CK/1
  177.         out TCCR0, Temp         ; Start TIMER0
  178.         sleep
  179. ret
  180.  
  181. DELAY_MS:                               ; %Duration%*1024+16 clk
  182.         ldi Temp, 0xFF
  183.         sub Temp, Duration
  184.         out TCNT0, Temp
  185.         ldi Temp, 0b00000101; CK/1024
  186.         out TCCR0, Temp         ; Start TIMER0
  187.         sleep
  188. ret
  189.  
  190. ; обработчик прерывания таймера T0
  191. TIMER:
  192.         ldi Temp, 0b00000000
  193.         out TCCR0, Temp         ; Stop TIMER0
  194. reti
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top