;********************************************************** ;* File Name :LEDDisp.inc ;* Title :Driver for LED Display ;* Date :Ingo Gerlach / 10.10.99 ;* Version :1.0 / 11.10.99 ;* Version : ;* ęC :AT90S1200...8515 ;* : ;* Changes : ;* ;*********************************************************** ; ; ; Main program register variables ;--------------------------------------------------------------------------- ;.def temp = r16 ; Registers / LED ;--------------------------------------------------------------------------- ;.def cntr = r20 ; counter ;.def dly = r21 ; delay loop variable ;.def pos = r23 ; position ;.def byte = r24 ; byte ; Equates ;--------------------------------------------------------------------------- ;.equ LED_qty = 6 ; number of LEDs ;.equ LED_Del = 45 ; delay ;.equ OutPort = PortB ; Functions ; LED_Blank : switch display on ; LED_Null : reset display 0 ( Null) ; LED_Show : show bytes , transport byte (R24), position (R23) ; **** Switch display off ;************************** LED_Blank: ldi cntr,LED_QTY LedLoop1: ldi temp,192 add temp,cntr out OutPort,temp Rcall Led_Delay dec cntr brne LedLoop1 Ret ;************************** ; **** Reset display ;************************** LED_Null: ldi cntr,LED_QTY ; load number of LEDs LedLoop2: out OutPort,cntr Rcall Led_Delay dec cntr brne LedLoop2 Out OutPort,cntr Ret ;************************** ; **** Show byte ;************************** LED_Show: mov temp,pos ; position in register out OutPort,temp ; activate BCD-to-decimal decoder, LD 4543 Rcall Led_Delay ; short delay mov temp,byte ; value in register swap temp ; value high nibble add temp,pos ; goto position out OutPort,temp ; 4028 / 4543 move value to display Rcall Led_Delay ; short delay sub temp,pos out OutPort,temp ; LD signal off, store value Rcall Led_Delay Ret ;************************** ; * Internal functions !!! ; *** Delay LED display ;********************** LED_Delay: ldi dly,LED_Del LedLoop: dec dly brne LEDLoop ret