Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 0
- jmp init
- org 0BH
- jmp PWM
- org 23H
- jmp serial
- init:
- MOV SCON, #01010000B ; konf portu szeregowego
- MOV TH1,#253 ;do baud 9600 i 12MHz
- MOV TH0, #253
- SETB ES ;zezwolenie na przerwania
- SETB EA
- SETB ET0
- MOV TMOD, #00100001B ; tryby timera, tim1 - 2 tim0 - 1
- SETB PS ; ustawienie priorytetu serial
- SETB TR1 ;start timera z serial
- MOV R0, #100 ; rozdzielczosc PWM (czas timera dla 1% wypełnienia)
- main:
- jmp main
- serial:
- MOV R1, SBUF ;odczytanie z seriala
- CLR RI ;usuniecie flagi przerwania receive
- CLR TR0 ;restart PWM
- CLR F0
- SETB TR0
- MOV C, R1.1 ; przypisanie bitu status_out
- MOV P1.1, C
- reti
- PWM:
- PUSH A
- JB F0, ON
- SETB P1.0 ;pwm on
- MOV B, R0 ;obliczanie czasu trwania on
- MOV A, R1
- ANL A, 01111111B ;wywalenie bitu status z wartości
- MUL A,B ;mnożenie wypełeninie razy czas 1%
- MOV R3, A
- MOV R4 B
- MOV A, #255 ;odjęcie od 255 bo liczy do góry
- MOV B, #255
- SUBB A, R3
- SUBB B, R4
- MOV TH0, B ;ustawienie timera na na obliczony czasu
- MOV TL0, A
- CLR F0 ;ustawione, aby kolejnym razem wyłączyć
- POP A
- reti
- ON:
- CLR P1.0 ;pwm off
- MOV B, R0 ; obliczenie czasu trwania off
- MOV A, R1
- ANL A, 01111111B
- MOV R6, A
- MOV A, #100 ;gościu mówił że maksymalna wartość to 100
- SUBB A, R6
- MUL A,B
- MOV R3, A
- MOV R4 B
- MOV A, #255
- MOV B, #255
- MOV TH0, B
- MOV TL0, A
- SETB F0 ;ustawione aby kolejnym razem włączyć
- POP A
- RETI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement