Em viết c.trình pwm cho con 8952,sử dụng ngắt timer để băm xung, dùng con trỏ để tạo độ rộng xung, mà em chỉ mới viết đc 1 bit. Muốn viết 8 bit thôi mà ko đc, em dùng cách quét để băm xung mà bi lệch nhiều quá ko đúng vs mong muốn.Nay em viết đoạn code 1 bit này mong anh chị giúp em thêm sao cho đc 8 bit em sẽ hậu tạ.
Code:
dorong equ 30h
ma equ 31h
sobit equ 32h
clk equ 33h
sosanh_vs1 equ 34h
sosanh_vs0 equ 35h
tocdo equ 36h
org 00h
jmp main
org 000bh
call ngat0
reti
org 001bh ; ngat T1
call ngat1
reti
org 0050h
main:
mov p0,#00h
mov p1,#00h
mov p2,#00h
mov p3,#00h
mov tmod,#00100010b
setb ie.7 ;cho phep toan cuc
setb ie.3 ; cho phep t1
setb ie.1 ; cho phep t0
mov ma,#80h
mov sosanh_vs1,#0ffh
mov sosanh_vs0,#00h
mov tocdo,#6
dim:
mov r0,#00h
mov dptr,#ma1
mov r4,#18
lai2:
mov clk,#00h
setb tr1
call delaydim
clr tr1
mov sosanh_vs1,#0ffh
mov sosanh_vs0,#00h
inc r0
djnz r4,lai2
jmp dim
;------------------------------
ngat0:
;chỗ này định làm quét mã mà ko đc xóa rồi.
;mov a,ma
;rr a
;mov ma,a
ret
;------------------------------
ngat1:
push acc
push 01h
mov b,#17 ;15 muc sang = 255/17 + 1 muc 0
mov a,r0
movc a,@a+dptr
mul ab
mov dorong,a
cjne a,#0,tiep
mov sosanh_vs1,#00h
inc dorong
jmp tiep1
tiep: cjne a,#255,tiep1
mov sosanh_vs0,#0ffh
dec dorong
tiep1: mov a,clk
jnb acc.0,dim0
dim1:
mov th1,dorong
mov a,ma
anl a,sosanh_vs1
mov p1,a
jmp exit_ngat1
dim0:
mov a,#255
subb a,dorong
mov th1,a
mov a,ma
anl a,sosanh_vs0
mov p1,a
exit_ngat1:
inc clk
pop 01h
pop acc
ret
delaydim:
push 05h
push 06h
push 07h
mov r5,tocdo
d1: mov r6,#150
d0: mov r7,#200
djnz r7,$
djnz r6,d0
djnz r5,d1
pop 07h
pop 06h
pop 05h
ret
;-------------------------------
ma1:
db 0
db 0
db 0
db 1
db 2
db 3
db 4
db 5
db 6
db 7
db 8
db 9
db 10
db 11
db 12
db 13
db 14
db 15
end
Comment