: Việc thiết kế các ứng dụng của PIC với điện thoại di động, IC thu phát DTMF rất phong phú và phức tạp, do vậy trong đề tài này em tập trung giải quyết các vấn đề chính: Thiết kế phần cứng điều khiển thiết bị điện thông qua IC MT8870. Điều khiển bậttắt thiết bị điện.. Hiển thị trên LED để kiểm tra kết nối .
Trang 1Ngày nay, ngành công nghệ thông tin đã đạt được những tiến bộ vượt bậc với sự ra đời của ngành công nghiệp phần cứng, cũng như phần mềm việc giải quyết các công việc giúp con người trở nên dễ dàng, thuận tiện và nhanh chóng
Cùng với sự phát triển của ngành công nghệ thông tin là sự phát triển mạnh mẽ của các hệ thống thông tin liên lạc, sự ra đời của các dịch vụ điện thoại mà cụ thể là điện thoại
di động với ưu thế dễ dàng hoạt động khi di chuyển mọi lúc mọi nơi Chính vì vậy ngoài việc dùng điện thoại để liên lạc một vấn đề được đặt ra là chúng ta có thể sử dụng điện thoại như một chiếc Remote để điều khiển các thiết bị điện từ xa Từ yêu cầu trên và những kiến thức em được học ở trường em đã lựa chọn đề tài: “Điều khiển thiết bị điện điện sử dụng điện thoại di động.”
Đề tài: Việc thiết kế các ứng dụng của PIC với điện thoại di động, IC thu phát DTMF rất phong phú và phức tạp, do vậy trong đề tài này em tập trung giải quyết các vấn
đề chính:
Thiết kế phần cứng điều khiển thiết bị điện thông qua IC MT8870
Điều khiển bật/tắt thiết bị điện
Hiển thị trên LED để kiểm tra kết nối
Trang 2NHẬN XÉT CỦA THẦY
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 3
CHƯƠNG 1……….……….7
GIỚI THIỆU ĐỀ TÀI……… 7
1.1 Ý tưởng bài toán 7
1.2 Cấu tạo cơ bản và nguyên lý hoạt động của điện thoại 8
1.3 Tín hiệu DTMF 8
1.3.1 Định nghĩa 8
1.3.2 KEYPAD 9
1.3.3 IC MT8870 thu tín hiệu DTMF 11
CHƯƠNG 2 15
TÌM HIỂU VI ĐIỀU KHIỂN PIC 16F84A 15
2.1 Giới thiệu PIC 16F84A 15
2.2 Sơ đồ bố trí chân 16
2.3 Sơ đồ khối 17
2.4 Cấu tạo bộ dao động 20
2.5 Hoạt động RESET 22
Trang 42.6 Tổ chức bộ nhớ 24
2.7 Cấu trúc cổng I/O 37
2.7.1 PORTA Error! Bookmark not defined. 2.7.2 PORTB 43
2.8 Bộ định thời(TMRO)………47
2.9 Watch dog timer(WDT)………48
2.10 Ngắt………49
CHƯƠNG 3 Tập lệnh của PIC16F84A 51
3.1 Bảng tóm tắt lệnh của PIC16F84A 51
3.2 Định dạng tổng quát của lệnh 53
CHƯƠNG 4 55
4.1 Ý tưởng 55
4.2 Sơ đồ khối của mạch……….55
4.3 Nguyên lý hoạt động 56
4.4 Thiết kế phần cứng 57
Trang 54.5 Thiết kế phần mềm 63
CHƯƠNG 5……… …… 65
Kết luận và hướng phát triển đề tài……… 65
5.1 Kết quả… ……….65
5.2 Kết luận……… 65
Trang 6
CHƯƠNG 1
GIỚI THIỆU ĐỀ TÀI
1.1 Ý tưởng đề tài
Ngày nay, công nghệ điện thoại di động ngày một phát triển mạnh Điện thoại trở thành một nhu cầu không thể thiếu được của con người trong nhịp sống hiện đại chiếc điện thoại gần như lúc nào cũng được chúng ta mang theo bên người Bởi vậy ngoài khả năng nghe, gọi, nhắn tin, truy cập internet, giải trí…vv thì một câu hỏi được đặt ra là: Có thể dùng điện thoại di động để điều khiển các thiết bị điện như Tủ lạnh, TV, điều hoà nhiệt độ, máy tính, lò vi sóng, quạt điện, đèn chiếu sáng, bình nóng lạnh….vv không
Xuất phát từ những yêu cầu thực tế cuộc sống đề tài của em nghiên cứu thu tín hiệu DTMF từ điện thoại di động để từ đó giải mã và đưa ra được các tín hiệu điều khiển bật /tắt thiết bị điện.Với khả năng này chúng ta chỉ cần mang điện thoại ra và gọi điện nhập mã điều khiển là có thể yên tâm các thiết bị điện chúng ta đã ở trạng thái tắt/bật như
ý muốn
Trang 71.2 Cấu tạo cơ bản và nguyên lý hoạt động của điện thoại
1.2.1 cấu tạo cơ bản
Gồm ba phần chính sau:
Phần chuyển đổi mạch điện: Phần này gồm hệ thống lá mạ tiếp điểm và có nhiệm vụ đóng mở mạch điện khi có yêu cầu
Phần thu và phát tín hiệu gọi: Phần này gồm hai phần chính là máy điện quay tay
có nhiệm vụ phát tín hiệu gọi lên đường truyền và phần chuông máy có nhiệm vụ biến dòng tín hiệu gọi thành tín hiệu gọi
1.2.2 Nguyên lý hoạt động
Khi ta thực hiện cuộc gọi dao động âm thanh của tiếng nói sẽ tác động vào màng rung của mic làm xuất hiện dòng điện biến đổi tương ứng trong mạch Dòng điện biến đổi
này được truyền trên đường dây điện thoại và được chuyển mạch đến máy điện thoại
được gọi, làm cho màng rung của loa dao động, lớp không khí trước màng sẽ dao động theo phát ra âm thanh tác động đến tai người nghe và quá trình truyền dẫn ngược lại cũng tương tự
Trang 8âm hiệu nói, sự phân tách rõ ràng giữa hai loại này là rất cần thiết Ví dụ như hai tần số
750 và 500 là hai tần số không thể kết hợp thành tín hiệu DTMF vì có cùng ước số chung
là 250, hai tần số này là hai âm thanh cùng âm
Keypad chuẩn là một ma trận chữ nhật gồm ba cột và bốn hàng (3x4) tạo nên tổng cộng là 12 phím nhấn: trong đó có 10 phím cho chữ số (từ 0 đến 9), hai phím đặc biệt là
‘*’ và ‘#’ Mỗi hàng trên bàn phím bấm được gán cho một tần số tín hiệu thấp, mỗi cột được gán cho tần số tín hiệu cao Mỗi một phím sẽ có một tín hiệu DTMF riêng được tổng hợp bởi hai tần số tương ứng với hàng và cột mà phím đó đang đứng Những tần số này đã được lựa chọn cẩn thận sao cho có lợi cho việc thiết kế bộ lọc và dễ dàng truyền đi trên đường dây điện thoại
Trang 9Hình 1.2: Bàn phím chuẩn 12 nút
Ngày nay, người ta còn cho thêm một vài phím để tạo nên bảng mã được nằm trong một ma trận (4x4) với mỗi hàng miêu tả bằng một tần số thấp và mỗi cột miêu tả bằng một tần số cao
Hình 1.3: Bàn phím mở rộng 16 phím
Trang 101.3.3 IC MT8870 thu tín hiệu DTMF
Hình 1.4: IC thu DTMF MT8870
Định nghĩa các chân như sau:
- PIN 1 (IN+) Non- Investing op-amp: Ngõ vào không đảo
- PIN 2 (IN-) Investing op-amp: Ngõ vào đảo
- PIN 3 (GS) Gain Select: Giúp truy xuất ngõ ra của bộ khuếch đại vi sai đầu cuối qua điện trở hồi tiếp
- PIN 4 (Vref ) Reference Voltage: Ngõ ra (Thông thường bằng VDD/2)
- PIN 5 (INH) Inhibit: Ngõ vào (Khi chân này ở mức logic cao thì không nhận được ký tự A,B,C ở ngõ ra)
- PIN 6 ( PWDN) Power down: Ngõ vào tác động mức cao (Khi chân này tác động thì sẽ cấm mạch dao động và IC 8870 hoạt động)
- PIN 7 (OSC 1): Clock ngõ vào MHz
- PIN 8 (OSC 2): Clock ngõ ra (Nối hai chân 7 và 8 với thạch anh 3.579545 MHz, để tạo một mạch dao động nội)
- PIN 9 (Vss): Nối GND
- PIN 10(TOE) Three Stage Output Enable: Ngõ vào, Ngõ ra Q1-Q4 hoạt động khi TOE ở mức cao
Trang 11- PIN 11-14 từ Q1-Q4: Ngõ ra (khi TOE ở mức cao các chân này cung cấp
mã tương ứng với các cặp Tone dò tìm được theo bảng chức năng Khi TOE
ở mức thấp dữ liệu ngõ ra ở trạng thái trở kháng cao)
- PIN 15 (STD) Delayed Steering: Ngõ ra, ở mức cao khi gặp tần số Tone đã được ghi nhận và gõ ra chốt thích hợp, trở về mức thấp khi điện áp trên ST/GT nhỏ hơn điện áp ngưỡng VTST.
- PIN 16 (EST): Early Steering (ngõ ra), chân này lên mức [1] khi bộ thuật toán nhận được cặp tone và trở về mức[0] khi mất Tone
- PIN 17 (ST/GT): Steering Input /Guard tune output (ngõ ra), khi điện áp Vc lớn hơn VTST thì ST sẽ điều khiển dò tìm cặp Tone và chốt ngõ ra
- PIN 18 (VDD): Điện áp cung cấp, thường là +5V
IC nhận tín hiệu DTMF từ đường điện thoại qua chân 2 (IN -), sau khi thực hiện giải mã nó đưa dữ liệu ra 4 chân (từ chân 11 đến chân 14) dưới dạng 4 bit nhị phân
Trang 12Hình 1.5: Sơ đồ khối của MT8870
Trang 14
CHƯƠNG 2 KIẾN TRÚC PHẦN CỨNG PIC16F84A
2.1 Giới thiệu PIC16F84A
PIC16F84A là một vi điều khiển 8 bit sử dụng cấu trúc RISC ( Reduced Instruction Set Computer = Máy tính có tập lệnh rút ngọn ) Các bus dữ liệu và lệnh riêng biệt theo cấu trúc Harvard cho phép từ lệnh có độ dài 14 bit trong khi một từ dữ liệu có
độ dài 8 bit Vùng ngăn xếp có độ sâu 8 mức và độc lập với bộ nhớ RAM
Các đặc điểm
+ Có 35 lệnh đơn
+ Mỗi lệnh được thực hiện trong một chu kỳ máy ( ngoại trừ các lệnh rẽ nhánh được thực hiện trong hai chu kỳ máy )
+ Bộ nhớ chương trình : 1024 từ, mỗi từ có độ dài 14 bit
+ Bộ nhớ dữ liệu RAM : 68 byte, mỗi byte có độ dài 8 bit
+ Bộ nhớ dữ liệu EEPROM : 64 byte, mỗi byte có độ dài 8 bit
+ 16 thanh ghi có chức năng đặc biệt
+ 13 chân xuất/nhập được chia thành 2 port Port A có 5 chân, port B có 8 chân + Có 4 nguồn ngắt
Ngắt ngoài trên chân RB0/INT
Hoàn thành việc ghi dữ liệu vào EEPROM
Ngắt tràn của bộ định thời TMR0
Port B thay đổi trạng thái trên các chân RB< 7:4 >
Các tính năng
+ PIC16F84A có thể giao tiếp và điều khiển thiết bị ngoại vi thông qua các chân xuất/nhập
+ Có thể đáp ứng các mạch đòi hỏi thời gian thực
+ Sử dụng công nghệ CMOS nên dòng sử dụng thấp 20mA
+ Có thể lựa chọn bộ dao động
+ Reset
Chức năng Reset PIC trong khi nguồn cung cấp chưa ổn định Khi bật nguồn thì bộ dao động thạch anh lúc đầu chưa ổn định do đó ở thời gian đầu cần phải Reset PIC cho đến khi bộ dao động thạch anh ổn định Có hai bộ định thời làm trễ lúc bật điện, một là bộ định thời khởi động bộ dao động, hai là Power-up Timer (PWRT) cung cấp khoảng trễ cố định là 72 ms chỉ khi bật điện
Power-on Reset (POR)
Power-up Timer (PWRT)
Bộ định thời khởi động bộ dao động
+ Ngắt
+ Watchdog Timer (WDT)
Trang 15Chế độ Watchdog Timer chỉ được chọn hoặc tắt thông qua các bit cấu hình Chức năng này dùng để Reset PIC hay đánh thức PIC ( khi ở chế độ SLEEP) sau một khoảng thời gian
+ Chế độ SLEEP
Khi chế độ này được thực hiện nó làm cho PIC ngưng xử lý chương trình ứng dụng Chế độ này đưa PIC vào trạng thái nghỉ tạm thời với một dòng tiêu thụ rất thấp Có thể cho PIC hoạt động trở lại bằng 3 cách : reset tại chân MCLR , cho bộ Watchdog timer hoạt động, dùng ngắt ngoài
+ Sự bảo vệ mã
2.2 Sơ đồ bố trí chân
PIC16F84A có tất cả 18 chân thường được tìm thấy là loại DIP 18 nhưng cũng có thể tìm thấy loại SMD, loại này có kích thước nhỏ hơn DIP DIP là từ viết tắt của
Dual In Package, SMD là từ viết tắt của Surface Mount Devices
Hình 1 : Sơ đồ bố trí chân PIC16F84A
Ý nghĩa các chân :
Chân 1: RA2 Chân thứ hai của port A, là chân nhập/xuất
Chân 2: RA3 Chân thứ ba của port A, là chân nhập/xuất
Chân 3: RA4/T0CKI Chân thứ tư của port A, là chân nhập/xuất T0CKI chọn
ngõ vào Clock tới bộ định thời TMR0
Chân 4: MCLR Ngõ vào Reset vi điều khiển, tích cực mức thấp và còn dùng để
lập trình cho vi điều khiển với điện áp lập trình là 13V
Chân 5: Vss Chân nối mass
Chân 6: RB0/INT Chân thứ 0 của port B, là chân xuất/nhập, ngoài ra còn có chức năng là chân ngắt ngoài
Chân 7:RB1 Chân thứ nhất của port B, là chân nhập/xuất
Chân 8:RB2 Chân thứ hai của port B, là chân nhập/xuất
Chân 9:RB3 Chân thứ ba của port B, là chân nhập/xuất
Chân 10:RB4 Chân thứ tư của port B, là chân nhập/xuất
Chân 11:RB5 Chân thứ năm của port B, là chân nhập/xuất
Trang 16Chân 12:RB6 Chân thứ sáu của port B, là chân nhập/xuất Khi lập trình nó là
đường ‘clock’
Chân 13:RB7 Chân thứ bảy của port B, là chân nhập/xuất Khi lập trình nó là
đường dữ liệu
Chân 14:V DD Chân cung cấp nguồn +5V
Chân 15:OSC2/CLKOUT Chân nối tới bộ dao động
Chân 16:OSC1/CLKOUT Chân nối tới bộ dao động
Chân 17:RA0 Chân thứ 0 của port A, là chân xuất/nhập
Chân 18:RA1 Chân thứ nhất của port A, là chân xuất/nhập
2.3 SƠ ĐỒ KHỐI
Hình 2 : Sơ đồ khối PIC16F84A
Đơn vi xử lý trung tâm ( Central Processing Unit) CPU
Đơn vị xử lý trung tâm ( CPU ) là bộ não của vi điều khiển, nó có nhiệm vụ phát hiện và tìm nạp thứ tự lệnh cần để thực hiện, mã hoá lệnh đó và cuối cùng nó cho lệnh này thực hiện
Trang 17Hình 2.1 : Sơ đồ khối CPU
CPU kết nối với tất cả các bộ phận của vi điều khiển tạo thành một khối thống nhất Chức năng quan trọng nhất của CPU là đọc và giải mã các lệnh chương trình Khi ta viết một chương trình, chương trình này bao gồm các dòng lệnh ví dụ
MOVLW 0x20 Tuy nhiên, vi điều khiển sẽ không hiểu các ký tự này mà nó chỉ làm việc với các trạng thái ‘0’ và ‘1’, vì vậy ta cần một chương trình biên dịch các dòng lệnh này thành dãy ‘0’ và ‘1’ như là chương trình biên dịch hợp ngữ Như vậy khi nạp vào bộ nhớ chương trình nó sẽ được CPU giải mã thành các lệnh Khi các lệnh này chỉ định sự chuyển tiếp dữ liệu từ bộ nhớ này đến bộ nhớ khác, từ bộ nhớ lên các port hoặc một vài sự tính toán khác, CPU phải được kết nối với tất cả các bộ phận của vi điều khiển, sự kết nối này được thực hiện qua bus dữ liệu và bus địa chỉ
Đơn vị số học – logic ( Arithmetic Logic Unit) ALU
ALU thực hiện các thao tác như cộng, trừ, di chuyển ( trái hay phải trong một thanh ghi ) và các phép logic cơ bản PIC16F84A bao gồm một ALU 8 bit và thanh ghi W
8 bit
Trang 18Hình 2.2 : Sơ đồ khối ALU
Ở các lệnh có hai toán hạn, thông thường 1 toán hạn là thanh ghi W và toán hạn kia có thể là một hằng số hoặc là một trong các thanh ghi GPR hay SFR GPR- General Purposes Registers là các thanh ghi mục đích chung và SFR-Special
Function Registers là các thanh ghi có chức năng đặc biệt
Ở các lệnh có một toán hạn, toán hạn này có thể là thanh ghi W hoặc một thanh ghi khác Khi một phép cộng trong hoạt động số học và logic, ALU điều khiển các bit trạng thái ( các bit này trong thanh ghi trạng thái ‘STATUS’) Sự thực hiện của một vài lệnh sẽ ảnh hưởng đến các bit trạng thái Sự ảnh hưởng này phụ thuộc vào
kết quả của lệnh đó, ALU có thể ảnh hưởng đến giá trị của các bit C (Carry), DC (Digit Carry), Z (Zero) trong thanh ghi trạng thái (STATUS)
Thanh ghi chỉ lệnh ( Instruction Register)
Thanh ghi này chứa mã lệnh đọc từ bộ nhớ chương trình Khi thực hiện việc ghi mã lệnh từ bộ nhớ chương trình tới thanh ghi chỉ lệnh thì địa chỉ của mã lệnh này được đọc từ bộ đếm chương trình
Giải mã và điều khiển lệnh (Instruction Decode & Control)
Khối này có nhiệm vụ giải mã nội dung của thanh ghi chỉ lệnh thành lệnh và nó thi hành theo nội dung của lệnh đó
Thanh ghi W ( W reg)
Đây là thanh ghi làm việc, nó dùng để lưu trữ tạm thời nội dung của ALU Thanh ghi W cần thiết cho các hoạt động tính toán Nội dung của thanh ghi này có thể được chuyển đến các thanh ghi khác và ngược lại, nó cũng được sử dụng để điều khiển cổng I/O
Trang 19
2.4 Cấu tạo bộ dao động
Mạch dao động dùng để cung cấp cho vi điều khiển một dao động xung clock Nó cần thiết cho vi điều khiển có thể thực hiện một chương trình hay một lệnh của chương trình
Các loại dao động
PIC16F84A có thể làm việc với 4 cấu hình dao động khác nhau Người lập trình có thể chọn cấu hình dao động khi lập trình PIC hoặc chọn bằng 2 bit cấu hình FOSC1 và FOSC0
LP tinh thể nguồn thấp
XT tinh thể/cộng hưởng
HS tinh thể tốc độ cao/cộng hưởng
RC điện trở/ tụ điện
Bộ dao động tinh thể / hộp cộng hưởng bằng gốm :
Trong kiểu XT, LP hoặc HS một tinh thể thạch anh gồm có hai chân thường được giữ trong vỏ bọc bằng kim loại được nối tới các chân OSC1/CLKIN và
OSC2/CLKOUT theo kiểu song song Hai tụ loại ceramic có trị số bằng nhau một chân được nối mass chân còn lại nối với tinh thể được trình bày như hình sau
Hình 3 : Sơ đồ kết nối bộ dao động tinh thể
Bộ dao động tinh thể và tụ điện có thể gộp chung trong một vỏ bọc bằng gốm với 3 chân, được gọi là hộp cộng hưởng Chân ở giữa được nối mass, hai chân còn lại được nối đến chân OSC1 và OSC2 của vi điều khiển Khi thiết kế một thiết bị, theo nguyên tắc là phải đặt bộ tạo dao động gần con vi điều khiển để tránh nhiễu trên đường mạch khi con vi mạch đang nhận clock
Trang 20Hình 4 : Kết nối bộ cộng hưởng tới vi điều khiển
Ngoài ra trong các kiểu XT, LP hoặc HS, thiết bị có thể sử dụng một nguồn clock ngoài để điều khiển chân OSC1/CLKIN
Hình 5 : Kết nối với nguồn xung clock bên ngoài
Bảng lựa chọn tụ cho bộ dao động tinh thể
Kiểu Tần số OSC1/C1 OSC2/C2
100-150 pF 15-33 pF 15-33 pF
20 MHz 15-33 pF 15-33 pF 15-33 pF 15-33 pF
Khi điện dung cao hơn sẽ làm tăng thêm sự vững vàng của bộ dao động nhưng thời gian khởi động cũng tăng
Bộ tạo dao động RC
Bộ dao động RC thường được dùng trong những ứng dụng không cần thời gian chính xác Tần số cộng hưởng của bộ dao động RC được quyết định bởi mức điện áp nguồn, điện trở R, tụ điện C và nhiệt độ hoạt động
Hình 6 : Cấu tạo bộ dao động RC
Trang 21Hình 6 biểu diễn cách nối bộ dao động RC với PIC16F84A Với giá trị của điện trở R dưới 2,2K bộ dao động có thể bắt đầu không ổn định, hoặc nó có thể ngưng dao động Với giá trị rất cao của điện trở R ( ví dụ 1M) bộ dao động rất dễ bị hỏng bởi tạp nhiễu và độ ẩm Điện trở R nên chọn giá trị nằm trong khoảng 3K đến 100K Mặc dù bộ dao động làm việc không có một tụ điện bên ngoài, nhưng để tránh tạp nhiễu và cho mạch ổn định nên mắc một tụ 20pF hoặc lớn hơn Một clock của bộ dao động được phân biệt bởi 4 chu kỳ Bộ dao động clock phân biệt bởi 4 chu kỳ cũng có thể thu được ở chân OSC2/CLKOUT, và cũng có thể dùng để thử hay đồng bộ các mạch logic
Các chu kỳ máy
Một chu kỳ máy của PIC16F84A gồm có 4 trạng thái được đánh số từ Q1 đến Q4 mỗi trạng thái chiếm 1 chu kỳ của bộ dao động Như vậy một chu kỳ máy chiếm 4 chu kỳ của bộ dao động hay 1s nếu tần số của bộ dao động là 4MHz
Sau khi cấp nguồn, bộ dao động bắt đầu dao động Ơû chu kỳ đầu tiên sự dao động không ổn định nhưng sau đó vài chu kỳ nó bắt đầu hoạt động bình thường
Hình 8 : Tín hiệu của bộ dao động sau khi cấp nguồn
Để ngăn chặn bộ dao động hoạt động không chính xác khi cấp nguồn có thể ảnh hưởng đến sự thực hiện chương trình của vi điều khiển, nên reset vi điều khiển trong suốt thời gian làm ổn định bộ dao động
2.5 Hoạt động RESET
PIC16F84A có các nguồn RESET sau :
Reset trong thời gian mở nguồn Power – On Reset ( POR)
Trang 22 Reset trong thời gian thao tác bình thường bằng cách tác động mức ‘0’ tới chân MCLR của vi điều khiển
Reset ở chân MCLR trong thời gian thực hiện chế độ SLEEP
Reset khi Watchdog Timer (WDT) tràn ở chế độ bình thường
Reset khi WDT tràn ở chế độ SLEEP
Chân MCLR thường được nối qua một điện trở tới VDD, điện trở này có giá trị trong khoảng 5 đến 10k khi mang một mức ‘0’ tới chân này thì PIC sẽ được Reset
Điều kiện Reset cho bộ đếm chương trình ( PC ) và thanh ghi STATUS
STATUS
MCLR Reset ở thời gian thao tác bình thường 000h 000u uuuu
MCLR Reset khi đang ở chế độ SLEEP 000h 0001 0uuu Reset bằng WDT ( ở thời gian hoạt động bình
thường )
000h 0000 1uuu
Ngắt ngoài ở thời gian thực hiện chế độ SLEEP PC + 1 uuu1 0uuu Chú thích : u : không thay đổi
x : không biết
Khi dùng ngắt ngoài ở thời gian thực hiện chế độ SLEEP nếu bit GIE được set thì
PC được nạp với địa chỉ 004h
Điều kiện Reset các thanh ghi
Thanh ghi Địa
chỉ Power-on Reset MCLR Reset trong :
- Hoạt động bình thường
- Chế độ SLEEP WDT Reset trong thời gian thao tác bình thường
Wake-up từ SLEEP :
- Thông qua ngắt ngoài
- Thông qua tràn WDT
Trang 23EEDATA 08h xxxx xxxx uuuu uuuu uuuu uuuu
PCLATH 0Ah -0 0000 -0 0000 -u uuuu
TRISA 85h -1 1111 -1 1111 -u uuuu
EECON1 88h -0 x000 -0 q000 -0 uuuu
PCLATH 8Ah -0 0000 -0 0000 -u uuuu
uuuu(1)
Ghi chú : u = không thay đổi
x = không biết
= bit không dùng đọc như ‘0’
q = giá trị được quyết định trên điều kiện
Chú ý : (1) một hay nhiều bit trong thanh ghi INTCON sẽ bị ảnh hưởng ( do thực hiện Wake-up)
(2) khi WAKE-up được thực hiện bằng ngắt ngoài và bit GIE được set thì PC được nạp với vecto ngắt 004h
2.6 Tổ chức bộ nhớ
PIC16F84A có hai khối nhớ riêng biệt, đó là bộ nhớ dữ liệu và bộ nhớ chương trình , bộ nhớ EEPROM với các thanh ghi GPR và SFR trong bộ nhớ RAM nằm trong khối nhớ dữ liệu, bộ nhớ FLASH nằm trong khối nhớ chương trình
Trang 24Hình 9 : Tổ chức bộ nhớ của vi điều khiển PIC16F84A
Trang 252.6.1 Khối nhớ chương trình
Hình 10 : Tổ chức bộ nhớ chương trình
Bộ nhớ chương trình dùng công nghệ FLASH, đặc điểm của bộ nhớ FLASH là dữ liệu trong bộ nhớ sẽ không bị mất đi khi tắt nguồn và nó cho phép ghi lại nhiều lần nhưng số lần ghi lại được giới hạn là 1000 lần
Bộ nhớ FLASH được dùng để lưu chương trình, không gian sử dụng bộ nhớ là 1024 từ, 1 từ có chiều dài là 14 bit (1024 Word 14 bit) Địa chỉ của bộ nhớ FLASH từ 0000h đến 03FFh
Địa chỉ 0000h : vectơ Reset ( Reset Vector ) Khi có một điều kiện Reset xảy ra do mở nguồn, bằng WDT (Watchdog timer) hay một vài nguồn Reset khác, chương trình sẽ bắt đầu từ địa chỉ này
Địa chỉ 0004h : vectơ ngắt (Interrupt Vector) Khi có một điều kiện ngắt xảy ra do thanh ghi TMRO tràn khi cho phép ngắt tràn của bộ định thời hoặc do một nguồn ngắt ngoài, chương trình sẽ thực hiện lệnh tại địa chỉ này
Như vậy không gian sử dụng chương trình sẽ bắt đầu từ địa chỉ 0005h đến 03FFh Địa chỉ 0400h đến 1FFFh : không gian bộ nhớ này không được sử dụng
Địa chỉ 2007h : địa chỉ này chứa những bit cấu hình
2.6.2 Khối nhớ dữ liệu
Khối nhớ dữ liệu bao gồm bộ nhớ dữ liệu và bộ nhớ EEPROM
Trang 26
2.6.2.a Bộ nhớ dữ liệu
Hình 11 : Tổ chức bộ nhớ dữ liệu
Bộ nhớ dữ liệu gồm các thanh ghi file RAM (Random Access Memory-bộ nhớ truy xuất ngẫu nhiên), dữ liệu trong các thanh ghi này sẽ bị mất khi tắt nguồn
Bộ nhớ dữ liệu có tất cả là 256 byte (00h đến FFh) được chia thành 2 bank, mỗi bank có 128 byte Bank 0 ở địa chỉ 00h đến 7Fh trong đó các byte có địa chỉ từ 50h đến 7Fh và byte ở địa chỉ 07h không được sử dụng và nó đọc như ‘0’ Bank 1 ở địa chỉ 80h đến FFh trong đó các byte có địa chỉ từ D0h đến FFh và byte ở địa chỉ 87h
Trang 27không được sử dụng và nó đọc như ‘0’ Khi muốn truy xuất đến một thanh ghi trong bộ nhớ dữ liệu thì trước tiên phải chọn bank chứa thanh ghi đó, việc chọn bank này được qui định trong thanh ghi STATUS ở địa chỉ 03h và 83h Các thanh ghi trong bộ nhớ dữ liệu có thể được truy xuất trực tiếp bằng địa chỉ tuyệt đối của mỗi thanh ghi hoặc gián tiếp qua thanh ghi FSR (File Select Register) Địa chỉ gián tiếp sử dụng giá trị hiện thời của bit RP0 trong thanh ghi STATUS để truy xuất vào trong vùng bank của bộ nhớ dữ liệu
Bộ nhớ dữ liệu được phân thành 2 phần :
Phần 1 gồm 12 byte đầu tiên của mỗi bank được gọi là SFR ( Special Funstion Registers – các thanh ghi chức năng đặc biệt ) và được dùng để ghi lại trạng thái hoạt động của PIC như là điều khiển chọn chế độ cổng ngõ vào hay ngõ ra Có 16 thanh ghi khác nhau trong SFR (11 thanh ghi trong bank 0 và 5 thanh ghi trong bank 1 ) Nội dung của mỗi thanh ghi được quản lý bởi PIC Mặc dù có tổng cộng là 24 thanh ghi nhưng một vài thanh ghi nằm trong cả 2 bank Khi viết chương trình cần quan tâm đến việc chọn bank nhớ khi truy xuất đến các thanh ghi này
Phần 2 gồm 68 byte từ địa chỉ 0Ch đến 4Fh được gọi là GPR ( General Purpose Registers – Các thanh ghi mục đích chung ) dùng để lưu trữ kết quả và điều kiện trong khi chương trình đang chạy Nội dung của GPR trong 2 bank là như nhau, vì thế khi truy xuất đến các thanh ghi này không cần thực hiện việc chọn bank nhớ, tổng dung lượng của RAM là 68 byte Nội dung của GPR bị mất khi tắt nguồn và không có giới hạn số lần ghi dữ liệu
Nội dung các thanh ghi có chức năng đặc biệt SFR
h
PCL Đặt 8 bit thấp của bộ đếm chương trình (PC)
Trang 28h
FSR Địa chỉ bộ nhớ dữ liệu gián tiếp pointer 0 xxxx
xxxx 85
h TRISA - - - Thanh ghi gián tiếp dữ liệu PORTB -1 1111 86
h
Trang 29h N1 F RR EN x000 89
Ghi chú : R : bit có thể đọc
W : bit có thể ghi
-n : giá trị khi Reset nguồn (-x : chưa biết )
Cấu trúc thanh ghi trạng thái ở địa chỉ 03h và 83h
Bit 0 C ( Carry )
1 = lấy ra bit quan trọng nhất từ kết quả
0 = không lấy ra bit quan trọng nhất của kết quả
Bit 1 DC ( Digit Carry )
1 = lấy bit thấp thứ tư của kết quả
0 = không lấy bit thấp thứ tư của kết quả
Bit 2 Z ( Zero bit )
1 = kết quả của phép tính số học hoặc logic là zero
0 = kết quả của phép tính số học hoặc logic khác zero
Bit 3 PD :bit tắt nguồn
1 = sau khi bật nguồn hoặc dùng lệnh CLRWDT
0 = khi dùng lệnh SLEEP
Bit 4 T0 : Time-out bit
1 = sau khi mở nguồn, khi thực hiện lệnh CLRWDT hoặc lệnh SLEEP
Trang 30Đối với các dòng vi điều khiển PIC cao hơn ( loại có 4 bank thanh ghi ) thì nó dùng để chọn bank thanh ghi
W : bit có thể ghi
-n : giá trị khi Reset nguồn (-x : chưa biết )
Cấu trúc thanh ghi tuỳ chọn ở địa chỉ 81h
Thanh ghi tuỳ chọn là thanh ghi có thể đọc và ghi được nó bao gồm những bit điều khiển khác nhau như là định cấu hình Prescaler tới TMR0/WDT, ngắt ngoài INT, TMR0, chế độ ‘ Pull-up’ trên PORTB
Bit 0:2 PS0, PS1, PS2 : bit chọn tốc độ Prescaler
3 bit này dùng để định tốc độ Prescaler (xem bảng dưới) Việc định tốc độ
Prescaler có thể ảnh hưởng đến sự làm việc của vi điều khiển, điều này sẽ được đề cập rõ hơn ở phần TMR0
1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128
Bit 3 PSA ( Prescaler Assignment bit )
Bit chỉ định Prescaler tới TMR0 hay Watchdog
1 = Prescaler được chỉ định tới Watchdog
0 = Prescaler được chỉ định tới môđun TMR0
Bit 4 T0SE ( TMR0 Source Edge Select bit) : bit chọn cạnh nguồn TMR0
Nếu chọn môđun TMR0 ở chế độ đếm bằng nguồn xung ở chân RA4/T0CKI thì bit này xác định cạnh lên hay cạnh xuống của tín hiệu
Trang 311 = kích cạnh xuống
0 = kích cạnh lên
Bit 5 T0CS ( TMR0 Clock Source Select bit )
Bit lựa chọn nguồn xung TMR0
Bit này cho phép bộ đếm TMR0 tăng bằng nguồn dao động bên trong ở mỗi 1/4 dao động xung clock hay nguồn xung bên ngoài ở chân RA4/T0CKI
1 = từ nguồn xung bên ngoài
0 = 1/4 dao động xung clock bên trong
Bit 6 INTEDG ( Interrupt Edge Select bit ) : bit chọn cạnh ngắt
Nếu ngắt ngoài trên chân RB0/INT được cho phép thì bit này sẽ xác định cạnh ngắt tại RB0/INT
1 = ngắt bằng cạnh lên
0 = ngắt bằng cạnh xuống
Bit 7 RBPU ( PORTB Pull-up Enable bit)
Bit này dùng để mở hoặc tắt các chân của PORTB có điện trở bên trong kéo lên nguồn VDD
W : bit có thể ghi
-n : giá trị khi Reset nguồn (-x : chưa biết )
Cấu trúc thanh ghi INTCON ở địa chỉ 0Bh và 8Bh
Bit 0 RBIF ( RB Port Change Interrupt Flag bit )
Bit cờ ngắt thay đổi port RB
1 = ít nhất 1 trong các chân RB4 : RB7 thay đổi trạng thái
0 = không có chân nào trong các chân RB4 : RB7 thay đổi trạng thái
Bit 1 INTF ( INT Enternal Interrupt Flag bit )
Bit cờ ngắt ngoài ở chân RB0/INT
1 = xảy ra ngắt ngoài
0 = không xảy ra ngắt ngoài
Bit 2 T0IF ( TMR0 Overflow Interrupt Flag bit ) bit cờ ngắt tràn TMR0
1 = bộ đếm thay đổi trạng thái từ FFh tới 00h
0 = tràn không xảy ra
Bit 3 RBIE ( RB Port Change Interrupt Enable bit )
Cho phép ngắt xảy ra khi thay đổi trạng thái trên các chân 4,5,6 và 7 của Port B
1 = cho phép ngắt khi thay đổi trạng thái
Trang 320 = không cho phép ngắt khi thay đổi trạng thái
Bit 4 INTE ( INT External Interrupt Enable bit )
Bit cho phép ngắt ngoài tại chân RB0/INT
1 = cho phép ngắt ngoài
0 = không cho phép ngắt ngoài
Bit 5 T0IE ( TMR0 Overflow Interrupt Enable bit )
Bit cho phép ngắt khi bộ đếm TMR0 tràn
1 = cho phép ngắt
0 = không cho phép ngắt
Nếu bit T0IE và T0IF được set đồng thời thì ngắt xảy ra
Bit 6 EEIE ( EEPROM Write Complete Interrupt Enable bit) :
Bit này cho phép ngắt xảy ra khi kết thúc việc ghi thông thường tới EEPROM
1 = cho phép ngắt
0 = không cho phép ngắt
Nếu bit EEIE và EEIF ( bit EEIF nằm trong thanh ghi EECON1) được set thì ngắt xảy ra
Bit 7 GIE ( Global Interrupt Enable bit ) bit cho phép ngắt tổng thể
1 = cho phép tất cả các ngắt
0 = đóng tất cả các ngắt
2.6.2.b Bộ nhớ EEPROM
Bộ nhớ dữ liệu EEPROM có thể đọc và ghi trong điều kiện hoạt động bình thường (VDD phải đủ) Bộ nhớ này không có bản đồ trực tiếp trong không gian file thanh ghi Thay vào đó nó được định vị gián tiếp qua các thanh ghi có chức năng đặc biệt Có 4 thanh ghi trong SFR được sử dụng để đọc và ghi bộ nhớ EEPROM Những thanh ghi này là:
EEDATA chứa 8 bit dữ liệu cho đọc/ghi, và EEADR chứa địa chỉ của vị trí
EEPROM duy trì địa chỉ của vị trí EEPROM được truy cập Vi mạch PIC16F84A có
64 byte của dữ liệu EEPROM với phạm vi địa chỉ từ 00h đến 3Fh
Bộ nhớ dữ liệu EEPROM cho phép đọc và ghi từng byte Khi ghi một byte thì dữ liệu trước đó tại vị trí ghi sẽ được xoá tự động trước khi dữ liệu mới được ghi vào Bộ nhớ dữ liệu EEPROM có số lần ghi xóa lớn Thời gian ghi được điều khiển bởi timer trên vi mạch Thời gian ghi sẽ thay đổi theo điện áp và nhiệt độ cũng như từ mạch đến mạch