Witam,
Napisalem i przetestowalem w symulatorze prosty programik (bascom).
$sim '***************************************' '********* Compiler options ************' '***************************************' $regfile = "2313DEF.DAT" 'mcu type $crystal = 11059000 'crystal frequency $baud = 19200 : Echo Off 'baud rate, turn echo off Config Watchdog = 512 '
Ddrb = &B11111111 'Power drivers Portb = &B00000000 'low state ' Ddrd = &B10010000 '1-wyj, 0 - wej Portd = &B00000000 '
Do Waitms 1 $asm Checkpoint: sbic pind,2 'check int input state rjmp exitpoint 'exit cbi portd,6 'turn led on sbi portd,4 '485 transmiter mode push r16 'used registers on stack push r17 push r18 ldi r18,4 'load counter value ' Ldi R16 , 0 'load with broadcast code Out Udr , R16 'copy value to udr register '; Load Uart Data Register Point0: 'jump label sbis usr,udre 'skip if transmite complete rjmp point0 'loop back ' Ldi R16 , 57 'load with set hold code Out Udr , R16 'copy value to dr register '; Load Uart Data Register Point1: 'jump label sbis usr,udre 'skip if transmite complete rjmp point1 ' ldi r17,0 'clear counter register Point2: cbi usr,txc 'clear transmit complete flag Ldi R16 , 48 'load with value Out Udr , R16 'copy value to dr register '; Load Uart Data Register Point3: 'jump label sbis usr,udre 'skip if transmite complete rjmp point3 inc r17 'incr byte counter cpse r17,r18 'if 4 bytes out then skip rjmp point2 Point4: sbis usr,txc 'if transmite complete flag set then skip next command rjmp point4 ' pop r18 'take registers from stack pop r17 pop r16 cbi portd,4 '485 receiver mode sbi portd,6 'turn led off Exitpoint: $end Asm Loop
niestety w punkcie sbis usr,txc program sie zapetla czyli nie ustawia flagi ukonczenia nadawania, ktora chcialem wykorzystac do sterowania przeplywem transceivera 485. Nie wiem co robie zle.... Prosilbym o jakas wskazowke.
pzdr Tomek