![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#10 |
Đệ tử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 31
: |
PWM cho PIC16f877A
Sử dụng PIC chạy với thạch anh là 4MHz, tần số điều chế độ rộng xung là 1000Hz với duty cycle là 50%
;================================================= ======== 1/ thiết lập chu kì PWM (1000Hz=0.001S) bằng cách ghi vào thanh ghi PR2. Chu kì điều chế độ rộng xung(PWM Period)=(PR2+1)*4*Tosc*TMR2 Prescale value tỉ lệ TMR2 prescale là 1:4, thì ta có Tosc=1/4000000=2.5*10-7 ta cũng có PR2=(Period/(4*Tosc*TMR2 prescale))-1 nên: PR2=(0.001/(4*2.5*10-7*4))-1=249 bằng cách thiết lập như vậy ta có chương trình như sau ![]() ![]() bsf STATUS,PR0;change from bank 1 to bank 0 movlw d'249' movwf PR2 bcf STATUS,PR0 ;================================================= ======== 2/ thiết lập PWM duty cycle bằng cách ghi vào thanh ghi CCPR1L và hai bit 5 và 4 của thanh ghi CCP1CON. ta có công thức sau: PWM duty cycle= (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale value nên suy ra: CCPR1L:CCP1CON<5:4>=PWM duty cycle/(Tosc*TMR2 prescale) PWM duty cycle=50% của chu kỳ PWM duty cycle=50%*0.001=0.0005 CCPR1L:CCP1CON<5:4>=0.0005/(2.5*10-7*4) CCPR1L:CCP1CON<5:4>=500 Số 500 trong số nhị phân viết là:0111110100 vậy:CCPR1L=01111101 và CCP1CON<5:4>=00 do đó, ta có chương trình sau: movlw b'01111101' movwf CCPR1L bcf CCP1CON,CCP1X;set bit 1 bcf CCP1CON,CCP1Y;set bit 0 ;================================================= ======== 3/thiết lập chân CCP1 là một lối ra bằng cách xóa bit TRISC<2> bsf STATUS,PR0 movlw b'11111011' andwf TRISC bcf STATUS,PR0 ![]() ;================================================= ======== 4/thiết lập giá trị prescale TMR2 và cho phép TMR2 bằng cách ghi vào T2CON(thanh ghi điều khiển Timer2) Ta đã sử dụng từ trước là thiết lập giá trị prescale là 1:4. Prescale TMR2 là các bit 1 và 0 trong thanh ghi T2CON Để cho phép TMR2 là bit số 2. Ta có đoạn chương trình như sau: movlw b'00000101' ;Timer2 on,prescale=1:4 movwf T2CON ;================================================= ======== 5/Thiết lập CCP1 ở chế độ điều chế độ điều chế độ rộng xung (PWM module) movf CCP1CON,W andlw b'00110000' iorlw b'00001111';cho phép module PWM movwf CCP1CON ;================================================= ======== thế đã nhỉ, mệt quá, đi ngủ thôi ![]() Đã lâu không viết băng assembler, hôm nay tiện làm về điều khiển động cơ, thế là hứng lên viết mấy dòng, có lẽ có nhiều thếu sot, mong các bác góp ý cho em Khi nào em làm xong về điều khiển động cơ thì em sẽ port các sch lên diễn đàn cho cả nhà xem, rất mong cả nhà góp ý thân! |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |