;FastAVR Basic Compiler, ver.4.3.0, by MicroDesign ;Created 20:32:57, 13-11-2008 ; .include "E:\fastavr\inc\m168def.inc" ; .DSEG .ORG 0x100 a: .byte 2 av: .byte 2 avf: .byte 1 avf2: .byte 1 avf3: .byte 1 auto: .byte 1 tq: .byte 2 tq00: .byte 2 tqx: .byte 2 tqmax: .byte 1 tqoff: .byte 2 tqont: .byte 2 tqofft: .byte 1 tqtlim: .byte 1 t: .byte 2 t2: .byte 2 tt2: .byte 2 tc: .byte 1 tc1: .byte 1 tc2: .byte 1 mq: .byte 2 mqx: .byte 2 mqmax: .byte 1 v: .byte 2 q: .byte 2 c1: .byte 1 c2: .byte 1 c4: .byte 1 c6: .byte 1 i: .byte 1 n: .byte 1 l: .byte 1 kdc: .byte 1 sh: .byte 1 _fmtC: .byte 1 _fmtD: .byte 1 _lchr: .byte 1 _s2tmp: .byte 3 .CSEG .ORG 0x0000 rjmp _Reset .ORG INT0addr reti .ORG INT1addr reti .ORG PCI0addr reti .ORG PCI1addr reti .ORG PCI2addr reti .ORG WDTaddr reti .ORG OC2Aaddr reti .ORG OC2Baddr reti .ORG OVF2addr reti .ORG ICP1addr jmp IntN10 _Reset: ldi yl,byte1(RAMEND) out SPL,yl ldi yh,byte2(RAMEND) out SPL+1,yh sbiw yl,32 rcall LcdIni ldi zl,3 sts _fmtC,zl ldi zl,0 sts _fmtD,zl ldi zl,0x20 sts _lchr,zl ;****** USERS BASIC CODE ********************** ;-Line--0085----ADMUX=5-- ldi zl,byte1(5) sts ADMUX,zl ;-Line--0087----ADCSRA=195-- ldi zl,byte1(195) sts ADCSRA,zl ;-Line--0093----ADCSRB=0-- ldi zl,byte1(0) sts ADCSRB,zl ;-Line--0117----InitLcd()-- rcall LcdIni ;-Line--0118----Cursor Off-- ldi r24,0xC rcall _LCtr ;-Line--0119----DefLcdChar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31-- ldi r24,0x48 rcall _LCtr LcdCh1: .db 0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f ldi zl,byte1(LcdCh1*2) ldi zh,byte2(LcdCh1*2) rcall _Def ldi r24,1 rcall _LCtr ldi zl,2 rcall _Wms ;-Line--0120----DefLcdChar 2 , 32 , 32 , 32 , 31 , 31 , 32 , 32 , 32-- ldi r24,0x50 rcall _LCtr LcdCh2: .db 0x20,0x20,0x20,0x1f,0x1f,0x20,0x20,0x20 ldi zl,byte1(LcdCh2*2) ldi zh,byte2(LcdCh2*2) rcall _Def ldi r24,1 rcall _LCtr ldi zl,2 rcall _Wms ;-Line--0121----DefLcdChar 3 , 32 , 32 , 32 , 31 , 31 , 32 , 31 , 31-- ldi r24,0x58 rcall _LCtr LcdCh3: .db 0x20,0x20,0x20,0x1f,0x1f,0x20,0x1f,0x1f ldi zl,byte1(LcdCh3*2) ldi zh,byte2(LcdCh3*2) rcall _Def ldi r24,1 rcall _LCtr ldi zl,2 rcall _Wms ;-Line--0126----Diag = 0-- clt bld r3,0 ;-Line--0129----If PINB.3 = 1 Then Diag = 1-- sbis PINB,3 rjmp L0001 L0002: set bld r3,0 L0001: ;-Line--0133----TCCR2B = 10-- ldi zl,byte1(10) sts TCCR2B,zl ;-Line--0134----TCCR2A = 161-- ldi zl,byte1(161) sts TCCR2A,zl ;-Line--0135----PORTD.3 = 0-- cbi PORTD,3 ;-Line--0136----DDRD.3 = 1-- sbi DDRD,3 ;-Line--0141----TCCR0A = 0-- ldi zl,byte1(0) out TCCR0A,zl ;-Line--0142----TCCR0B = 0-- ldi zl,byte1(0) out TCCR0B,zl ;-Line--0143----PORTD.5 = 0-- cbi PORTD,5 ;-Line--0144----DDRD.5 = 0-- cbi DDRD,5 ;-Line--0146----If Diag = 1 Then-- sbrs r3,0 rjmp L0004 L0005: ;-Line--0148----TCCR0B = 10-- ldi zl,byte1(10) out TCCR0B,zl ;-Line--0149----TCCR0A = 161-- ldi zl,byte1(161) out TCCR0A,zl ;-Line--0150----PORTD.5 = 0-- cbi PORTD,5 ;-Line--0151----DDRD.5 = 1-- sbi DDRD,5 ;-Line--0152----End If -- L0004: L0003: ;-Line--0156----TCCR1A = 0-- ldi zl,byte1(0) sts TCCR1A,zl ;-Line--0161----TCCR1B = 0-- ldi zl,byte1(0) sts TCCR1B,zl ;-Line--0172----If Diag=1 Then-- sbrs r3,0 rjmp L0007 L0008: ;-Line--0174----OCR0A = 64-- ldi zl,byte1(64) out OCR0A,zl ;-Line--0176----OCR0B = 7-- ldi zl,byte1(7) out OCR0B,zl ;-Line--0181----End If-- L0007: L0006: ;-Line--0183----OCR2A=64-- ldi zl,byte1(64) sts OCR2A,zl ;-Line--0187----OCR2B=4-- ldi zl,byte1(4) sts OCR2B,zl ;-Line--0191----If Diag=1 Then-- sbrs r3,0 rjmp L0010 L0011: ;-Line--0192----Cls-- ldi r24,1 rcall _LCtr ldi zl,0x02 rcall _Wms ;-Line--0193----Lcd "D"-- ldi zl,byte1(S000*2) ldi zh,byte2(S000*2) rcall _LSc ;-Line--0196----End If-- L0010: L0009: ;-Line--0198----Wait 1-- ldi zl,byte1(1) rcall _Ws ;-Line--0202----Enable Interrupts-- sei ;-Line--0205----Tqmax = 126-- ldi zl,byte1(126) sts tqmax,zl ;-Line--0209----Cap2()-- rcall cap2 ;-Line--0214----Tq00 = Tq-- lds zl,tq lds zh,tq+1 sts tq00,zl sts tq00+1,zh ;-Line--0216----Q=Tq-- lds zl,tq lds zh,tq+1 sts q,zl sts q+1,zh ;-Line--0217----Mqmax = Tqmax - Tq00-- lds r24,tqmax lds zl,tq00 sub r24,zl mov zl,r24 sts mqmax,zl ;-Line--0219----T2=6000/Mqmax-- ldi r24,byte1(6000) ldi r25,byte2(6000) lds zl,mqmax clr zh rcall Di16u sts t2,zl sts t2+1,zh ;-Line--0220----T = Tqmax - Tq00-- lds r24,tqmax clr r25 lds zl,tq00 lds zh,tq00+1 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 sts t,zl sts t+1,zh ;-Line--0221----T=T*10-- lds r24,t lds r25,t+1 ldi zl,byte1(10) ldi zh,byte2(10) rcall Mp16u sts t,zl sts t+1,zh ;-Line--0222----T = T / 16-- lds r24,t lds r25,t+1 ldi zl,byte1(16) ldi zh,byte2(16) rcall Di16u sts t,zl sts t+1,zh ;-Line--0223----Locate 2,1-- ldi r24,0xBF push r24 ldi zl,byte1(1) pop r24 add r24,zl rcall _LCtr ;-Line--0224----Lcd "TQ=" ; Tq00-- ldi zl,byte1(S001*2) ldi zh,byte2(S001*2) rcall _LSc lds zl,tq00 lds zh,tq00+1 rcall _W2Str rcall _LBW ;-Line--0225----Wait 1-- ldi zl,byte1(1) rcall _Ws ;-Line--0226----Cls-- ldi r24,1 rcall _LCtr ldi zl,0x02 rcall _Wms ;-Line--0235----Tqtlim=120-- ldi zl,byte1(120) sts tqtlim,zl ;-Line--0236----Tqont=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqont,zl sts tqont+1,zh ;-Line--0237----Tqon=0-- clt bld r3,1 ;-Line--0238----L=0-- ldi zl,byte1(0) sts l,zl ;-Line--0239----Q=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts q,zl sts q+1,zh ;-Line--0240----Tc=0-- ldi zl,byte1(0) sts tc,zl ;-Line--0241----Tqx=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqx,zl sts tqx+1,zh ;-Line--0242----Tc1=0-- ldi zl,byte1(0) sts tc1,zl ;-Line--0243----Tc2=0-- ldi zl,byte1(0) sts tc2,zl ;-Line--0245----Avf=0-- ldi zl,byte1(0) sts avf,zl ;-Line--0246----Kdc=0-- ldi zl,byte1(0) sts kdc,zl ;-Line--0247----Tqofft=180-- ldi zl,byte1(180) sts tqofft,zl ;-Line--0248----Tqoff=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqoff,zl sts tqoff+1,zh ;-Line--0249----Sc=0-- clt bld r3,5 ;-Line--0254----Main:-- main: ;-Line--0255----If L mod 5=0 Then-- lds zl,l push zl ldi zl,byte1(5) pop r24 rcall Div8u mov zl,r22 push zl ldi zl,byte1(0) pop r24 cp r24,zl breq PC+0x02 rjmp L0013 L0014: ;-Line--0258----Cap2()-- rcall cap2 ;-Line--0261----If Tq > Tqmax Then Tq = Tqmax-- lds r24,tq lds r25,tq+1 lds zl,tqmax clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0016 L0017: lds zl,tqmax clr zh sts tq,zl sts tq+1,zh L0016: ;-Line--0264----If Tq > Tq00 Then-- lds r24,tq lds r25,tq+1 lds zl,tq00 lds zh,tq00+1 adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0019 L0020: ;-Line--0265----Tq = Tq - Tq00-- lds r24,tq lds r25,tq+1 lds zl,tq00 lds zh,tq00+1 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 sts tq,zl sts tq+1,zh ;-Line--0266----Else-- rjmp L0018 L0019: ;-Line--0267----Tq = 0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tq,zl sts tq+1,zh ;-Line--0268----End If-- L0018: ;-Line--0272----Tqx=Tqx+Tq-- lds r24,tqx lds r25,tqx+1 lds zl,tq lds zh,tq+1 add zl,r24 adc zh,r25 sts tqx,zl sts tqx+1,zh ;-Line--0273----N=N+1-- lds r24,n ldi zl,byte1(1) add zl,r24 sts n,zl ;-Line--0275----End If-- L0013: L0012: ;-Line--0276----If L=0 Then-- lds r24,l ldi zl,byte1(0) cp r24,zl breq PC+0x02 rjmp L0022 L0023: ;-Line--0280----If Diag = 1 Then-- sbrs r3,0 rjmp L0025 L0026: ;-Line--0282----ADMUX=4-- ldi zl,byte1(4) sts ADMUX,zl ;-Line--0283----ADCSRA=195 '&B11000011-- ldi zl,byte1(195) sts ADCSRA,zl ;-Line--0284----V=Adc(4)-- ldi zl,byte1(4) lds zh,ADMUX andi zh,0xe0 or zl,zh sts ADMUX,zl rcall _Adc sts v,zl sts v+1,zh ;-Line--0285----ADCSRA=0-- ldi zl,byte1(0) sts ADCSRA,zl ;-Line--0287----V = V / 17-- lds r24,v lds r25,v+1 ldi zl,byte1(17) ldi zh,byte2(17) rcall Di16u sts v,zl sts v+1,zh ;-Line--0288----V = V + 4-- lds r24,v lds r25,v+1 ldi zl,byte1(4) ldi zh,byte2(4) add zl,r24 adc zh,r25 sts v,zl sts v+1,zh ;-Line--0289----If V>63 Then V=63-- lds r24,v lds r25,v+1 ldi zl,byte1(63) ldi zh,byte2(63) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0028 L0029: ldi zl,byte1(63) ldi zh,byte2(63) sts v,zl sts v+1,zh L0028: ;-Line--0290----OCR0B = V-- lds zl,v out OCR0B,zl ;-Line--0294----End If-- L0025: L0024: ;-Line--0298----ADMUX=5-- ldi zl,byte1(5) sts ADMUX,zl ;-Line--0299----ADCSRA=195 '&B11000011-- ldi zl,byte1(195) sts ADCSRA,zl ;-Line--0300----V = Adc(5)-- ldi zl,byte1(5) lds zh,ADMUX andi zh,0xe0 or zl,zh sts ADMUX,zl rcall _Adc sts v,zl sts v+1,zh ;-Line--0302----ADCSRA=0-- ldi zl,byte1(0) sts ADCSRA,zl ;-Line--0304----V = V / 16-- lds r24,v lds r25,v+1 ldi zl,byte1(16) ldi zh,byte2(16) rcall Di16u sts v,zl sts v+1,zh ;-Line--0319----If V>30 Then v=31-- lds r24,v lds r25,v+1 ldi zl,byte1(30) ldi zh,byte2(30) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0031 L0032: ldi zl,byte1(31) ldi zh,byte2(31) sts v,zl sts v+1,zh L0031: ;-Line--0321----Auto=0-- ldi zl,byte1(0) sts auto,zl ;-Line--0323----If V<30 Then Auto=1-- lds r24,v lds r25,v+1 ldi zl,byte1(30) ldi zh,byte2(30) cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0034 L0035: ldi zl,byte1(1) sts auto,zl L0034: ;-Line--0324----If V=0 Then Auto=2-- lds r24,v lds r25,v+1 ldi zl,byte1(0) ldi zh,byte2(0) cp r24,zl cpc r25,zh breq PC+0x02 rjmp L0037 L0038: ldi zl,byte1(2) sts auto,zl L0037: ;-Line--0325----If Auto<>1 Then Avf=0-- lds r24,auto ldi zl,byte1(1) cp r24,zl brne PC+0x02 rjmp L0040 L0041: ldi zl,byte1(0) sts avf,zl L0040: ;-Line--0331----C1=20+v 'auto asist change start level-- ldi r24,byte1(20) lds zl,v add zl,r24 sts c1,zl ;-Line--0332----C2=10+v-- ldi r24,byte1(10) lds zl,v add zl,r24 sts c2,zl ;-Line--0334----C4 = V 'asist level-- lds zl,v sts c4,zl ;-Line--0340----End If-- L0022: L0021: ;-Line--0343----If L mod 10 = 0 Then-- lds zl,l push zl ldi zl,byte1(10) pop r24 rcall Div8u mov zl,r22 push zl ldi zl,byte1(0) pop r24 cp r24,zl breq PC+0x02 rjmp L0043 L0044: ;-Line--0346----Tq=Tqx/N-- lds r24,tqx lds r25,tqx+1 lds zl,n clr zh rcall Di16u sts tq,zl sts tq+1,zh ;-Line--0347----Tqx = Tq*10 / T-- lds zl,tq lds zh,tq+1 push zh push zl ldi zl,byte1(10) ldi zh,byte2(10) pop r24 pop r25 rcall Mp16u push zh push zl lds zl,t lds zh,t+1 pop r24 pop r25 rcall Di16u sts tqx,zl sts tqx+1,zh ;-Line--0352----If Tqont>Tqtlim Then-- lds r24,tqont lds r25,tqont+1 lds zl,tqtlim clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0046 L0047: ;-Line--0353----Tqont=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqont,zl sts tqont+1,zh ;-Line--0354----Tqon=0-- clt bld r3,1 ;-Line--0355----Kdc=0-- ldi zl,byte1(0) sts kdc,zl ;-Line--0356----Sc=0-- clt bld r3,5 ;-Line--0357----End If-- L0046: L0045: ;-Line--0359----If Tq>5 Then-- lds r24,tq lds r25,tq+1 ldi zl,byte1(5) ldi zh,byte2(5) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0049 L0050: ;-Line--0361----If Tqoff=0 Then-- lds r24,tqoff lds r25,tqoff+1 ldi zl,byte1(0) ldi zh,byte2(0) cp r24,zl cpc r25,zh breq PC+0x02 rjmp L0052 L0053: ;-Line--0362----Tqon=1-- set bld r3,1 ;-Line--0363----Tqont=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqont,zl sts tqont+1,zh ;-Line--0364----End If-- L0052: L0051: ;-Line--0365----Tqoff=Tqofft -- lds zl,tqofft clr zh sts tqoff,zl sts tqoff+1,zh ;-Line--0367----End If-- L0049: L0048: ;-Line--0373----If Tqeg=0 Then-- sbrc r3,2 rjmp L0055 L0056: ;-Line--0377----If Tqon=1 Then-- sbrs r3,1 rjmp L0058 L0059: ;-Line--0378----If Kdc>0 Or Sc=1 Then Tqont=Tqont+1-- lds r24,kdc ldi zl,byte1(0) inc zl cp r24,zl brlo PC+0x02 rjmp L0062 sbrs r3,5 rjmp L0061 L0062: lds r24,tqont lds r25,tqont+1 ldi zl,byte1(1) ldi zh,byte2(1) add zl,r24 adc zh,r25 sts tqont,zl sts tqont+1,zh L0061: ;-Line--0379----End If-- L0058: L0057: ;-Line--0381----If Tq>Tc Then Tc=Tq-- lds r24,tq lds r25,tq+1 lds zl,tc clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0064 L0065: lds zl,tq sts tc,zl L0064: ;-Line--0383----If Tq+230 Then-- lds r24,av lds r25,av+1 ldi zl,byte1(30) ldi zh,byte2(30) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0070 L0071: ;-Line--0392----Sh=40-- ldi zl,byte1(40) sts sh,zl ;-Line--0393----Else-- rjmp L0069 L0070: ;-Line--0394----Sh=Av*2-- lds r24,av ldi zl,byte1(2) rcall Mpy8u sts sh,zl ;-Line--0395----Sh=100-Sh-- ldi r24,byte1(100) lds zl,sh sub r24,zl mov zl,r24 sts sh,zl ;-Line--0396----End If-- L0069: ;-Line--0397----If Tqon=1 Then Sh=20-- sbrs r3,1 rjmp L0073 L0074: ldi r24,byte1(20) sts sh,r24 L0073: ;-Line--0398----Tt2=Tq*Sh/100-- lds zl,tq lds zh,tq+1 push zh push zl lds zl,sh clr zh pop r24 pop r25 rcall Mp16u push zh push zl ldi zl,byte1(100) ldi zh,byte2(100) pop r24 pop r25 rcall Di16u sts tt2,zl sts tt2+1,zh ;-Line--0401----Tudisp=1-- set bld r3,3 ;-Line--0402----Tc2=Tc-- lds zl,tc sts tc2,zl ;-Line--0403----Tqeg=1-- set bld r3,2 ;-Line--0404----Avf2=0-- ldi zl,byte1(0) sts avf2,zl ;-Line--0416----If Tqon=1 Then Kdc=Kdc+1 -- sbrs r3,1 rjmp L0076 L0077: lds r24,kdc ldi zl,byte1(1) add zl,r24 sts kdc,zl L0076: ;-Line--0419----End If -- L0067: L0066: ;-Line--0420----If Tq < Tc Then Tq=Tc -- lds r24,tq lds r25,tq+1 lds zl,tc clr zh cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0079 L0080: lds zl,tc clr zh sts tq,zl sts tq+1,zh L0079: ;-Line--0421----End If-- L0055: L0054: ;-Line--0424----If Tqeg=1 Then-- sbrs r3,2 rjmp L0082 L0083: ;-Line--0426----If TqTc+2 Then-- lds zl,tq lds zh,tq+1 push zh push zl lds zl,tc clr zh push zh push zl ldi zl,byte1(2) ldi zh,byte2(2) pop r24 pop r25 add zl,r24 adc zh,r25 adiw zl,0x01 pop r24 pop r25 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0088 L0089: ;-Line--0428----Tqeg=0-- clt bld r3,2 ;-Line--0430----Tc1=Tc-- lds zl,tc sts tc1,zl ;-Line--0431----End If-- L0088: L0087: ;-Line--0433----End If-- L0082: L0081: ;-Line--0435----If Tqeg=1 Then-- sbrs r3,2 rjmp L0091 L0092: ;-Line--0437----If Tq > Tt2 And Auto=1 Then Tq=Tc2-- lds r24,tq lds r25,tq+1 lds zl,tt2 lds zh,tt2+1 adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0094 lds r24,auto ldi zl,byte1(1) cp r24,zl breq PC+0x02 rjmp L0094 L0095: lds zl,tc2 clr zh sts tq,zl sts tq+1,zh L0094: ;-Line--0439----If Avf>0 And Avf2=0 Then-- lds r24,avf ldi zl,byte1(0) inc zl cp r24,zl brsh PC+0x02 rjmp L0097 lds r24,avf2 ldi zl,byte1(0) cp r24,zl breq PC+0x02 rjmp L0097 L0098: ;-Line--0440----avf=avf-1-- lds r24,avf ldi zl,byte1(1) sub r24,zl mov zl,r24 sts avf,zl ;-Line--0441----If Avf>0 Then Avf=Avf-1-- lds r24,avf ldi zl,byte1(0) inc zl cp r24,zl brsh PC+0x02 rjmp L0100 L0101: lds zl,avf push zl ldi zl,byte1(1) pop r24 sub r24,zl mov zl,r24 sts avf,zl L0100: ;-Line--0442----Avf2=1-- ldi zl,byte1(1) sts avf2,zl ;-Line--0443----Avf3=0-- ldi zl,byte1(0) sts avf3,zl ;-Line--0444----End If-- L0097: L0096: ;-Line--0446----End If-- L0091: L0090: ;-Line--0452----If Auto=1 And Tqeg=0 Then-- lds r24,auto ldi zl,byte1(1) cp r24,zl breq PC+0x02 rjmp L0103 sbrc r3,2 rjmp L0103 L0104: ;-Line--0454----If Tq>C1 And Avf3=0 Then-- lds r24,tq lds r25,tq+1 lds zl,c1 clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0106 lds r24,avf3 ldi zl,byte1(0) cp r24,zl breq PC+0x02 rjmp L0106 L0107: ;-Line--0457----avfcal()-- rcall avfcal ;-Line--0458----If Av<43 Then-- lds r24,av lds r25,av+1 ldi zl,byte1(43) ldi zh,byte2(43) cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0109 L0110: ;-Line--0459----Avf=5+Avf-- ldi r24,byte1(5) lds zl,avf add zl,r24 sts avf,zl ;-Line--0460----Avf3=1-- ldi zl,byte1(1) sts avf3,zl ;-Line--0461----End If-- L0109: L0108: ;-Line--0462----End If-- L0106: L0105: ;-Line--0464----End If -- L0103: L0102: ;-Line--0468----avfcal()-- rcall avfcal ;-Line--0473----If Tqoff>0 Then Tqoff=Tqoff-1-- lds r24,tqoff lds r25,tqoff+1 ldi zl,byte1(0) ldi zh,byte2(0) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0112 L0113: lds zl,tqoff lds zh,tqoff+1 push zh push zl ldi zl,byte1(1) ldi zh,byte2(1) pop r24 pop r25 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 sts tqoff,zl sts tqoff+1,zh L0112: ;-Line--0474----If Tqoff=0 Then-- lds r24,tqoff lds r25,tqoff+1 ldi zl,byte1(0) ldi zh,byte2(0) cp r24,zl cpc r25,zh breq PC+0x02 rjmp L0115 L0116: ;-Line--0477----Avf=0-- ldi zl,byte1(0) sts avf,zl ;-Line--0478----Avf2=0-- ldi zl,byte1(0) sts avf2,zl ;-Line--0479----Avf3=0-- ldi zl,byte1(0) sts avf3,zl ;-Line--0480----Tc2=0-- ldi zl,byte1(0) sts tc2,zl ;-Line--0481----Tud()-- rcall tud ;-Line--0482----Tqon=0-- clt bld r3,1 ;-Line--0484----End If-- L0115: L0114: ;-Line--0485----Mqcal=0-- clt bld r3,4 ;-Line--0486----Mq = Tq-- lds zl,tq lds zh,tq+1 sts mq,zl sts mq+1,zh ;-Line--0487----A=V/10+1-- lds zl,v lds zh,v+1 push zh push zl ldi zl,byte1(10) ldi zh,byte2(10) pop r24 pop r25 rcall Di16u push zh push zl ldi zl,byte1(1) ldi zh,byte2(1) pop r24 pop r25 add zl,r24 adc zh,r25 sts a,zl sts a+1,zh ;-Line--0491----If Auto=1 Then-- lds r24,auto ldi zl,byte1(1) cp r24,zl breq PC+0x02 rjmp L0118 L0119: ;-Line--0493----If Tq >= A Or Tqon=1 Then-- lds r24,tq lds r25,tq+1 lds zl,a lds zh,a+1 cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0122 sbrs r3,1 rjmp L0121 L0122: ;-Line--0496----If Tqon=1 Then-- sbrs r3,1 rjmp L0124 L0125: ;-Line--0498----AV=AV*Tqont/Tqtlim-- lds zl,av lds zh,av+1 push zh push zl lds zl,tqont lds zh,tqont+1 pop r24 pop r25 rcall Mp16u push zh push zl lds zl,tqtlim clr zh pop r24 pop r25 rcall Di16u sts av,zl sts av+1,zh ;-Line--0499----If Av<10 Then AV=10-- lds r24,av lds r25,av+1 ldi zl,byte1(10) ldi zh,byte2(10) cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0127 L0128: ldi zl,byte1(10) ldi zh,byte2(10) sts av,zl sts av+1,zh L0127: ;-Line--0500----A=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts a,zl sts a+1,zh ;-Line--0502----If Sc=0 And Tq>C2 Then-- sbrc r3,5 rjmp L0130 lds r24,tq lds r25,tq+1 lds zl,c2 clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0130 L0131: ;-Line--0503----Sc=1-- set bld r3,5 ;-Line--0505----If tq>c1 Then avf=c4+15 -- lds r24,tq lds r25,tq+1 lds zl,c1 clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0133 L0134: lds zl,c4 push zl ldi zl,byte1(15) pop r24 add zl,r24 sts avf,zl L0133: ;-Line--0508----Tqont=120-- ldi zl,byte1(120) ldi zh,byte2(120) sts tqont,zl sts tqont+1,zh ;-Line--0509----End If-- L0130: L0129: ;-Line--0511----End If-- L0124: L0123: ;-Line--0512----Mqcal=1-- set bld r3,4 ;-Line--0513----End If-- L0121: L0120: ;-Line--0515----End If-- L0118: L0117: ;-Line--0517----If Mqcal=1 Then-- sbrs r3,4 rjmp L0136 L0137: ;-Line--0519----Mq = Tq - A-- lds r24,tq lds r25,tq+1 lds zl,a lds zh,a+1 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 sts mq,zl sts mq+1,zh ;-Line--0520----Mq = Mq * Av-- lds r24,mq lds r25,mq+1 lds zl,av lds zh,av+1 rcall Mp16u sts mq,zl sts mq+1,zh ;-Line--0521----Mq = Mq / 10-- lds r24,mq lds r25,mq+1 ldi zl,byte1(10) ldi zh,byte2(10) rcall Di16u sts mq,zl sts mq+1,zh ;-Line--0522----Mq = Mq + A-- lds r24,mq lds r25,mq+1 lds zl,a lds zh,a+1 add zl,r24 adc zh,r25 sts mq,zl sts mq+1,zh ;-Line--0524----End If-- L0136: L0135: ;-Line--0528----If Mq > Mqmax Then Mq = Mqmax-- lds r24,mq lds r25,mq+1 lds zl,mqmax clr zh adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0139 L0140: lds zl,mqmax clr zh sts mq,zl sts mq+1,zh L0139: ;-Line--0531----If C4=31 Then q=0-- lds r24,c4 ldi zl,byte1(31) cp r24,zl breq PC+0x02 rjmp L0142 L0143: ldi zl,byte1(0) ldi zh,byte2(0) sts q,zl sts q+1,zh L0142: ;-Line--0532----Mqx = Q*10/ T-- lds zl,q lds zh,q+1 push zh push zl ldi zl,byte1(10) ldi zh,byte2(10) pop r24 pop r25 rcall Mp16u push zh push zl lds zl,t lds zh,t+1 pop r24 pop r25 rcall Di16u sts mqx,zl sts mqx+1,zh ;-Line--0534----If Auto=2 Then Mqx=16-- lds r24,auto ldi zl,byte1(2) cp r24,zl breq PC+0x02 rjmp L0145 L0146: ldi zl,byte1(16) ldi zh,byte2(16) sts mqx,zl sts mqx+1,zh L0145: ;-Line--0537---- Bardisp()-- rcall bardisp ;-Line--0540----End If-- L0043: L0042: ;-Line--0549----If Auto=2 Or Mq>100 Then-- lds r24,auto ldi zl,byte1(2) cp r24,zl brne PC+0x02 rjmp L0149 lds r24,mq lds r25,mq+1 ldi zl,byte1(100) ldi zh,byte2(100) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0148 L0149: ;-Line--0550----Mq=Mqmax-L+15-- lds zl,mqmax clr zh push zh push zl lds zl,l clr zh pop r24 pop r25 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 push zh push zl ldi zl,byte1(15) ldi zh,byte2(15) pop r24 pop r25 add zl,r24 adc zh,r25 sts mq,zl sts mq+1,zh ;-Line--0551----If C6=9 Then-- lds r24,c6 ldi zl,byte1(9) cp r24,zl breq PC+0x02 rjmp L0151 L0152: ;-Line--0552----Mq=Tq00-- lds zl,tq00 lds zh,tq00+1 sts mq,zl sts mq+1,zh ;-Line--0553----Tq=Tq00-- lds zl,tq00 lds zh,tq00+1 sts tq,zl sts tq+1,zh ;-Line--0554----Mqx=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts mqx,zl sts mqx+1,zh ;-Line--0555----End If-- L0151: L0150: ;-Line--0557----If C6=5 Then-- lds r24,c6 ldi zl,byte1(5) cp r24,zl breq PC+0x02 rjmp L0154 L0155: ;-Line--0558----Locate 1,1-- ldi r24,0x7F push r24 ldi zl,byte1(1) pop r24 add r24,zl rcall _LCtr ;-Line--0559----Lcd " "-- ldi zl,byte1(S002*2) ldi zh,byte2(S002*2) rcall _LSc ;-Line--0560----End If-- L0154: L0153: ;-Line--0562----Else-- rjmp L0147 L0148: ;-Line--0563----C6=0-- ldi zl,byte1(0) sts c6,zl ;-Line--0564----End If-- L0147: ;-Line--0566----If Mq<100 Then-- lds r24,mq lds r25,mq+1 ldi zl,byte1(100) ldi zh,byte2(100) cp r24,zl cpc r25,zh brlo PC+0x02 rjmp L0157 L0158: ;-Line--0567----If Q>Mq+1 Then Q=Q-1-- lds zl,q lds zh,q+1 push zh push zl lds zl,mq lds zh,mq+1 push zh push zl ldi zl,byte1(1) ldi zh,byte2(1) pop r24 pop r25 add zl,r24 adc zh,r25 adiw zl,0x01 pop r24 pop r25 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0160 L0161: lds zl,q lds zh,q+1 push zh push zl ldi zl,byte1(1) ldi zh,byte2(1) pop r24 pop r25 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 sts q,zl sts q+1,zh L0160: ;-Line--0568----If Q63 Then A=63-- lds r24,a lds r25,a+1 ldi zl,byte1(63) ldi zh,byte2(63) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0166 L0167: ldi zl,byte1(63) ldi zh,byte2(63) sts a,zl sts a+1,zh L0166: ;-Line--0585----If C4=31 Then A=4-- lds r24,c4 ldi zl,byte1(31) cp r24,zl breq PC+0x02 rjmp L0169 L0170: ldi zl,byte1(4) ldi zh,byte2(4) sts a,zl sts a+1,zh L0169: ;-Line--0586----OCR2B=A-- lds zl,a sts OCR2B,zl ;-Line--0590----L = L + 1-- lds r24,l ldi zl,byte1(1) add zl,r24 sts l,zl ;-Line--0591----If L = 31 Then-- lds r24,l ldi zl,byte1(31) cp r24,zl breq PC+0x02 rjmp L0172 L0173: ;-Line--0593----L = 0-- ldi zl,byte1(0) sts l,zl ;-Line--0594----If Auto=2 Or Mq>100 Then-- lds r24,auto ldi zl,byte1(2) cp r24,zl brne PC+0x02 rjmp L0176 lds r24,mq lds r25,mq+1 ldi zl,byte1(100) ldi zh,byte2(100) adiw zl,1 cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0175 L0176: ;-Line--0595----C6=C6+1-- lds r24,c6 ldi zl,byte1(1) add zl,r24 sts c6,zl ;-Line--0596----If C6=10 Then C6=0-- lds r24,c6 ldi zl,byte1(10) cp r24,zl breq PC+0x02 rjmp L0178 L0179: ldi zl,byte1(0) sts c6,zl L0178: ;-Line--0597----End If-- L0175: L0174: ;-Line--0598----End If-- L0172: L0171: ;-Line--0601----GoTo Main-- rjmp main ;-Line--0604----Sub avfcal()-- avfcal: ;-Line--0605----Av=40-C4+Avf-- ldi zl,byte1(40) ldi zh,byte2(40) push zh push zl lds zl,c4 clr zh pop r24 pop r25 sub r24,zl sbc r25,zh mov zl,r24 mov zh,r25 push zh push zl lds zl,avf clr zh pop r24 pop r25 add zl,r24 adc zh,r25 sts av,zl sts av+1,zh ;-Line--0606----End Sub -- L0180: ret ;-Line--0609----Sub Cap2()-- cap2: ;-Line--0611----Cap3:-- cap3: ;-Line--0613----ICR1H=0-- ldi zl,byte1(0) sts ICR1H,zl ;-Line--0614----ICR1L=0-- ldi zl,byte1(0) sts ICR1L,zl ;-Line--0615----TIMSK1 = 32-- ldi zl,byte1(32) sts TIMSK1,zl ;-Line--0616----WaitUs 2 -- ldi zl,byte1(2) rcall _Wus ;-Line--0617----TCCR1B = 66-- ldi zl,byte1(66) sts TCCR1B,zl ;-Line--0618----If ICR1L=0 Then Tq=0-- lds r24,ICR1L ldi zl,byte1(0) cp r24,zl breq PC+0x02 rjmp L0183 L0184: ldi zl,byte1(0) ldi zh,byte2(0) sts tq,zl sts tq+1,zh L0183: ;-Line--0619----WaitUs 64-- ldi zl,byte1(64) rcall _Wus ;-Line--0620----TIMSK1 = 0-- ldi zl,byte1(0) sts TIMSK1,zl ;-Line--0621----WaitUs 2-- ldi zl,byte1(2) rcall _Wus ;-Line--0623----If Tq<>Tcnt1l Then-- lds r24,tq lds r25,tq+1 lds zl,TCNT1L clr zh cp r24,zl cpc r25,zh brne PC+0x02 rjmp L0186 L0187: ;-Line--0624----Tq=Tcnt1l-- lds zl,TCNT1L clr zh sts tq,zl sts tq+1,zh ;-Line--0625----GoTo Cap3-- rjmp cap3 ;-Line--0626----End If-- L0186: L0185: ;-Line--0628----End Sub-- L0181: ret ;-Line--0631----Interrupt Icp1(),Save 3-- ;-Line--0633----If TCCR1B = 66 Then-- IntN10: in r2,SREG push zl push zh push r0 push r1 push r24 push r25 push xl push xh lds r24,TCCR1B ldi zl,byte1(66) cp r24,zl breq PC+0x02 rjmp L0189 L0190: ;-Line--0634----TCCR1B = 2-- ldi zl,byte1(2) sts TCCR1B,zl ;-Line--0635----TCNT1H=0-- ldi zl,byte1(0) sts TCNT1H,zl ;-Line--0636----TCNT1L=0-- ldi zl,byte1(0) sts TCNT1L,zl ;-Line--0637----Else-- rjmp L0188 L0189: ;-Line--0638----TCCR1B=0-- ldi zl,byte1(0) sts TCCR1B,zl ;-Line--0639----End If-- L0188: ;-Line--0641----End Interrupt-- pop xh pop xl pop r25 pop r24 pop r1 pop r0 pop zh pop zl out SREG,r2 reti ;-Line--0645----Sub Bardisp()-- bardisp: ;-Line--0648----For N = 1 To 16-- ldi zl,byte1(1) sts n,zl ldi zl,byte1(16) push r5 inc zl mov r5,zl L0192: ;-Line--0650----Locate 2 , N-- ldi r24,0xBF push r24 lds zl,n pop r24 add r24,zl rcall _LCtr ;-Line--0651----I = 0-- ldi zl,byte1(0) sts i,zl ;-Line--0653----If Tqx >= N Then I = I + 2-- lds r24,tqx lds r25,tqx+1 lds zl,n clr zh cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0195 L0196: lds zl,i push zl ldi zl,byte1(2) pop r24 add zl,r24 sts i,zl L0195: ;-Line--0654----If Mqx >= N Then I = I + 1-- lds r24,mqx lds r25,mqx+1 lds zl,n clr zh cp r24,zl cpc r25,zh brsh PC+0x02 rjmp L0198 L0199: lds zl,i push zl ldi zl,byte1(1) pop r24 add zl,r24 sts i,zl L0198: ;-Line--0656----If I > 0 Then-- lds r24,i ldi zl,byte1(0) inc zl cp r24,zl brsh PC+0x02 rjmp L0201 L0202: ;-Line--0657----Lcd Chr(I)-- lds zl,i mov r24,zl rcall _Lch ;-Line--0658----Else-- rjmp L0200 L0201: ;-Line--0659----Lcd " "-- ldi zl,byte1(S003*2) ldi zh,byte2(S003*2) rcall _LSc ;-Line--0660----End If-- L0200: ;-Line--0662----Next N-- lds zl,n inc zl sts n,zl cp zl,r5 brsh PC+0x02 rjmp L0192 pop r5 L0193: ;-Line--0663----N=0-- ldi zl,byte1(0) sts n,zl ;-Line--0664----Tqx=0-- ldi zl,byte1(0) ldi zh,byte2(0) sts tqx,zl sts tqx+1,zh ;-Line--0665----Format(2,0)-- ldi zl,byte1(2) sts _fmtC,zl ldi zl,byte1(0) sts _fmtD,zl ;-Line--0672----If Tudisp=1 Then Tud()-- sbrs r3,3 rjmp L0204 L0205: rcall tud L0204: ;-Line--0674----Locate 1 , 1-- ldi r24,0x7F push r24 ldi zl,byte1(1) pop r24 add r24,zl rcall _LCtr ;-Line--0675----Format(1,1)-- ldi zl,byte1(1) sts _fmtC,zl ldi zl,byte1(1) sts _fmtD,zl ;-Line--0677----If Auto=2 Then-- lds r24,auto ldi zl,byte1(2) cp r24,zl breq PC+0x02 rjmp L0207 L0208: ;-Line--0678----Lcd "-MAX-"-- ldi zl,byte1(S004*2) ldi zh,byte2(S004*2) rcall _LSc ;-Line--0679----Else-- rjmp L0206 L0207: ;-Line--0680----If C4<31 Then-- lds r24,c4 ldi zl,byte1(31) cp r24,zl brlo PC+0x02 rjmp L0210 L0211: ;-Line--0682----If Avf>0 Then-- lds r24,avf ldi zl,byte1(0) inc zl cp r24,zl brsh PC+0x02 rjmp L0213 L0214: ;-Line--0683----Lcd "A";Av;" "-- ldi zl,byte1(S005*2) ldi zh,byte2(S005*2) rcall _LSc lds zl,av lds zh,av+1 rcall _W2Str rcall _LBW ldi zl,byte1(S003*2) ldi zh,byte2(S003*2) rcall _LSc ;-Line--0684----Else-- rjmp L0212 L0213: ;-Line--0685----If Tqon=0 Then-- sbrc r3,1 rjmp L0216 L0217: ;-Line--0686----Lcd "x";Av;" "-- ldi zl,byte1(S006*2) ldi zh,byte2(S006*2) rcall _LSc lds zl,av lds zh,av+1 rcall _W2Str rcall _LBW ldi zl,byte1(S003*2) ldi zh,byte2(S003*2) rcall _LSc ;-Line--0687----Else-- rjmp L0215 L0216: ;-Line--0688----Lcd "S";Av;" "-- ldi zl,byte1(S007*2) ldi zh,byte2(S007*2) rcall _LSc lds zl,av lds zh,av+1 rcall _W2Str rcall _LBW ldi zl,byte1(S003*2) ldi zh,byte2(S003*2) rcall _LSc ;-Line--0689----End If-- L0215: ;-Line--0690----End If-- L0212: ;-Line--0691----Else-- rjmp L0209 L0210: ;-Line--0692----Lcd "=OFF="-- ldi zl,byte1(S008*2) ldi zh,byte2(S008*2) rcall _LSc ;-Line--0693----End If-- L0209: ;-Line--0694----End If-- L0206: ;-Line--0696----End Sub-- L0191: ret ;-Line--0698----Sub Tud()-- tud: ;-Line--0701----Format(2,0)-- ldi zl,byte1(2) sts _fmtC,zl ldi zl,byte1(0) sts _fmtD,zl ;-Line--0705----Tudisp=0-- clt bld r3,3 ;-Line--0708----Locate 1,15-- ldi r24,0x7F push r24 ldi zl,byte1(15) pop r24 add r24,zl rcall _LCtr ;-Line--0709----Lcd Tc2-- lds zl,tc2 rcall _B2Str rcall _LBW ;-Line--0712----End Sub-- L0218: ret ;-Line--0714----End-- L0219: rjmp L0219 ;****** END OF USER BASIC CODE **************** ; String constants: S000: .db "D", 0 S001: .db "TQ=", 0 S002: .db " ", 0 S003: .db " ", 0 S004: .db "-MAX-", 0 S005: .db "A", 0 S006: .db "x", 0 S007: .db "S", 0 S008: .db "=OFF=", 0 ;////// LcdInit /////////////////////////// LcdIni: in zl,DDRC ori zl,0x0f out DDRC,zl sbi DDRD,0 sbi DDRD,1 cbi PORTD,0 cbi PORTD,1 ldi zl,0x18 rcall _Wms ldi r24,0x03 rcall _LOut ldi zl,0x08 rcall _Wms rcall _LEN ldi zl,0x0d rcall _Wus rcall _LEN cbi PORTC,0 rcall _LEN ldi r24,0x28 rcall _LCtr ldi r24,0x06 rcall _LCtr ldi r24,0x0c rcall _LCtr ldi r24,0x01 rcall _LCtr ldi zl,0x04 rcall _Wms ret _Lch: sbi PORTD,0 rjmp _LNib _LCtr: cbi PORTD,0 _LNib: mov r21,r24 swap r24 rcall _LOut mov r24,r21 _LOut: in r23,PORTC andi r23,0xf0 andi r24,0x0f or r24,r23 out PORTC,r24 rcall _LEN ret ;////// LcdEN ///////////////////////////// _LEN: sbi PORTD,1 nop nop nop nop cbi PORTD,1 push zl ldi zl,0x04 rcall _Wus pop zl ret ;////// LCD Byte & Word /////////////////// _LBW: ld r24,Z+ tst r24 breq _LBW1 rcall _Lch rjmp _LBW _LBW1: ret ;////// LCD string constants ////////////// _LSc: lpm adiw zl,0x01 tst r0 breq _LSc1 mov r24,r0 rcall _Lch rjmp _LSc _Lsc1: ret ;////// ADC /////////////////////////////// _Adc: lds zl,ADCSRA sbr zl,0x06 sts ADCSRA,zl _Adc1: lds zl,ADCSRA sbrs zl,0x04 rjmp _Adc1 lds r24,ADCSRA sbr r24,0x04 sts ADCSRA,r24 lds zl,ADCL lds zh,ADCH ret ;////// CopyLCDChars ////////////////////// _Def: ldi r25,0x08 _Def1: lpm adiw zl,0x01 mov r24,r0 rcall _Lch dec r25 brne _Def1 ret ;////// IntToStr ////////////////////////// _B2str: clr zh clt _W2str: clt rjmp _W2st4 _I2str: clt sbrs zh,0x07 rjmp _W2st4 com zl com zh subi zl,-0x01 sbci zh,-0x01 set _W2st4: push yl push yh push r6 lds r25,_fmtD clr r6 st -Y,r6 tst r25 breq _N2st7 rcall _N2str ldi r22,0x2e st -Y,r22 _N2st7: lds r25,_fmtC rcall _N2str tst r25 breq _N2st5 lds r22,_lchr _N2st4: st -Y,r22 dec r25 brne _N2st4 _N2st5: brtc _N2st3 ldi zl,0x2d st -Y,zl _N2st3: mov zl,yl pop r6 mov zh,yh pop yh pop yl ret _N2str: ldi r21,0x10 sub r22,r22 _N2st1: lsr r6 rol zl rol zh rol r22 rol r6 cpi r22,0x0a brcs _N2st2 sbci r22,0x0a inc zl _N2st2: dec r21 brne _N2st1 subi r22,-0x30 st -Y,r22 dec r25 breq _N2st8 mov r22,zl or r22,zh brne _N2st6 _N2st8: ret _N2st6: mov r22,zl or r22,zh brne _N2str ret ;////// _Waitms /////////////////////////// _Wms: ldi r20,0x14 _Wms1: ldi r21,0x85 _Wms2: dec r21 brne _Wms2 dec r20 brne _Wms1 dec zl brne _Wms ret ;////// _waitus /////////////////////////// _wus: ldi r22,25 _wus1: dec r22 brne _wus1 dec zl brne _wus ret ;////// _Waits //////////////////////////// _Ws: mov zh,zl _Ws3: ldi r22,0x04 _Ws1: ldi zl,0xfa rcall _Wms dec r22 brne _Ws1 dec zh brne _Ws3 ret ;////// 8x8 unsigned multiplay //////////// Mpy8u: push zh clr zh ldi r19,0x08 lsr zl m8u1: brcc m8u2 add zh,r24 m8u2: ror zh ror zl dec r19 brne m8u1 pop zh ret ;////// 8/8 unsigned division ///////////// Div8u: Sub r22,r22 ldi r23,0x09 rjmp Div81 Div80: rol r22 cp r22,zl brcs Div81 Sub r22,zl Div81: rol r24 dec r23 brne Div80 Com r24 mov zl,r24 ret ;////// 16x16 unsigned multiplay ////////// Mp16u: clr r23 clr r22 ldi r21,0x10 lsr zh ror zl m16u1: brcc m16u2 add r22,r24 adc r23,r25 m16u2: ror r23 ror r22 ror zh ror zl dec r21 brne m16u1 ret ;////// 16/16 unsigned division /////////// Di16u: mov r22,zl mov r23,zh mov zl,r24 mov zh,r25 clr r24 sub r25,r25 ldi r20,0x11 d16u1: rol zl rol zh dec r20 brne d16u2 ret d16u2: rol r24 rol r25 sub r24,r22 sbc r25,r23 brcc d16u3 add r24,r22 adc r25,r23 clc rjmp d16u1 d16u3: sec rjmp d16u1 ;System Global Variables: 8 bytes ;User Global Variables: 63 bytes