Mình đã từng lập trình 8051, Asembly điều khiển 1 chiếc xe tự động dò đường trên hình bàn cờ 8x8.
Về nguyên lý thì mình không nói lại nữa.
Đây là đoạn code PWM để điều khiển tốc độ 2 động cơ Trái & Phải (xung đã được băm đưa vào 2 chân điều khiển của L298 đk động cơ):
ORG 0000H ; Diem nhap sau khi RESET
LJMP MAIN ; Nhay den chuong trinh chinh
ORG 000BH ; Diem nhap vecto ngat Timer 0
LJMP PWM ; Bam xung, Trinh phuc vu ngat Time
...
MOV TMOD,#12H ; Chon Timer0 che do 2 phuc vu PWM
MOV TH0,#196 ; Tao thoi gian tre 255-196+1=60 chu ky may x 1us/chu ky = 60us
SETB ET0 ; Cho phep ngat Timer 0
SETB TR0 ; Khoi dong Timer0
...
;*****CHUONG TRINH DIEU XUNG PWM******
PWM:
MOV NHO_C,C
MOV NHO_A,A
CJNE R0,#31,PWM_TRAI ; Neu R0 khac 31 thi chay PWM_TRAI
MOV R0,#1 ; Neu R0 = 31 thi dat R0 = 1
PWM_TRAI:
CLR C ; Gia tri co C la 0/1, quy dinh dong co chay hay khong
MOV A,VAN_TOC_BANH_TRAI ; Gan A = R1
SUBB A,R0 ; Tru A cho R0, muc dich la kiem tra xem A > hay < R0 de gan gia tri co C 0 hay 1
MOV BANH_TRAI,C ; Tao 1 hay 0 cho DCTrai
PWM_PHAI:
CLR C
MOV A,VAN_TOC_BANH_PHAI
SUBB A,R0
MOV BANH_PHAI,C
THOATPWM:
INC R0 ; Tang bien dem R0: R0=R0+1
MOV C,NHO_C
MOV A,NHO_A
RETI ; Ket thuc chuong trinh ngat
;===============================================
(VAN_TOC_BANH_TRAI,PHAI: được load liên tục từ Main())
From *LBF*
Về nguyên lý thì mình không nói lại nữa.
Đây là đoạn code PWM để điều khiển tốc độ 2 động cơ Trái & Phải (xung đã được băm đưa vào 2 chân điều khiển của L298 đk động cơ):
ORG 0000H ; Diem nhap sau khi RESET
LJMP MAIN ; Nhay den chuong trinh chinh
ORG 000BH ; Diem nhap vecto ngat Timer 0
LJMP PWM ; Bam xung, Trinh phuc vu ngat Time
...
MOV TMOD,#12H ; Chon Timer0 che do 2 phuc vu PWM
MOV TH0,#196 ; Tao thoi gian tre 255-196+1=60 chu ky may x 1us/chu ky = 60us
SETB ET0 ; Cho phep ngat Timer 0
SETB TR0 ; Khoi dong Timer0
...
;*****CHUONG TRINH DIEU XUNG PWM******
PWM:
MOV NHO_C,C
MOV NHO_A,A
CJNE R0,#31,PWM_TRAI ; Neu R0 khac 31 thi chay PWM_TRAI
MOV R0,#1 ; Neu R0 = 31 thi dat R0 = 1
PWM_TRAI:
CLR C ; Gia tri co C la 0/1, quy dinh dong co chay hay khong
MOV A,VAN_TOC_BANH_TRAI ; Gan A = R1
SUBB A,R0 ; Tru A cho R0, muc dich la kiem tra xem A > hay < R0 de gan gia tri co C 0 hay 1
MOV BANH_TRAI,C ; Tao 1 hay 0 cho DCTrai
PWM_PHAI:
CLR C
MOV A,VAN_TOC_BANH_PHAI
SUBB A,R0
MOV BANH_PHAI,C
THOATPWM:
INC R0 ; Tang bien dem R0: R0=R0+1
MOV C,NHO_C
MOV A,NHO_A
RETI ; Ket thuc chuong trinh ngat
;===============================================
(VAN_TOC_BANH_TRAI,PHAI: được load liên tục từ Main())
From *LBF*
Comment