noibuonsamac001

New Member

Download miễn phí Đồ án Lập trình PIC16F877A điều khiển tốc độ động cơ DC





PIC16F877A có tất cả 3 timer : timer0 (8 bit), timer1 (16 bit) và timer2 (8 bit).
4.1. Timer0
a/ Là bộ định thời hay bộ đếm có những ưu điểm sau:
 8 bit cho bộ định thời hay bộ đếm.
 Có khả năng đọc và viết.
 Có thể dùng đồng bên trong hay bên ngoài.
 Có thể chọn cạnh xung của xung đồng hồ.
 Có thể chọn hệ số chia đầu vào (lập trình bằng phần mền).
 Ngắt tràn.
b/ Hoạt động của Timer 0:
 Timer 0 có thể hoạt động như một bộ định thời hay một bộ đếm.Việc chọn bộ định thời hay bộ đếm có thể được xác lập bằng việc xoá hay đặt bít TOCS của thanh ghi OPTION_REG<5>.
 Nếu dùng hệ số chia xung đầu vào thì xoá bit PSA của thanh ghi OPTION_REG<3>.
 Trong chế độ bộ định thời được lựa chọn bởi việc xoá bit T0CS (OPTION REG<5>), nó sẽ được tăng giá trị sau một chu kỳ lệnh nếu không chọn hệ số chia xung đầu vào.Và giá trị của nó được viết tới thanh ghi TMR0.
 Khi dùng xung clock bên ngoài cho bộ định thời Timer0 và không dùng hệ số chia clock đầu vào Timer0 thì phải đáp ứng các điều kiện cần thiết để có thể hoạt động đó là phải bảo đảm xung clock bên ngoài có thể đồng bộ với xung clock bên trong (TOSC).
 



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

độ SLEEP.
d/ Các thanh ghi liên quan đến Timer0 bao gồm:
Thanh ghi OPTION_REG : điều khiển hoạt động của Timer0
Hình 8: Cấu trúc thanh ghi OPTION_REG REGISTER điều khiển hoạt động của Timer0
bit 5 TOCS lựa chọn nguồn clock
1=Clock ngoμi từ chân T0CKI
0=Clock trong Focs/4
bit 4 T0SE bit lựa chon s−ờn xung clock
1=Timer 0 tăng khi chân T0CKI tử cao xuống thấp(s−ờn xuống)
0=Timer 0 tăng khi chân T0CKI tử thấp lên cao(s−ờn xuống)
bit 3 PSA bit gán bộ chia xung đầu vμo
1=gán bộ chia Prescaler cho WDT
0=gán bộ chia Prescaler cho Timer 0
bit 2:0 PS2:pS1 lựa chọn hệ số chia hệ số xung theo bảng sau:
PS2:pS0
Timer0
WDT
000
1:2
1:1
001
1:4
1:2
010
1:8
1:4
011
1:16
1:8
100
1:32
1:16
101
1:64
1:32
110
1:128
1:64
111
1:256
1:128
Thanh ghi TMR0 đại chỉ 01h và 101h : chứa giá trị của bộ định thời Timer0
Thanh ghi INTCON : cho phép ngắt hoạt động
Hình 9: Cấu trúc thanh ghi INTCON cho phép ngắt Timer0 hoạt động
Thanh ghi chứa các bit điều khiển và các bít cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrupt_on_change tại các chân của PORTB.
Bit 7 GIE Global Interrupt Enable bit
GIE = 1 cho phép tất cả các ngắt.
GIE = 0 không cho phép tất cả các ngắt.
Bit 6 PEIE Pheripheral Interrupt Enable bit
PEIE = 1 cho phép tất cả các ngắt ngoại vi.
PEIE = 0 không cho phép tất cả các ngắt ngoại vi.
Bit 5 TMR0IE Timer0 Overflow Interrupt Enable bit
TMR0IE = 1 cho phép ngắt Timer0.
TMR0IE = 0 không cho phép ngắt Timer0.
Bit 4 RBIE RB0/INT External Interrupt Enable bit
RBIE = 1 cho phép tất cả các ngắt ngoại vi RB0/INT
RBIE = 0 không cho phép tất cả các ngắt ngoại vi RB0/INT
Bit 3 RBIE RB Port change Interrupt Enable bit
RBIE = 1 cho phép ngắt RB Port change
RBIE = 0 không cho phép ngắt RB Port change
Bit 2 TMR0IF Timer0 Interrupt Flag bit
TMR0IF = 1 thanh ghi TMR0 bị tràn (phải xóa cờ hiệu bằng chương trình).
TMR0IF = 0 thanh ghi TMR0 chưa bị tràn.
Bit 1 INTF BR0/INT External Interrupt Flag bit
INTF = 1 ngắt RB0/INT xảy ra (phải xóa cờ hiệu bằng chương trình).
INTF = 0 ngaột RB0/INT chửa xaỷy ra.
Bit 0 RBIF RB Port Change Interrupt Flag bit
RBIF = 1 ít nhất có một chân RB7:RB4 có sự thay đổi trạng thái. Bít này phải được xóa bằng chương trình sau khi đã kiểm tra lại các giá trị chân tại PORTB.
RBIF = 0 không có sự thay đổi trạng thái các chân RB7:RB4.
4.2.TIMER1
a/Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi 8 bit TMR1H:TMR1L. Cờ ngắt của Timer1 là bit TMR1IF, bit điều khiển của Timer1 là TRM1IE.Cặp thanh ghi của TMR1 sẽ tăng từ 0000h lên đến FFFFh rồi sau đó tràn về 0000h. Nếu ngắt được cho phép, nó sẽ xảy ra khi khi giá trị của TMR1 tràn từ FFFFh rồi về 0000h, lúc này TMR1IF sẽ bật lên.
b/ Timer1 có 3 chế độ hoạt động :
Chế độ hoạt động định thời đồng bộ: Chế độ được lựa chọn bởi bit TMR1CS. Trong chế độ này xung cấp cho Timer1 là Fosc/4, bit T1SYNC không có tác dụng.
Chế độ đếm đồng bộ: trong chế độ này, giá trị của timer1 sẽ tăng khi có xung cạnh lên vào chân T1OSI/RC1. Xung clock ngoại sẽ được đồng bộ với xung clock nội, hoạt động đồng bộ được thực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler).
Chế độ đếm bất đồng bộ:chế độ này xảy ra khi bit T1SYNC được set. Bộ định thời sẽ tiếp tục đếm trong suốt quá trình ngủ (Sleep) của vi điều khiển và có khả năng tạo một ngắt khi bộ định thời tràn và làm cho vi điều khiển thoát khỏi trạng thái ngủ.
c/ Các thanh ghi liên quan đến Timer1 bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (2 bit GIE và PEIE).
PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF).
PIE1 (địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE).
Ba thanh ghi vừa nêu trên sẽ được trình bày ở phần chương trình ngăt của PIC
TMR1L (địa chỉ 0Eh): chứa giá trị 8 bít thấp của bộ đếm Timer1.
TMR1H (địa chỉ 0Eh): chứa giá trị 8 bít cao của bộ đếm Timer1.
Hai thanh ghi TMR1L và TMR1H là 2 thanh ghi chứa dữ liệu 16 bit (lần lượt chứa 4 bit thấp và 4 bit cao) của bộ đếm Timer1
T1CON (địa chỉ 10h): xác lập các thông số chi Timer
Hình 10: Cấu trúc thanh ghi T1CON điều khiển hoạt động của Timer1
bit 7,6 không sử dụng
bit 5,4 T1CKPS1: T1CKPS0 lựa chọn hệ số chia xung vào.
T1CKPS1 T1CKPS0
00
1:1
01
1:2
10
1:4
11
1:8
bit 3 T1OSCEN bit điều khiển bộ dao động Timer1
1= Bộ dao động hoạt động
0= Bộ dao động không hoạt động
bit 2 bit điều khiển xung clock ngoμi đồng bộ
khi TMR1CS=1
bit2=0 có đồng clock ngoai
=1 không đồng bộ clock ngoài
khi TMR1CS=0 bit này không có tác dụng
bit 1 TMR1CS bit lựa chọn nguồn xung clock vào
TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên)
TMR1CS=0 clock trong Fosc/4
bit 0 bit bật tắt Timer
1= Timer 1 enable
0=Timer 1 Disable
4.3.Timer 2
a/ Timer2: là bộ định thời 8 bit bao gồm một bộ tiền định (prescaler), một bộ hậu định Postscaler và một thanh ghi chu kỳ viết tắt là PR2. Việc kết hợp timer2 với 2 bộ định tỉ lệ cho phép nó hoạt động như một bộ đinh thời 16 bit. Module timer2 cung cấp thời gian hoạt động cho chế độ điều biến xung PWM nếu module CCP được chọn.
Hình 11: Sơ đồ khối Timer2
b/ Hoạt động của bộ Timer2
Timer2 được dùng chủ yếu ở phần điều chế xung của bộ CCP, thanh ghi TMR2 có khả năng đọc và viết, nó có thể xóa bằng việc reset lại thiết bị. Đầu vào của xung có thể chọn các tỷ số sau; 1:1; 1:4 hay 1:16 việc lựa chọn các tỷ số này có thể điều khiển bằng các bit sau T2CKPS1 và bit T2CKPS0.
Bộ Timer2 có 1 thanh ghi 8 bít PR2 . Timer 2 tăng từ gi trị 00h cho đến khớp với PR2 và tiếp theo nó sẽ reset lại gi trị 00h và lệnh kế tiếp thực hiện.Thanh ghi PR2 là một thanh ghi có khả năng đọc và khả năng viết.
c/ Thanh ghi T2CON: điều khiển hoạt động của Timer2
Hình 12: Cấu trúc thanh ghi T2CON điều khiển hoạt động của Timer2
bit 7 không sử dụng
bit 6-3 TOUTPS3: TOUTPS0 bit lựa chọn hệ số đầu ra Timer 2
0000=1:1
0001=1:2
0010=1:3

1111=1:16
bit 2 TMR2ON bit bật tắt hoạt động Timer 2
1= enable
0= disable
bit 1- 0 T2CKPS1:T2CKPS0 chọn hệ chia đầu vào
00 = 1:1
01 = 1:4
1x=1:16
5. NGẮT (INTERRUPT):
PIC16F877A có đến 14 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2.Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.
Trong một thời điểm chỉ có một chương trì nh ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được...
 

atun_tt

New Member
Chào anh!
a có thể gửi em project này được không?
cho em hỏi là tại sao em viết 2 hàm ngắt là ngắt RB0 và ngắt timer0 bằng MPLAB - hitech C thì nó báo lỗi?
 

daigai

Well-Known Member
Trích dẫn từ atun_tt:
Chào anh!
a có thể gửi em project này được không?
cho em hỏi là tại sao em viết 2 hàm ngắt là ngắt RB0 và ngắt timer0 bằng MPLAB - hitech C thì nó báo lỗi?


Bạn download tại đây nhé
 

atun_tt

New Member
Anh oi, em moi hoc VDk, mà tại chưa vẽ được layout của mạch này, a có k, cho em xin được không, em muốn tham khảo và làm thử mạch này ạ, Thank anh nhiều nha
 

Các chủ đề có liên quan khác

Top