Hì hì..
Trong 2 tuần qua em cũng đã tìm được cách chạy PWM rồi. Đây là đoạn code cho PWM
PWM_norm
;set PWM period=1000Hz=0.001s at 50%duty cycle
;Fosc=8Mhz and TMR2 prescale value=16
;1. Set period for PWM=1000Hz
;PR2 = (PWM period)/(4*Tosc*TMR2 prescale value) - 1
;PR2 = 0.001/[4 * (1/8)e-6 * 16) - 1 => PR2 = 124
movlw d'124' ;set period for PWM=1000Hz
movwf PR2
;2. Set duty cycle by writting CCPR1L register and CCPR1CON<5:4> bits
;PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale Value
;CCPR1L:CCP1Con<5:4> = PWM Duty Cycle / (Tosc * TMR2 Prescale)
;PWM Duty Cycle = 50% of Period
;PWM Duty Cycle = 50% of 0.001 = 0.0005
;CCPR1L:CCP1Con<5:4> = 0.0005 / [(1/8)e-6 * 16] = 250
;=> CCPR1L:CCP1Con<5:4> = 0011111010
bcf CCP1CON, DC1B0 ;set bit 0 = 1
bsf CCP1CON, DC1B1 ;set bit 1 = 1
movlw b'00111110' ;set duty cycle and enable PWM
movwf CCPR1L
;3. Make the CCP1 pin an output by clearing the TRISC<2> bit
movlw b'11111011' ;set PORTC as an CCP1
andwf TRISC
;4. Set The TMR2 prescale value and enable TMR2 by writing to T2CON
movlw b'00000111' ;set prescale = 1:16 and enable TIMER2
movwf T2CON
return
Vì hiện tại em đang làm project về con "line-following robot" nên mới dùng đến PWM để điều khiển tốc độ của con robot, do thấy lâu quá kô ai trả lời nên em tự đọc luôn.
Hiện nay con robot của em đã chạy (mừng quá) cám ơn mọi người (đặc biệt là anh namqn) đã giúp em nhiều từ 1 người chẳng biết gì về PIC sau 1 tuần đã có thể lập trình PIC ở mức cản bản. Cám ơn mọi người nhiều lắm lắm
