Ahoj
spolužák ze třídy si jako maturitní výrobek vyhlédl lab. zdroj řízený mcu pomocí PWM. Jenomže je tam použit starý mikráč a program je ještě v asm. Byl by velkej problém pro někoho, kdo umí v asm to přepsat pro modernější procesor?
;********************************************************************************
;* Program SIRZDR24.ASM *
;*Program nam riadi, mení výstupné napätie stabilizovaného zdroja na princípe *
;*šírkovej modulácie ( PWM ). Pre riadenie boô využitý mikrokontroler AT90S2313 *
;*fi ATMEL. Riadenie je realizované pomocou štiroch tlačitiek. Dva tlačitka nam *
;*umožňujú meniť, zvečšovať a zmenšovať napätie po krokoch t.j.približne 6 mV. *
;Tieto tlačitka sú pripojené na 0. 1. bit portu D. Ďalšie dva tlačitka nam *
;*umožňujú zmenu napätia po väčších skokoch, teda rýchlejšiu zmenu výstupného *
;*napätia. Uvedené riadenie je možno použiť na rôzne záťaže s ohľadom na dovo- *
;*lený prúdový odber koncového stupňa. * *
;********************************************************************************
.NOLIST
.INCLUDE "2313def.inc"
.LIST
.CSEG ;kódový segment
.DEF REG=r20 ;pracovný register
.DEF ACC=R19 ;akulátor = register r19
ldi reg,$00 ; PORT D = vstupný port
out ddrd,reg
LDI REG,RAMEND
OUT SPL,REG ;nastav SP na koniec RAM
LDI REG,$08
OUT DDRB,REG ;aktivuj portB na vystup
LDI REG,0b10000001 ;8bitová PWM
OUT TCCR1A,REG
LDI REG,0b00000011 ;preddelička 8
OUT TCCR1B,REG
CLR REG
OUT OCR1AH,REG ;OCR1AH=$00
ldi acc,$f0 ;počiatočný stav pre ACC ( sirku impulzov )
zac: sbis pind,0 ;tlačitko pripojené na 0.b
rjmp roz ;portu D - zväčšovanie šírky jemným
rcall caka ;krokom
opp1: sbic pind,0
rjmp opp1 ;ošetrenie zákmitov tlačitka
rjmp nac1
roz: sbis pind,1 ;tlačitko pripojené na 1. bit portu D
rjmp roz1 ;pre zmenšovanie šírky impulzov jjemným
rcall caka ;krokom
opp2: sbic pind,1
rjmp opp2 ;ošetrenie zákmitov tlačitka
rjmp nac2
roz1: sbis pind,4 ;tlačitko pripojené na 1. bit portu D
rjmp roz4 ;pre zmenšovanie šírky impulzov jjemným
rcall caka ;krokom
opp4: sbic pind,4
rjmp opp4 ;ošetrenie zákmitov tlačitka
rjmp nac4
roz4: sbis pind,5 ;tlačitko pripojené na 1. bit portu D
rjmp op1 ;pre zmenšovanie šírky impulzov jjemným
rcall caka ;krokom
opp5: sbic pind,5
rjmp opp5 ;ošetrenie zákmitov tlačitka
rjmp nac5
op1: clr reg ;vynulovanie reg. R31, vyssi byt porovnavacieho
adc r31,reg ;registra citaca/casovaca
out ocr1ah,reg ; "
out ocr1al,acc ;zapisanie obsahu acc do nizsieho bytu porovn.reg.
rjmp zac
nac1: ldi reg,$01 ;hodnota kroku ( 1 ) do acc
add acc,reg ;načitanie novej hodnoty do acc, pripočítanim kroku
cpi acc,$ff ;ak je väčšia hodnota ako 0EaH zapiš do acc číslo
brne op1 ; 0FFH - v skoku na návestie rovno0
rjmp rovn0
nac2: ldi reg,$01 ;hodnota kroku ( 1 ) do acc
sub acc,reg ;načitanie novej hodnoty do acc, odčítanim kroku
cpi acc,$00
brne op1 ;05H - v skoku na návestie rovno1
rjmp rovn1
nac4: ldi reg,$08 ;hodnota kroku (8 ) do acc
add acc,reg ;načitanie novej hodnoty do acc, pripočítanim kroku
cpi acc,$e0 ;ak je väčšia hodnota ako 0E0H zapiš do acc číslo
brsh rovn4 ; 0F0H - v skoku na návestie rovno4
rjmp op1
nac5: ldi reg,$08 ;hodnota kroku ( 4 ) do acc
sub acc,reg ;načitanie novej hodnoty do acc, odčítanim kroku
cpi acc,$09
brlo rovn5 ;08H - v skoku na návestie rovno5
rjmp op1
rovn0: ldi acc,$fe
rjmp op1
rovn1: ldi acc,$01
rjmp op1
rovn4: ldi acc,$f0
rjmp op1
rovn5: ldi acc,$09
rjmp op1
caka: ldi r17,$02 ; oneskorenie
nav1: dec r17
brne nav1
ret