TRƯỜNG DH DL KY THUẬT CÔNG NGHỆ TP.HCM KHOA ĐIỆN - ĐIỆN TỬ
NGÀNH ĐIỆN TỬ VIỄN THONG
LUẬN VĂN TỐT NGHIỆP
ĐỀ TÀI:
MẠCH TỰ ĐỘNG TRẢ LỜI ĐIỆN THOẠI
ỨNG DỤNG VI ĐIỀU KHIỂN PIC
Trang 2
Lời mở đầu 3
TÓM TẮT ĐỀ TÀI 4
PHẦN I : CƠ SỞ LÝ THUYẾT 5
CHUONG 1: GIGI THIEU TONG QUAN HỌ VI ĐIÊU KHIỂN PIC 6 1.1 Lịch sử phát triển 6
1.2 Các đặc điểm 6
1.3 Phân loại 7
GHUONG II : KIẾN TRUC PHAN CỨNG PIC 16F84A 8
IL.1 Gidi thiéu PICI6F84A 8
1L2 Sơ đô bố trí chân 10
IL3 Sơ đồ khối 11
1I.4 Cấu tạo bộ dao động 14
1I.5 Hoạt động RESET 17
1L6 Tổ chức bộ nhớ 19 s% Bộ đếm chương trình ( PC ) 32 % Ngăn xếp ( STACK) 32 s% Chế độ địa chỉ 34 1I7.Cấu trúc cổng VO 36 1L8 Bộ định thời (TMR0) 45
IL9 Watchdog Timer 48
1L10 Ngắt 48
QHƯƠNG II : TỔNG ĐÀI ĐIỆN THOẠI 51
III.1 Sơ lược về sự phát triển của tổng đài 51
IIL2 Giới thiệu 52
IIL2.1 Đinh nghĩa 52
IIL2.2 Phân loại 52
IIL3 Sơ đề khối tổng đài điện thoại 54
Trang 3'HƯƠNG IV : KHÁI QUÁT CHUNG VỀ MÁY ĐIỆN THOẠI
^
IV.1 Nguyên tắc cấu tạo máy điện thoại
IV.2 Chức năng tổng quát của máy điện thoại IV.3 Phân loại các kiểu điện thoại
IV.4 Yêu cầu về mạch điện máy điện thoại
HUONG V : UNG DUNG PIC 16F84A THIET KE VA THI CONG
MẠCH GHI ÂM ĐIỆN THOẠI
®
V.1 Sơ đồ khối và nguyên lý hoạt động của hệ thống
V.2 Giới thiệu các IC sử dụng trong mạch
PHAN 2: TINH TOAN VA THI CONG
CHƯƠNG VI : THIẾT KẾ CHI TIẾT
VI.1 Mạch nguồn
VL2 Mạch cảm biến chuông
VI.3 Mạch điều khiển Relay
VI.4 Mach tạo tải giả
VỊ.5 Mach Hybrid va Mach loc
VI.6 Mach phat hién Busy Tone
VI.7 Mach thu & phat tiếng nói
VI.8 Mạch khuếch đại công suất âm tần
VỊI.9 Mạch điểu khiển trung tâm
HUONG VII : LƯU ĐỒ GIẢI THUẬT LẾT LUẬN
[UGNG PHAT TRIEN DE TAI
À1 LIỆU THAM KHẢO
Trang 4
Lời mở đầu
Từ giữa những năm 80 đến nay công nghệ chế tạo linh kiện bán dẫn có những phát triễn đậm nét để hỗ trợ cho sự phát triễn của công nghệ thông tin, và sự tự
động hóa trong cơng nghiệp, Với độ tích hợp ngày càng cao, công suất tiêu tán bé
hơn, thông minh hơn nó đã làm thay đổi hắn cấu trúc của nền công nghiệp hiện tại Bước vào đầu thế kỷ 21 kỹ thuật điện tử vi điện tử sẽ là “Chiếc chìa khóa kỹ
thuật“ cho các nước trên thế giới bước vào kỷ nguyên mới_ kỷ nguyên của công
nghệ thông tin
Tuy chỉ mới thâm nhập vào nước ta nhưng công nghệ thông tin đã phát triễn rất nhanh và ngày càng giữ vai trò quan trọng trong nền công nghiệp nước nhà Hệ
thống viễn thông, dịch vụ khách hàng, thông tin di động, nhắn tin càng phát triễn
với tính hiện đại và tự động hóa ngày càng cao
Trong quyển luận văn này em muốn trình bày loại “Mạch Tự Động Trả Lời Điện Thoại“, đây là loại mạch có rất nhiều ứng dụng trong thực tế và đã được các
hãng điện tử lớn sản xuất và tung ra thị trường
Do kiến thức còn non kém, kinh nghiệm ít ổi và thời gian có hạn, chắc chắn
rằng tập luận văn này ít nhiều không thể tránh khỏi thiếu sót, kính mong q thầy
cô và bạn bè vui lịng bỏ qua và đóng góp ý kiến để tập luận văn ngày càng hoàn
thiện hơn
Cuối cùng em xin chân thành cám ơn thầy Phạm Hùng Kim Khánh người đã nhiệt tình hướng dẫn và giúp đỡ em trong suốt thời gian làm để tài để luận văn của em được hoàn thành với thời gian sớm nhất và hoàn chỉnh nhất
Trang 5
TÓM TẮT ĐỀ TÀI
Đề tài khảo sát Chip vi điều khiển mới họ PIC Cụ thể là chip PIC16F84A,
và ứng dụng vào thiết kế, thi công mạch ghi âm điện thoại
Dé tài này được chia thành 7 chương với nội dung chính như sau :
Chương 1: Giới thiệu tổng quan họ vi diéu khién PIC
Chương 2: Kiến trúc phần cứng của PIC16F84A
Chương 3: Tổng đài điện thoai
Chương 4: Khái quát chung về máy điện thoại
Chương 5: Ứng dụng PIC16F84A thiết kế và thi công mạch ghỉ âm
điện thoại
Chương 6 : Thiết kế chỉ tiết
Chương 7 : Lưu đồ giải thuật
Trang 6
-4-PHẨN I:
CƠ SỞ LÝ THUYẾT
Trang 7
CHƯƠNG I : GIỚI THIỆU TỔNG QUAN
HO VI DIEU KHIEN PIC 1.1 Lịch sử phát triển
Họ vi điều khiển PIC là tên viết tắt của Programmable Intelligent Computer
— “Máy tính thơng minh khả trình “ do hãng General Instrument sẳn xuất và con vi
điều khiển đầu tiên là PIC1650 Con vi điều khiển này là mẹ đẻ của tất cả các vi
điều khiển họ PIC sau này
Về sau họ vi điều khiển này được hãng Microchip tiếp tục phát triển và hiện nay các sản phẩm vi điểu khiển PIC đã có gần 100 loại sản phẩm từ họ 10Fxxx đến
các ho 12Cxxx, 12Fxxx, 16Cxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA, 16LFxxxA, 18Fxxx, 18LFxxx, 18Fxxxx, 18LFxxxx
12 Các đặc điểm
PIC là họ vi điều khiển có rất nhiều chủng loại, từ các dòng sản phẩm cơ bắn
thích hợp với những ứng dụng nhỏ đến các dòng sản phẩm phổ thông và cao cấp,
các sản phẩm này có nhiều chân xuất/nhập hơn các dong co ban và nó tích hợp
nhiều thiết bị ngoại vi như : bộ chuyển đổi tín hiệu tương tự sang số ( ADC : Analog-To-Digital Converter ), truyền nối tiếp với hai chuẩn là MSSP ( Master
Synchronous Serial Port ) và USART ( Universal Synchronous Asynchronous Receiver Transmitter ), truyền song song với PSP ( Parallel Slave Port ) Mặc dù
có nhiều loại nhưng chúng đều có những đặc tính chung sau :
¢ C6 thé giao tiếp với thiết bị ngoại vi thông qua các chân xuất/nhập
© C6 thé diéu khiển các chân xuất nhập mà không làm ảnh hưởng tới sự hoạt động của bộ vi xử lý
© _ Sử dụng công nghệ CMOS làm giảm dòng tiêu thụ, thời gian chuyển mạch nhanh
e _ Có tính ổn định cao
Bộ nhớ chương trình : dùng để lưu trữ mã chương trình, tuỳ từng loại FLASH : gém các sản phẩm xxFxxx
OTP : gồm các sản phẩm 14000, 16Cxxx, 16HV540
ROM/ROMIess : gồm các sản phẩm 16CRxxx, 18C601, 1SC801
Trang 8
Kích thước bộ nhớ chương trình (Bytes): tuỳ từng loại mà có kích thước bộ nhớ khác
nhau từ 0,5K đến 256K
1.3 Phân loại
Dựa vào độ dài của từ lệnh, họ vi điều khiển PIC này có thể chia thành 3 loại
sau;
e Dong PIC co ban ( Base - Line )
gồm các PIC 12Cxxx Cac PIC thuộc loại này có độ dài lệnh là 12 bit
© - Dịng PIC phổ thơng ( Mid - Range )
gồm các dòng PIC 10F, 12F và 16, loại này có độ dài lệnh là 14 bit
e Dong PIC High — End
gồm các dòng PIC 18, loại này có độ đài lệnh là 16 bit
Trang 9
CHƯƠNG II : KIẾN TRÚC PHẦN CỨNG PIC16F84A
1.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 = May 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ó độ đà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ó độ đài § 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 ngồi trên chân RB0/INT
e Hoan thanh việc ghi dữ liệu vào EEPROM
e Ngắt tràn của bộ định thời TMRO
¢ 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 va dié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
Trang 10
-8-Chức năng Reset PIC trong khi nguồn cung cấp chưa ổn định Khi bật nguồn thì bộ đao độ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
e Power-on Reset (POR)
 Power-up Timer (PWRT)
â _ Bộ định thời khởi động bộ dao động
+ Ngắt
+ Watchdog Timer (WDT)
Chế độ 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 dong tiêu thu
rất thấp Có thể cho PIC hoạt động tré lai 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ã
+ Chế độ lập trình nối tiếp ICSP ( In-Cicuit Serial Programming ) 1.2 Sơ đơ bố trí chân
PICI6F84A 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 DỊP DIP là từ viết
tắt của Dual In Package, SMD là từ viết tắt của Surface Mount Devices
Trang 11
q
RA2 +—+([T| ® I~+—+ RAI RAR +» [7] I] «—» RAD RA4/TOCKT «—» GI} -g - [H~— OSCI/CLKIN
ACR —+G] iS [l— OSC2/CLKOUT Vạs ——> BỊ a II=— Yoo RBO/INT s+ [5] % mm R"l m = 7 ja» BB RB2 +—» [BI IẪ~—> R85 RB3 «+—>z [| IM+—+ R84 TOP VIEW
Hinh 1 : So dé bé trí chân PIC16F84A
Ý nghĩa các chân : Chân 1: RA2 Chân 2: RA3 Chân 3: RA4/T0CKI Chân 4: MCLR Chân 5: Vss Chân 6: RB0/INT Chân 7:RB1 Chân 8:RB2 Chân 9:RB3 Chân 10:RB4 Chân 11:RB5 Chân 12:RB6 Chân 13:RB7 Chân 14:Vpp
Chân thứ hai của port A, là chân nhập/xuất
Chân thứ ba của port A, là chân nhập/xuất
Chân thứ tư của port A, là chân nhập/xuất T0OCKI chọn ngõ vào Clock tới bộ định thời TMRO
Ngo vao Reset vi dié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 nối mass
Chân thứ 0 của port B, là chân xuất/nhập, ngồi ra cịn
có chức năng là chân ngắt ngoài
Chân thứ nhất của port B, là chân nhập/xuất Chân thứ hai của port B, là chân nhập/xuất Chân thứ ba của port B, là chân nhập/xuất
Chân thứ tư của port B, là chân nhập/xuất
Chân thứ năm của port B, là chân nhập/xuất
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 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 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 18:RA1 Chân thứ 0 của port A, là chân xuất/nhập Chân thứ nhất của port A, là chân xuất/nhập
Trang 12
-10-11.3 SO DO KHOI
Flash <P Pram Soni} _ my EEPROM Data Memory
name "HỆ" || mm | Le
Ỷ * ‘ £
CR4 T7 RAMMớT 3| EEADR |
Lm] 5, Doct Ade am\ | 7/ ndưeat ———== TARO
| LỆ | 4 Power N l MUX ” ⁄ H % mer | = " 10 Ports Osellatr | So Of
Decode 8 =] | startup Tener `N xư Control : ì
| #e |) ị we! al O§G2/CLKOUT CLR Vas.Vss OSCTICLKIN
Hình 2 : Sơ đồ khối PIC16F84A
¢ Don vi xt ly trung tam ( Central Processing Unit) CPU
Đơn vị xử lý trung tâm ( CPU ) 1a bé nao cia vi diéu khién, n6 c6 nhiém vu
phát hiện và tìm nạp thứ tự lệnh cần để thực hiện, mã hố lệnh đó và cuối
cùng nó cho lệnh này thực hiện
Trang 13
Data Bus 8 RAM Fila Registers (1)
RAM Aderess Bus
L_ meat aS
Direct Adressing Indirect Adressing
| FSR reg k—
Hì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’ va ‘1’, vì vậy ta cần một chương trình biên dịch các đồ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 tố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 đữ liệu và bus địa chỉ
e _ Đơn yị 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 14
eI 8 = 7 [ : SÁT MK 7 Ti N ALU Wreg ề
Hình 2.2 : Sơ đồ khối ALU
Ởcác lệnh có hai tốn hạn, thơng thường 1 tốn hạn là thanh ghi W và tốn hạn kia có thể là một hằng số hoặc là một trong c4c thanh ghi GPR hay SFR GPR- General Purposes Registers 14 cdc thanh ghi muc dich chung va SFR- Special Function Registers là các thanh ghi có chức năng đặc biệt
Ở các lệnh có một tốn hạn, tố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 đó
e Thanh ghi W ( W reg)
Trang 15
Đâ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 YO
1L4 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 đao động
PICI6F84A 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 va FOSCO
e LP tinh thểnguồn thấp e XT tinh thể/cộng hưởng
e HS tinh thể tốc độ cao/cộng hưởng
« RC điện trở/ tụ điện
Bộ dao động tỉnh 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 tỉnh thể được trình bày như hình sau
1 6 5C1/CLKTN C1 Cy 77 PIC16F84A = CC ®hses/erseor 0 c2
Hình 3 : Sơ đồ kết nối bộ dao động tinh thể
Bộ dao động tỉnh 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 16
Em a
Hì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
Chock from O8¢1
at systom PiC16FXX
Open ~©—-] OSC2
Hình § : Kết nối với nguồn xung clock bên ngoài
Bảng lựa chọn tụ cho bộ đao động tinh thể
Kiểu | Tầnsố | OSCI/CI OSC2/C2
LP 32kHz | 68-100pF | 68-100 pF 200 kHZ | 15-33 pF 15-33 pF XT | 100kHz | 100-150 pF | 100-150 pF 2 MHz 15-33 pF 15-33 pF 4 MHz 15-33 pF 15-33 pF HS 4 MHz 15-33 pF 15-33 pF 20 MHz | 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
Trang 17
-15-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
jm Clock or PIC16F84 Ve - OSC2CLKOUT Cload4
Note: This pin can be configured as inputoulput pin
Hình 6 : Cấu tạo bộ dao động RC
Hì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 PICI6F84A 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 1 ws néu tin số của bộ dao động là 4MHz
(1 102i 03; ñ4¡ 01; 021 3 04 G1ị 021 3) 04;
TH HN NEW Wmwawxw
pes a a a
Ter 1 | Tev2 Teva |
Hình 7 : Mối quan hệ giữa nguồn clock và chu kỳ lệnh
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
Trang 18
+5V
-J4 0V
Crystal start up time Time
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
1.5 Hoạt động RESET
PICI6F84A có các nguồn RESET sau :
¢ Reset trong thoi gian mé nguén Power — On Reset ( POR)
e Reset trong thdi 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
e© Resetởchân Ä⁄4CLR trong thời gian thực hiện chế độ SLEEP ¢ Reset khi Watchdog Timer (WDT) tran 6 ché d6 binh thudng
© Reset khi WDT tran 6 ché &6 SLEEP
Chân MCLR thường được nối qua một điện trở tới Vpp, đ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
Điều kiện PC | Thanh ghi
STATUS
POR 000h | 0001 1xxx
MCLR Reset 6 thdi gian thao tác bình thường 000h_ | 000u uuuu
MCLR Reset khi dang ở chế độ SLEEP 000h_ | 0001 0uuu
Reset bing WDT (6 thời gian hoạt động bình thường ) | 000h_ | 0000 luuu WDT Wake-up PC + l | uuu0 Ouuu
Ngắt ngoài ở thời gian thực hiện chế độ SLEEP PC +1 | uuul 0uuu
Chú thích: u: khơng thay đổi x: không biết
Trang 19
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 Power-on | MCLR Reset trong : | Wake-up từ chỉ Reset - Hoạt động bình SLEEP :
thường - Thông qua
- Chế độ SLEEP ngắt ngoài
WDT Reset trong - Thông qua thời gian thao tác tràn WDT bình thường
W - XXXX XXXX uuuu uuuu UUUu uuuu
INDE OOh | | mm | mm eee
TMRO Olh | xxxx xxxx WUuUu uuuu uuuu uuuu
PCL 02h | 0000 0000 0000 0000 PC+12
STATUS 03h | 0001 1xxx 000g quuu uuug quuu FSR 04h | xxxx xxxx Wuuu uuuu uuuu uuuu PORTA 05h -~-X XXXX -u uuuu -U uuuu PORTB 06h | xxxx xxxx uuuu uuuu uuuu uuuu
EEDATA 08h | xxxxxxxx uuuu uuuu uuuu uuu
EEADR 09h | xxxx xxxx uuuu uuuu Wuuu uuuu PCLATH 0Ah -0 0000 -0 0000 -u_uuuU
INTCON 0Bh | 0000 000x 0000 000u uuuu uuu”
INDF 80h | — —- | ween eee ee
OPTION_REG| 81h | 11111111 1111 1111 uuuu uuuu
PCL 82h | 0000 0000 0000 0000 PC +19
STATUS 83h | 0001 1xxx 000g quuu uuug quuu
FSR 84h | xxxx Xxxx uuuu wuuu uuuu uuuu
TRISA 85h -1 1111 -11111 -u Iuuu
TRISB 86h | 11111111 11111111 uuuu uuuu
EECONI 88h -0 x000 -0 q000 -0 uuuu
EECON2 89h | -— | nee nee eee
PCLATH 8Ah -0 0000 -0 0000 ~ u Iuuu
INTCON 8Bh | 0000 000u 0000 000u uuuu uuuu®) 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
Trang 20
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
1I6 Tổ chức bộ nhớ
PICI6F84A 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
F——* EEDATA 49
+ Addres = EEPROM for
Stack level 1 ooh data 64x
Stack level 2 B = Oo ee
‹ : Z
, wi : a]
StackJevel 8 Program f 1 Ì I f f 1 Ey
Address 4 counter 4
Bus Data Bus PCs12:0> “*
[bay 4 [ Address Address
Fara dines o000h O0h HOF THỊ 80h Oth THRO ‘OPTION 81h 02h PCL PCL 82h 03h STATUS ‘STATUS 83h
Werruph wedar addrans ñDũ4h 04h FER FSR Bah
05h [— FBRTA— | TRIEA | B5h Accessing
06h PORTE TRIS 86h these
th focations
Program memory O8h EEDATA EEEONT has the 1024N14 — 0fh EERO EEZON? © ft
0Ah FELATH PELATH regardieas
, tên NTEON NTEON ofthe bank : from which
: we are
i 68 bytes RAM making an
: yes CPR memory x4 access
: registers i Ì 4h em j SOF bth Unimplemen ted + memory focations, by veading them we always 1FFFh 7Fh FFh get*0" Le Peo Td) STATUS register 2 L4 sạn :
Hình 9 : Tổ chức bộ nhớ của vi điều khiển PIC16F84A
Trang 21-19-IIL6.1 Khối nhớ chương trình 000h 0004h O3FFh 0400h IFFFh 2o00h 2007h 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 x14 bit) Dia 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
Dia chi 0004h : vecto ngt (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 ngồ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
O3FFh
Dia chi 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
INhững bit cấu hình
Những bit cấu hình có thể được lập trình (đọc như “0°) hoặc khơng được lập trình (đọc như “1') để chọn lựa các cấu hình thiết bị như các bit cho phép Power-up [Timer và WDT cũng như các bit chọn bộ dao động Những bit này được ánh xạ đến
Trang 22
ô nhớ 2007h Địa chỉ 2007h ở bên ngoài phạm vi sử dụng bộ nhớ chương trình và nó thuộc về trường hợp đặc biệt / cấu hình của khơng gian bộ nhớ (2000h - 3FFEh) Không gian này chỉ có thể truy cập trong thời gian lập trình
CP | PwR7E | WDTE | FOSCI | FOSC0 |
Bit13 4 3 bit 0
Bit 13-4: CP: Code Protection 1 = không được mã bảo vệ
0 = tất cả bộ nhớ chương trình được mã bảo vệ
Bit 3 : PWRTE Power-up Timer Enable bit 1 = không cho phép Power-up Timer 0 = cho phép Power-up Timer
Bit2 : WDTE : Watchdog Timer Enable bit 1 = cho phép chức năng Watchdog Timer 0 = không cho phép chức năng Watchdog Timer Bit1-0 : FOSC1-—FOSCO Oscillator Selection bits
11 = dao động RC
10 = dao động HS
01 = dao động XT
00 = dao động LP 116.2 Khối nhớ đữ liệu
Khối nhớ dữ liệu bao gồm bộ nhớ dữ liệu và bộ nhớ EEPROM
(TRUONG BHDL-KTCN
THY VIEN
®
|SỐ_ 404092942 _— )
Trang 23TI.6.2.a Bộ nhớ dữ liệu
File Address File Address
00h | indirect addr.) | Indirect adar | 80h
01h TMRO OPTION REG | 81h 02h PCL PCL 82h 03h STATUS STATUS ân 04h FSR FSR 84h 05h 85h 06h 86h 07h 87h 98h 88h 09h 89h OAh 8Ah OBh 88h och 8th 68 Genera Mapped Purpose (accesses) R in Bank 0 (SRAM) 4Fh CFh 50h Sad D0h 7Fh cS FFh lank 0
LÏ Unimplemented data memory locatlon; read as '0'
Note 1: Nota physical register Hình 11 : Tổ chức bộ nhớ dữliệu — ˆ
Bộ nhớ đữ 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
Trang 24
-22-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ừ ã0h đế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 không được sử dụng và nó đọc như “0° Khi muốn truy xuất đến một thanh ghỉ
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 nay được qui định trong thanh ghi STATUS ở địa chỉ 03h và 83h Các thanh
ghi trong bộ nhớ đữ 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 :
e _ 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 ghỉ này
e _ 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
Trang 25
Nội dung các thanh ghi có chức năng đặc biệt SEFR
Dia| Tên |[Bit7] Bit6 | Bits | Bia | Bird | Bir2 | Bitd BitO | Value on
chi Power-on
RESET
Bank 0
00h | INDF Sử dụng nội dung của SFR tới dia chỉ bộ nhớ dữ liệu Olh | TMRO 8-bit Real-Time Clock/Counter
02h | PCL Đặt 8 bit thấp của bộ đếm chương trình (PC)
03h | STATUS | IRP | RPI | RP0 | 7O | Pp Z DC c 0001 1xxx
04h FSR Dia chi bộ nhớ dữ liệu gián tiếp pointer Ô XXXX XXXX
05h | PORTA | | — | — |RA4 | RA3 | RA2 | RAI RAO | -x xxxx TOCKI
06h | PORTB | RB7 | RB6 | RBS | RB4 | RB3 | RB2 | RBI | RBOINT | xxxxxxxx
07h - Đọc nhự ‘0’
08h | EEDATA Thanh ghi dữ liệu EEPROM XXXX XXXX
09h | EEADR Thanh ghi địa chỉ EEPROM XXXX XXXX
0Ah| PCLATH| | | —- Bộ đệm ghi cho 5 bit trên PC -0 0000 0Bh | INTCON | GIE | EEIE | T0IE | INTE | RBIE | ToIF | INTF | RBIF | 00000000
Bank 1
80h | INDFE Sử dụng nội dung của FSR làm địa chỉ bộnhớdữlệu | -
81h | OPTION | RB | INT | T0CS | T0SE | PSA | Ps2 | Psi PSO 11111111 -REG | PU |EDG
82h | PCL Đặt 8 bit thấp của bộ đếm chương trình (PC), 0000 0000
83h | STATUS | IRP | RPI | RP0 | 7Ó | PD | Z | DC | C€ |9011x+x
84h FSR Địa chỉ bộ nhớ đữ liệu gián tiếp pointer 0 XXXX XXXX
85h | TRISA | - | — | — ] Thanh ghi gián tiếp dữ liệu PORTB mm 86h | TRISB Thanh ghi gián tiếp dữ liệu PORTB 11111111
87h = Doc nhu ‘0’ —
88h | EECON1| - | - | - |EEIE |WRERR|WREN| WR | RD -0 x000
89h | EECON2 Thanh ghi 2 điều khiển EEPROM
0Ah | PCLATH| | - | —- Bộ đệm ghi cho 5 bit rên PC -0 0000 OBh | INTCON | GIE | BEIE | TOIE | INTE | RBIE | TOIE | INTF | RBIF | 0000000x
* Thanh Ghi Trang Thai (STATUS )
R/W-0 R/W-0 R/W-0 R-I R-1 R/W-x R/W-x R/W-x
| inp | RP? | RPO | 70 | PD [| z | pc | c |
bit 7 bit 0
Ghi chi : R : bít 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
Trang 26
-24-BitO C (Carry )
1 = lay 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ả
Bit2 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
Bit3 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
Bit4 TO : Time-out bit
1 = sau khi mở nguồn, khi thực hiện lệnh CLRWDT hoặc lénh SLEEP 0= khi WDT tràn
Bít 6:5 RP1:RP0 ( Register Bank Select bit ) bit chọn bank thanh ghi
01 = Bank 1 (80h - FFh)
00 = Bank 0 (00h — 7Fh)
Bit7 IRP
Đối với con PIC16F84A thì bit này khơng dùng và nó được duy trì ở mức “0”
Đố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 ghỉ
1 =bank 2 và 3 0 =bank 0 và 1
Thanh ghi trạng thái chứa các trạng thái số học của ALU ( C, DC, Z), trạng thái
Reset ( 70, PD ) và những bit chọn bank nhớ (TRP, RP1, RP0) ' * ghi thy chon (OPTION_REG)
R/W-1 R/W-1 R/W-IL R/W-1 R/W-I R/W-I R/W-I R/W-I
RBPU |INTEDG |T0CS |T0SE [PSA |PS2 |PSI PSO
bit 7 bit 0
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 tuỳ chọn ở địa chỉ 81h
Trang 27
-25-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, TMRO, chế độ * Pull-up' trên PORTB Bit 0:2 PSO, PS1, PS2 : bit chon 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 TMRO
Giá trị bit Mức TMRO Mức 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
Bit 3 PSA ( Prescaler Assignment bit )
Bịt chỉ định Prescaler tới TMRO hay Watchdog
1 = Prescaler được chỉ định tới Watchdog
0 = Prescaler được chỉ định tới môđun TMRO
Bit 4 TOSE ( TMRO Source Edge Select bit) : bit chon canh nguồn TMRO
Nếu chọn môđun TMRO ở chế độ đếm bằng nguồn xung ở chân
RA4/TOCKI thi bit này xác định cạnh lên hay cạnh xuống của tín hiệu
1 = kích cạnh xuống
0 = kích cạnh lên
Bit 5 TOCS ( TMRO Clock Source Select bit )
Bit lựa chọn nguồn xung TMRO
Bit này cho phép bộ đếm TMRO 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/TOCKI
1 = từ nguồn xung bên ngoài
0= 1⁄4 dao động xung clock bên trong
Bit6 INTEDG ( Interrupt Edge Select bit ) : bit chọn cạnh ngắt
Trang 28
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 nay 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 Vpp
1 =tất
0=mở
+ Thanh ghi INTCON
RW-0 R/W:O0 R/W:0 R/W:O R/W:0 RZW:O R/W:0 R/W-x
[am |EEIE |T0E [inte |RBIE |TOF |INTE |RBE |
bit 7 bit 0
Ghi chi : 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 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 RBO/INT
1 =xẩy ra ngắt ngoài 0 = khơng xảy ra ngắt ngồi
Bit 2 TOIF ( TMRO Overflow Interrupt Flag bit ) bit cờ ngắt tàn TMRO
1 =b6 đế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 0 = không cho phép ngắt khi thay đổi trạng thái
Bít 4 INTE ( INT External Interrupt Enable bit )
Trang 29
Bit cho phép ngắt ngoài tại chân RBO/INT
1 = cho phép ngắt ngoài
0 = khơng cho phép ngắt ngồi
Bit 5 TOIE ( TMRO Overflow Interrupt Enable bit )
Bit cho phép ngắt khi bộ đếm TMRO tràn
1 = cho phép ngắt 0 = không cho phép ngắt
Nếu bit T0IE và T0IE được set đồng thời thì ngắt xảy ra
Bit6 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 EECONI) được
set thì ngắt xây ra
Bit7 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
11.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 (Vọpp 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à:
- EECONI1
- EECON2 (khéng phai là một thanh ghi về mặt vật lý được thực hiện)
EEDATA EEADR
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 đữ 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ì đữ 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ớ đữ 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
Trang 30
Khi vi mạch được bảo vệ, thì CPU có thể tiếp tục đọc/ghi dữ liệu bộ nhớ
EEPROM Tuy nhiên bộ lập trình cho vi mạch khơng thể truy xuất vào bộ nhớ này
U:0 U0 U:0 R/W-0 R/W-x_ R/W-0_ R/S-0_R/S-0
[— | ] [EEt |WRERR|WREN|WR [RD |
bit 7 bit 0
Cấu trúc thanh ghi EECONI (địa chỉ 88h)
bit 7-5: Duy trì ở mức “0°
bit4 : EEIF: EEPROM ghi hoạt động của bit cờ ngắt
1= ghi sự hoạt động được hoàn thành (phải được clear trong
phần mềm)
0= ghi sự hoạt động không được hồn thành hoặc khơng bắt
dau
b3 : 'WRERR: bit cờ hiệu của EEPROM bị lỗi
1= đọc sự hoạt động đuợc kết thúc sớm
0= đọc sự hoạt động hoàn thành
bit2 : 'WREN: bit mà EEPROM cho phép ghi 1= cho phép ghi chu trình
0= không phép ghi t6i EEPROM
bitl : WR: bit diéu khién doc
1= chu trình ghi bị cấm, khi hoàn thành một lần đọc thì bit đó
được clear bởi phân cứng Bit WR có thể chỉ được set (không
clear) trong phần mềm
0= hoàn thành chu trình ghi tới EEPROM
bit0 : RD: bit điều khiển đọc
1= cấm EEPROM đọc RD được clear trong phan cting Bit RD
có thể chỉ được set (không clear) trong phân mềm
0=không cấm EEPROM đọc
s Đọc bộ nhớ đữ liệu EEPROM
Để đọc 1 vị trí của bộ nhớ dữ liệu người lập trình phải ghi địa chỉ lên thanh
ghi EEADR và sau đó tạo bit điểu khiển RD (EECONI1 <0>) Dữ liệu đuợc
chuyển vào thanh ghi EEDATA trong các chu kỳ kế tiếp Do đó dữ liệu có thể được đọc trong những chu kỳ tiếp theo EEDATA sẽ giữ giá trị dữ liệu cho đến lần đọc khác hoặc lần ghi dữ liệu
Trang 31
Ví dụ : Đọc dữ liệu EEPROM
BCF STATUS, RP0 ; Bank 0 MOVLW CONFIG ADDR ;
MOVWF EEADR ; Address to read BSF STATUS, RPO ; Bank 1
BSF EECONI, RD ; EE Read BCF STATUS, RPO ; Bank 0
MOVF EEDATA, W ; W=EEDATA
e Ghi téi b6 nhé dif ligu EEPROM
Để ghi một vị trí đữ liệu EEPROM người lập trình trước hết phải ghi địa chỉ
đến thanh ghi EEADR và dữ liệu đến thanh ghi EEDATA Sau đó người sử dụng phải theo một sự nối tiếp đặc biệt để bắt đầu viết cho mỗi byte
Ví dụ : ghi đữ liệu vào EEPROM
BSF STATUS, _ RPO ;Bank 1
BCF INTCON, GIE ;Disable INTs BSF EECONI, WREN ;Enable Write
MOVLW_ 55h :
MOVWF EECON2 ;Write 55h
MOVLW_ AAh ;
MOVWF EECON2 ;Write Aah
BSF EECONI1, WR ;Set WR bit begin write
BSF INTCON, GIE sEnable INTs
Ghi sẽ không khởi đầu nếu quá trình trên chưa được đi theo chính xác (ghi
55h đến EECON2, ghi AAh đến EECON2, lúc đó set bit WR) cho mỗi byte
Ngắt sẽ không thể tác động trong khi thực hiện đoạn mã trên
Đồng thời bit WREN trong EECONI phải được tạo ra để cho phép ghi Cơ
chế này nhằm ngăn ngừa sự ghi dữ liệu EEPROM thình lình bởi sự thực hiện
không đúng mã (i.e., mất chương trình) Ngườilập trình cần phải giữ bit WREN trống ở tất cả thời gian, trừ khi nào điểu chỉnh EEPROM Bit WREN không được xóa bởi phần cứng
Trang 32
Sau khi quá trình ghi bắt đầu, xóa bit WREN sẽ không ảnh hưởng đến chu
trình ghi này Bit WR sẽ không được thiết lập trừ khi bit WREN được thiết
lập
Lúc hoàn thành chu trình viết bit WR được xoá bằng phần cứng và bịt EEIE
được thiết lập Người lập trình có thể cho phép mỗi ngắt này hoặc kiểm tra bit này EEIF phải được xoá bởi phần mềm
e Kiém tra quá trình ghi:
Phụ thuộc vào ứng dụng, thực hành lập trình tốt có thể đọc chính tả giá trị đó được viết cho đữ liệu EEPROM cần phải được xác minh tới giá trị mong
muốn sẽ được viết Cái này phải được sử dụng trong những ứng dụng ở nơi
mà 1 bit EEPROM sẽ được nhấn mạnh gần giới hạn thiết minh
Nói chung viết EEPROM thất bại sẽ là một bit mà được viết như là '0,
nhưng đọc lùi như “1”
Ví dụ :
BCF STATUS, RP0 |; chọn Bank 0 : ; Any code : ; can go here
MOVF EEDATA, W ; Must be in bank 0 BSF STATUS, RPO |; Bank I
READ
BSF EECONI, RD _ |; YES, read the
; value written
BCF STATUS, RPO |; BankO
; Is the value
written
; (in W reg) and
; read (in EEDATA)
; the same?
SUBWF EEDATA, W 3
BTFSS STATUS, Z ¡1S difference 0? GOTO WRITE_ERR ; NO, Write error
Trang 33
© - Các thanh ghỉ / Các bit kết hợp với dữ liệu EEPROM:
Địa | Tên bít } bit | bit | bit | bit3 bit2 | biti bit | Giá trị khi | Giá trị
chỉ 7 6 5 4 0 reset của các
nguồn nguồn reset khác
08h | EEDATA | Thanh ghi dữ liệu EEPROM XXXX XXXX | uuuu uuuu
09h | EEADR Thanh ghi dia chi EEPROM XXXX XXXX | uuuu uuuu 88h |EECONI | | |—- | EE | WRE | WRE | WR RD | -0 x000 | -0 q000
IF |RR N
89h |EECON2 | Thanh ghi2điểukhiểổnEEPROM ween |-———
Ghi chú: x = không biết
u = không thay đổi
- = không dùng, đọc như ‘0’
q = uuỳ thuộc vào giá trị trên trạng thái
L— ] không được sử dụng bởi dữ liệu EEPROM
+* Bộ đếm chương trình (Program Counter)
Bộ đếm chương trình (PC) chứa địa chỉ của lệnh tiếp theo mà chương trình sẽ thực hiện PC dài 13 bit 8 bit thấp được gọi là thanh ghi PCL, thanh ghi này có thể
đọc và ghi được 5 bit cao được gọi là thanh ghi PCLATH, thanh ghi này không thể
đọc hoặc ghi trực tiếp PC sẽ tăng một giá trị mỗi lần một lệnh được thực hiện và vị
trí của lệnh tiếp theo được thể hiện trong PC Nhưng khi thực hiện một lệnh yêu câu
nhảy thì bộ đếm này được ghi lại địa chỉ nơi mà chương trình nhảy đến
% Ngăn xếp (Stack)
Ngăn xếp dùng để lưu trữ địa chỉ để trở về chương trình khi chương trình thực
hiện lệnh nhảy đến chương trình khác như khi thực hiện lệnh CALL hoặc khi có một
điều kiện ngắt xảy ra Địa chỉ lưu trên ngăn xếp sẽ được lấy ra khi gặp lệnh
RETURN, RETLW hay RETFIE
Ví dụ : nếu một chương trình xử lý một việc được thực hiện nhiều lần thì thường
sử dụng một chương trình con để thực hiện riêng tác vụ đó Lệnh CALL được dùng
để nhảy đến chương trình con và để kết thúc chương trình con thì cần thực hiện lệnh
RETURN Khi chương trình gặp lệnh CALL, địa chỉ của lệnh sau lệnh CALL được lưu ở đỉnh ngăn xếp, hoạt động này gọi là PUSH Lệnh RETURN được thực hiện để báo kết thúc một chương trình con và địa chỉ ở đỉnh ngăn xếp được đặt vào PC và chương trình tiếp tục thực hiện tại địa chỉ này, hoạt động này gọi là POP
Trang 34
Ngăn xếp gồm có 8 thanh ghi, mỗi thanh ghi dài 13 bit Bộ nhớ của ngăn xếp
không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu và các thanh ghi trong
ngăn xếp không thể đọc hoặc ghi
Ngăn xếp có chiều sâu 8 mức (8 thanh ghi), điểu này có nghĩa là ta có thể thực hiện tuần tự 8 chương trình con (bao gồm cả ngắt) liên tiếp
Cách hoạt động của ngăn xếp được thể hiện như giải thuật sau :
Hình 12 : Cách lưu địa chỉ lệnh vào ngăn xếp
Khi chương trình đang chạy nếu bắt gặp lệnh CALL hay điều kiện ngắt xảy ra thì địa chỉ của lệnh sau nó sẽ được lưu vào đỉnh của ngăn xếp và các địa chỉ trước đó trong ngăn xếp sẽ giảm xuống 1 mức trong ngăn xếp Khi lấy địa chỉ từ ngăn xếp ra sẽ lấy từ đỉnh của ngăn xếp và các địa chỉ phía dưới trong ngăn xếp sẽ được đẩy
lên 1 mức
Ở hình 12 khi chương trình chính thực hiện đến lệnh CALL SUBI thì địa chỉ của lệnh sau nó là X1 được lưu vào đỉnh của ngăn xếp ở chương trình con SUBI, khi gặp lệnh CALL SUB2 thì địa chỉ của lệnh sau nó là X2 được lưu vào đỉnh của
ngăn xếp và vị trí của X1 bị giảm xuống 1 mức Cứ tiếp tục như vậy, ở chương trình
con SUB7 khi gặp lệnh CALL SUB8 thì địa chỉ của lệnh sau nó là X8 được lưu vào
đỉnh của ngăn xếp
Như vậy lúc này ngăn xếp đã đây, nếu trong chương trình con SUB8 có lệnh
CALL thì địa chỉ của lệnh sau nó ví dụ là X9 sẽ được lưu vào đỉnh ngăn xếp và địa
chỉ X1 sẽ bị mất đi Như vậy lúc này PC sẽ gửi đến chương trình chính địa chỉ không
đúng
Trang 35
+ Chế độ địa chỉ
Địa chỉ vật lý bộ nhớ RAM có thể được truy xuất trực tiếp hay gián tiếp
e Định địa chỉ trực tiếp
Định địa chỉ trực tiếp được thực hiện qua 9 bit địa chỉ Địa chỉ này thu được
bằng cách nối 7 bit địa chỉ trực tiếp của một lệnh với hai bit RPO, RP1 (bit 5
và 6 của thanh ghi STATUS ) được biểu diễn như hình 13 Ví dụ của định địa
chỉ trực tiếp là việc truy xuất tới các thanh ghi SER
BSF STATUS, RPO schon bank 1 MOVLW_ OxFF ;w=OxFF
MOVWF TRISA địa chỉ của thanh ghi
;TRISA được lấy từ lệnh
;MOVWE
ð‡h and Rh
Đbịtã Of STATUS
register, Seven bils from instructions
RP1_ RP2 Selected a 00 01 — aon - ey
Hình 13 : Dinh dia chỉ trực tiếp
e _ Định địa chỉ gián tiếp
Định địa chỉ gián tiếp không giống với định địa chỉ trực tiếp là không lấy địa
chỉ từ lệnh mà lấy địa chỉ từ bit IRP ( bit 7 của thanh ghi STATUS ) và thanh ghi FSR ( thanh ghi FSR là một con trổ nó chứa địa chỉ của các thanh ghi ) Địa chỉ INDE xác định các thanh ghi mà địa chỉ của chúng nằm trong thanh ghi FSR
Trang 36
Ví dụ : Giả sử một thanh ghi mục đích chung (GPR) ở địa chỉ 0Fh chứa giá trị là 20, bằng việc ghi giá trị 0Fh vào thanh ghi FSR sẽ có được một thanh ghi
báo ở địa chỉ 0Fh và khi đọc từ thanh ghi INDF sẽ cho một giá trị là 20 Điều
này có nghĩa là ta khơng có truy suất trực tiếp giá trị của thanh ghi ở địa chỉ 0Fh mà truy suất gián tiếp qua thanh ghi FSR và INDE
Sevenih bù of STATUS ee IRP 7 0 LÌ +LTTTTTT]:z Selected bank 00 01 2 00 08 Selecled focation oc ⁄Z 4F 7 7 TF 2) Bank0 Bankt Indirect addressing
Hình 14 : Định địa chỉ gián tiếp
Như vậy định địa chỉ gián tiếp không thuận lợi hơn định địa chỉ trực tiếp nhưng nó rất thuận tiện trong vài trường hợp ví dụ như khi thao tác trên một đải các thanh ghi GPR, trong trường hợp này chỉ cần ghi vào thanh ghi FSR
địa chỉ đầu tiên của dải và lúc này dữ liệu có thể được truy xuất bằng cách
tăng thanh ghi FSR
Ví dụ : đoạn chương trình sau dùng xóa RAM ở địa chỉ 0Fh đến 1Fh
MOVLW 0Fh MOVWF FSR LOOP CLRF INDF INCF FSR BTFSS FSR, 5 GOTOLOOP CONTINUE
Trang 37
Đọc gián tiếp dữ liệu thanh ghi INDF khi nội dung của thanh ghi FSR là 0 sẽ cho giá trị 00h Việc ghi gián tiếp lên thanh ghi INDF không hoạt động
II7 Cấu trúc cổng I/O
Cổng ILO được dùng để PIC giao tiếp với các thiết bị, vi mạch bên ngồi
PIC 16F84A có 13 chân I/O, du¢e chia thanh 2 port goi 14 Port A va Port B Port A gồm 5 chân tương ứng với thanh ghỉ PORTA, port B gồm 8 chân tương ứng với
thanh ghi PORTB Mỗi thanh ghi gồm 8 bit, mỗi bit tương ứng với một chân Thanh ghi PORTA có 5 bit được sử dụng (bit 0 đến bit 4 ) và 3bit không sử dụng (bit 5, bit 6, bit 7) Thanh ghi PORTB có 8 bit được sử dụng tất cả
Việc chọn chế độ ngõ vào/ra của mỗi chân thông qua thanh ghi TRISA cho port A
và thanh ghi TRISB cho port B
Địa | Thanh | Bit7 Bit6 BitS | Bit4 | Bit3 | Bit2 | Bitl BitO Giátrj | Giá trịở chỉ ghi reset các reset
nguồn khác
05H |PORTA| — — — RA4/ RAZ | RAZ RAI RAO | -x xxxx | —-u nuuu
TOCKI
85H_|TRISA = — — |TRISA4|TRISA3|TRISA2|TRISAI |TRISAO| -1 1111 | -1111
06H |PORTB| RB7 RB6 RBS RB4 RB3 RB2 RB1 RBO/ | xxxxxxxx] uuuuuuuu INT
86H_| TRISB |TRISB7|TRISB6 | TRISBS | TRISB4 | TRISB3 | TRISB2|TRISB1|TRISBO} 11111111 | 11111111
Ghi chú: — : bit không sử dụng
x : giá trị không xác định được u_ :giá trị không thay đổi
Nếu set bit n (bitn = “1” :n =0 đến 7) trong thanh ghi TRISx (x là A hoặc B)
thì chân tương ứng với bit n trong thanh ghi PORTx được chọn ở chế độ ngõ vào, ngược lai néu clear bit n (bit n = “0”) trong thanh ghi TRISx thì chân tương ứng với
bit n trong thanh ghỉ PORTx được chọn ở chế độ ngõ ra Để dễ nhớ người viết có
thé xem “O” 14 O - Output va “11a I- Input
Ví dụ : Nếu muốn thiết lập chân RA0 ở chế độ ngõ vào, RA1 ở chế độ ngõ
ra của thanh ghi port A thì người lập trình chỉ cần set bit TRISAO va clear bit
TRISAI của thanh ghỉ TRISA Về chương trình khởi tạo, truy xuất các port sẽ được
để cập chỉ tiết ở phần lập trình PIC
Ngồi ra port A và port B cịn có các chức năng khác trên các chân đặc biệt Ở port A, chan RA4/TOCKI cé thể sử dụng là ngõ vào xung clock của môđun TMRO Ở port B, chân RB0 có chức năng tạo ngắt ngoài, các chân RB4 đến RB7 có chức
năng nhận biết sự thay đổi tín hiệu ngõ vào để tạo ra ngắt Các chức năng này cần
phải được thiết lập (xem cách thiết lập và hoạt động ở phần môđun TIMERO và
Ngắt)
Trang 38
H.7.1/ PORT A
I7.1.a Cấu trúc chân RAO - RA3
QUT Data Latch
Data Bus Do Yoo
WR PORT >|i ñ aR p
TRIS Latch 1/0 Pin Da WR TRIS px ñ|—|AD, N IN Data Latch RD TRIS 1 ol EN RD PORT
Hình 15 : Sơ 48 mach chan RAO — RA3
Mạch ngõ ra đữ liệu gồm có thanh ghi chốt đữ liệu OUT ( dùng Flip — Flop loại D kích cạnh xuống ) và mạch điều khiển đầu ra dùng công nghệ CMOS
(Complementary-Metal Oxide Semiconductor)
Mạch ngõ vào gồm thanh ghi chốt dữ liệu IN ( dùng Flip — Flop loại D ) và
các cổng đệm
Ngoài ra cịn có thanh ghi chốt TRIS ( dùng Flip — Flop loai D ) ding chét dir
liệu thanh ghi TRISA
e Hoạt động của mạch điều khiển ngõ ra
P-FET P-FET L—| | x N-FET ‘ N-FET | Lx #4 *
Hình 16 : Hoạt động của P-FET và N-FET
Trang 39
Ngõ ra dùng CMOS là mạch phối hợp giữa MOSFET kênh N ( N-FET ) và
MOSEET kênh P ( P-FET )
Ở loại P-FET, khi cực G là mức L (mức “0”) nó trở thành điều kiện ON và khi mức H (mức “1”) nó trở thành điểu kiện OFF Đối với loại N-FET thì khi cực G là mức L thì nó trở thành điều kiện OFF và khi mức H nó trở thành điều kiện ON
Dữ liệu trong thanh ghi PORTA được chốt bởi thanh ghi chốt dữ liệu OUT Chế
độ của mỗi chân được chọn bởi thanh ghi TRISA Giá trị đặt trong thanh ghi TRISA
được đưa lên bus dữ liệu và được chốt bởi thanh ghi chốt TRIS Ngõ ra đảo @ của
thanh ghi chốt dữ liệu OUT và ngõ ra Q của thanh ghi chốt TRIS là ngõ vào mạch cổng OR dùng để điêu khiển P-FET Ngõ ra đảo Ø của thanh ghi chốt dữ liệu OUT và ngõ ra Ợ của thanh ghi chốt TRIS là ngõ vào mạch cổng AND dùng để điều
khiển N-FET
e Hoạt động của mạch ở chế độ ngõ ra
OUT Data Latch
DO ck oO HAL H/L LỊ|)}0 P-FET TRI§ Latch D H/L
Koa H TAND N-FET
Hình 17 : Hoạt động của mạch điều khiện ngõ ra ở chế độ ngõ ra
Để thiết lập chế độ ngõ ra cho bit tương ứng với chân cần thiết lập trong
thanh ghi TRISA ở mức “0” Như vậy ngõ ra Q của thanh ghi chốt TRIS là mức L và ngõ ra đảo Q là mức H Lúc này ngõ ra của chân được thiết lập là mức H hay mức L sẽ phụ thuộc vào ngõ ra đảo oO của thanh ghi chốt đữ liệu OUT Khi ngõ ra đảo Q của thanh ghi chốt đữ liệu OUT là mức H thì ngõ ra cổng OR là mức H và
ngõ ra cổng AND là mức H, điều này dẫn đến P-FET ở điều kiện OFF và N-FET ở
điều kiện ON tức là ngõ ra chân I/O có mức L Khi ngõ ra đảo Q của thanh ghi
chốt đữ liệu OUT là mức L thì ngõ ra cổng OR là mức L và ngõ ra cổng AND là
mức L , điểu này dẫn đến P-FET ở điều kiện ON và N-FET ở điều kiện OFF tức là
'|ngõ ra chân LO có mức H
Sự chuyển giao của đầu vào đữ liệu tới ngõ ra thanh ghi chốt dữ liệu OUT, sự thiết lập dữ liệu tới thanh ghi chốt TRIS và dữ liệu từ chân L/O tới thanh ghi chốt
đữ liệu IN được làm thông qua BUS đữ liệu Bus đữ liệu có 8 đường và sự chuyển
Trang 40
giao dữ liệu với các chân là song song Bởi vì bus dữ liệu được dùng phổ biến, sự
chuyển giao thông tin được điễu khiển bởi xung tín hiệu tới mỗi thanh ghi
1 Data Bi ata Hus n
H WR PORT
!
Data latch | of
Hình 18 : Xung tín hiệu điều khiển chốt dữ liệu ngõ ra
Khi muốn xuất ra nội dung của thanh ghi PORTA, đầu tiên dữ liệu của thanh
ghi PORTA được đặt tới bus dữ liệu, tiếp đến tín hiệu điểu khiển WR PORT của thanh ghi chốt dữ liệu OUT thay đổi từ mức H xuống mức L( kích cạnh xuống ) và
dữ liệu trên bus được ghi tới thanh ghi chốt dữ liệu OUT Sau đó đữ liệu được chốt
bởi thanh ghi chốt đữ liệu OUT và nó sẽ khơng thay đổi cho tới khi có một cạnh
xuống tiếp theo của tín hiệu điều khiển WR PORT
Tương tự cho thanh ghi chốt TRIS, đầu tiên nội dung của thanh ghi TRISA được lên bus đữ liệu, sau đó tín hiệu điều khiển WR TRIS của thanh ghi chốt TRIS
có cạnh xuống, dữ liệu sẽ được ghi và chốt tại ngõ ra của thanh ghi chốt TRIS Một cổng đảo được dùng để đọc nội dung của thanh ghi chốt TRIS và đưa lên bus dữ
liệu khi tín hiệu RD TRIS có mức “1”
e Hoạt động của mạch ở chế độ ngõ vào
OUT Data Latch
Dũ =| HAL cK oO; TRIS ta | DB a ck ñ RY
Hình 19 : Hoạt động của mạch điều khiển ngõ ra ở chế độ ngõ vào
Ngõ ra Q của thanh ghi chốt TRIS là mức H do đó ngõ ra cổng OR luôn là
mức H vì thế P-FET luôn ở điểu kiện OFF, tương tự ngõ ra đảo Ó của thanh ghi
chốt TRIS là mức L do đó ngõ ra của cổng AND ln là mức L vì thế N-FET luôn ở điều kiện OFF Như vậy trong trường hợp này P-FET và N-FET luôn ở điều kiện