'*******************************************************************************
'* V 9024-22 - Interface 0...10V
'* Stand 15.08.2006
'*
'* Zielhardware: Interface010 V1.0
'*
'*
'* Änderungshistorie:
'*
'* V1.0  15.08.2006 Erstversion
'*
'*******************************************************************************

'**** Deklarationen ************************************************************
$regfile = "at15def.dat"                                    'Chipdefinition
$crystal = 1600000                                          'Int. Osc. Speed 1,6Mhz
$tiny

'*******************************************************************************
'* Portinitialisierung
'*
'* Ports werden hochohmig geschaltet bei Programmstart
'* Portrichtungen werden festgelegt
'* Pullups werden geschaltet
'*
'*******************************************************************************

Portb = &H00                                                'ports hochohmig schalten

Config Portb.5 = Output                                     'leer / Reset
Config Portb.4 = Output                                     'TxD Master
Config Portb.3 = Input                                      'ADC Eingang Sollwert 0...10V
Config Portb.2 = Output                                     'leer / SCK
Config Portb.1 = Output                                     'leer / MISO
Config Portb.0 = Output                                     'leer / MOSI / LED

Portb = &B00000000                                          'interne pullups aus

'**** Bennenungen / Aliase *****************************************************

'**** LED`s benennen
Led Alias Portb.0

'**** Interupts einschalten
Enable Interrupts

'**** Watchdog einrichten
'Config Watchdog = 2048
'Start Watchdog

'**** Variablen deklarieren

Config Adc = Single , Prescaler = Auto , Reference = Internal       'adc init
Start Adc

sbi portb,4
sbi ddrb,4

'*******************************************************************************
'* Hauptprogramm
'*******************************************************************************

Do

Waitms 200

Set Admux.5                                                 'left adjusted
Set Adcsr.6                                                 'start conversion

ldi R18, adch                                               'highbyte vom 10 bit adcwert einlesen

Led = 1                                                     'nur schauen obs läuft...
Waitms 100

rcall putchar

Led = 0
Waitms 100

Loop
End

'subroutinen

Putchar:
   Ldi R16 , 10                                             'bitcount register
   com r18                                                  'tx daten
   sec

Putchar0:
   brcc putchar1
   cbi portb, 4
   rjmp putchar2

Putchar1:
   sbi portb,4
   nop

Putchar2:
   rcall Uart_delay
   rcall Uart_delay
   lsr R18
   dec R16
   brne PUTCHAR0

   ret

.equ B = 5

Uart_delay:
   ldi R17,b                                                'temp register

Uart_delay1:
   dec r17
   brne UART_DELAY1

   ret