/* Her placeres din egen Header */ ;-------------------------------- ;Pin-forklaringer ; P1.0 til P1.6 = 7-segmentkoder ; P1.7 = til kontakt, aktiv lav, omskifter med hvile i midten, også P3.7 ; P3.0 = Dig1, Digit # 1, dvs. længst til højre ; P3.1 = Dig2 ; P3.2 = gate enable indgang. Sætter timeren i stå. = Stop tiden. ; P3.3 = Dig3 ; P3.4 = Dig4 Digit # 4, dvs. længst til venstre ;Pins på port 1: ;P1.7 = - ;P1.6= a ;P1.5= b ;P1.4= f ;P1.3= g ;P1.2= c ;P1.1= d ;P1.0= e ; ---------------------------------------------------------------- ;Def af variable. Bruges af asembleren, så registre, variable og pins får navne. TimerLB equ 0F7h ;Timer som tidsmåler, interval timer, tæller 1 op hver 12. ;clockcyklus. 12M/12 = 1M. TimerHB equ 0D8h ;På 0,01 sek skal tælles 0,01 * 1M = 10.000 ;65.353 - 10.000 = 55.353d, = D8EFh ;def af Urregistre U100del equ 08h ; U10del equ 09h U1sek equ 0Ah U10sek equ 0Bh U1min equ 0Ch U10min equ 0Dh ;def af digit select pin belægning dig1 equ p3.0 dig2 equ p3.1 dig3 equ p3.3 dig4 equ p3.4 ;*********************************************** ; Programstart ORG 0000h ;Program start adresse Ajmp Start ; Hop forbi interrupt area ;Interruptsdef: ; ORG 003h ;Extern interrupt 0 ; Reti Org 000bh ;Interrupt fra timer 0 Ajmp Timer0Int ;Hop til timerrutine ; org 013h ;extern interrupt 1 ; reti ; org 01bh ;Timer 1 interrupt. ; reti ;************************************************* Start: Org 0030h ;Her starter hovedprogram Mov dptr, #tabel ; indstil pointer på tabeladresse til at tænde ; de rigtige 7-segmenter Mov sp,#30h ;Flyt stakpointer fra adresse 07h ;Enable timerinterrupt Mov TMOD, #09h ;Timer Mode kontrol register, Laveste 4 bit = timer 0 ;Bit 3 = 0 => Tæller blot maskincykler ;Bit 3 = 1 => Gate styres høj på P3.2 ( AND TR0 (timer0 Run )) ;Bit 2 = 0 => Tæller maskincykler, Osc / 12 ;Bit 2 = 1 => Input til tæller fra pin P3.4 ;Bit 1,0 = 01: => 16 bit timer / tæller, mode 1 ;Timerflag TF0 sættes ved overløb Mov TL0,#TimerLB ;load timer Low Byte Mov TH0,#TimerHB ;Load timer High Byte Setb tr0 ;Sæt timer 0 igang, dog afh. af at P3.2 er høj ;P3.2 er "Stop tiden-indgang". Setb ET0 ;Enable Timer 0 interrupt SETB EA ;Global interrupt enable/disable ; Setb ET0 og EA = Mov IE, #130 ( 10000010B ) mov u100del, #00h mov u10del, #00h mov u1sek, #00h mov u10sek, #00h mov u1min, #00h mov u10min, #00h ;------------------------------------------- ;Hovedprogram ; her placeres jeres eget hovedprogram ;------------------------------------------ ; Subrutine ;****************************************** ; ;Navn :Timer Interrupt subrutine. ; ;Funktion : Opdaterer uret. ; ;Kaldes med :TimerInt ;Input : ;Output: : ;Ødelægger: : R0, ; ; Timer0Int: Mov TH0,#TimerHB ; Genload Timer High Byte Mov TL0,#timerLB ; Genload Timer Low Byte CLR TF0 ;Reset timer overflow bit PUSH ACC ;Gem ACC indhold PUSH PSW ;Gem programstatusregiste L0: ; Opdater registre Mov r0,#08h L1: inc @r0 cjne @R0,#0Ah,L2 ;hop if not lig med 10 Mov @R0,#00h inc R0 ;Næste register cjne R0,#0Eh, L1 ;Færdig med sidste register ?? ;Retur fra Interuptsubrutine L2: POP PSW POP ACC Reti ; ;****************************************** ; Pauseprogram end