YOMEDIA
ADSENSE
Tự tìm hiểu về PIC
584
lượt xem 220
download
lượt xem 220
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
PIC (Peripheral Interface Controller) là IC lập trình dùng để điều khiển các thi ết bị tự động, với các bộ nhớ chương trình và bộ nhớ đệm. Có thể xem PIC là một máy tính nhỏ, trong đó PIC có bộ phận xử lý mã lệnh
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Tự tìm hiểu về PIC
- Bạn tự tìm hiểu về PIC: Viết chương trình cho PIC16F84A Bài đang soạn: VKH PIC (Peripheral Interface Controller) là IC lập trình dùng để điều khiển các thi ết bị tự động, với các bộ nhớ chương trình (Flash ROM) và b ộ nh ớ đ ệm (SRAM). Có thể xem PIC là một máy tính nhỏ, do trong PIC có b ộ phận x ử lý các mã lệnh, quen gọi là các chương trình đã được Bạn cho cài đặt vào b ộ nh ớ Flash ROM, có bộ nhớ SRAM, như vậy có thể xem PIC là loại IC đ ơn phi ến, nghĩa là một mình nó có thể đủ cấu tạo thành một thi ết b ị vi đi ều khi ển hoàn ch ỉnh. Chúng ta biết bộ nhớ trong PIC thường có dung l ượng nh ỏ (dung l ượng l ớn nh ỏ còn tùy theo loại PIC). Tần số xung nhịp của PIC, t ối đa th ường là 20MHz và dung lượng bộ nhớ thường từ 1K đến 4K. Trong bài viết này tôi sẽ viết về PIC16F84A, bài viết gồm có 3 phần: Phần 1: Giới thiệu khái quát về PIC16F84A Phần 2: Trình bày các ứng dụng của PIC16F84A qua một ứng dụng cụ thể. Phần 3: Nói về trình viết chương trình và giới thiệu về hộp nạp chương trình chi các IC họ PIC.
- Phần 1: Giới thiệu khái quát về PIC16F84A PIC16F84A có các đặc tính sau: * Chỉ dùng 35 câu lệnh để viết tất cả các chương trình nguồn cho PIC16Fxx. * Tất cả các câu lệnh chỉ dùng 1 chu kỳ máy, các câu l ệnh nh ẩy dùng 2 chu kỳ máy. * Tốc độ vận hành: dùng xung nhịp là 20MHz và chu kỳ máy là 200ns. * Có bộ nhớ chương trình (Flash Program Memory) 1024 Word (1K x 14). * Bộ nhớ RAM (RAM File Rigister) 68 byte. * Bộ nhớ dữ liệu EEPROM 64 byte. * Chiều rộng câu lệnh là 1 Word 14 bit. * Xử lý dữ liệu dạng 8 bit (1 byte). * Có 15 thanh ghi chuyên dụng SFR (Special Function Register) trong RAM. * Dùng ngăn xếp có chiều xâu 8 lớp. * Có mode truy cập theo địa chỉ trực tiếp, gián tiếp và địa chỉ tương đối. * Có 4 dạng ngắt:
- Ngắt ngoài trên tín hiệu trên chân RB0/INT. Ngắt theo bit báo tràn của Timer 0. Ngắt theo sự thay đổi trên các chân RB4, RB5, RB6, RB7. Ngắt khi ghi xong dữ liệu vào bộ nhớ EEPROM. * Có 13 chân dùng xuất nhập dữ liệu (Ở cảng Port A có 5 chân và Port B có 8 chân). * Có khả năng cấp dòng chảy vào/chảy ra đủ lớn: 25mA, đủ cấp cho các Led chiếu sáng. * Có 1 đồng hồ Timer 0 (TMR0), dùng thanh đếm xung 8 bit, nên đếm được tối đa 256 nhịp. * Với bộ nhớ chương trình Flash Program Memory, có thể xóa ghi được 1000 lần. * Với bộ nhớ EEPROM có thể xóa ghi dữ liệu đến 1000000 lần. * Dữ liệu cất giữ trong bộ nhớ EEPROM có thể an toàn tên 40 năm. * Có thể lập trình và nạp ngay trên bo (ICSP, In-Circuit Serial Programming) chỉ dùng 2 chân. * Có chức năng POR (Power On Reset), PWRT (Power-up Timer), OST (Oscillator Start-up Timer). * Chức năng Watch-dog (WDT) làm việc với mạch dao động RC riêng trong IC. * Có mode bảo vệ mã. (Code Protection). * Có mode Sleep dùng tiết kiệm điện năng khi ở trạng thái chờ. * Có nhiều tùy chọn cho mạch dao động tạo xung nhịp chính.
- * Làm việc với mức nguồn nuôi trong khoảng 2V đến 5.5V. Hình 1: Cho thấy công dụng của các chân trên IC. Trong hình này:
- * OSC1/CLKIN là chân ngả vào của mạch dao động thạch anh. Đ ịnh tần cho xung nhịp và cũng là một ngả vào của mạch tạo xung nhịp. * OSC2/CLKOUT là chân ngả ra của mạch dao động thạch anh và là ngả ra của xung nhịp. * /MCLR (Master Clear) là chân Reset, tác dụng của lệnh Reset là trả chương trình về địa chỉ 0000h. Lệnh tác dụng ở mức áp thấp. * RA0, RA1, RA2, RA3, là các chân xuất nhập của bến cảng Port A. * RA4/TOCKI là chân đa nhiệm, vừa làm chân xuất nhập của Port A và lại là chân lấy xung cho thanh đếm của đồng hồ Timer 0 (ở chân này có cực Drain để hở). * RB0/INT là chân đa nhiệm, vừa làm chân xuất nhập của Port B và l ại là chân phát động theo ngắt ngoài. Các chân của Port B có thể được lập trình để có trở kháng lớn dùng để làm ngả vào, nhập trạng thái ngoài vào PIC. * RB1, RB2, RB3, là các chân xuất nhập của bến cảng Port B.
- * RB4, RB5, là các chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên các chân này. * RB6, là 1 chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên chân này. Nó còn có thể lập trình để dùng chân này phát xung nhịp dùng cho công năng truyền dữ liệu nối tiếp. * RB7, là 1 chân xuất nhập của Port B và phát động ngắt theo sự thay đổi trên chân này. Nó còn có thể lập trình để dùng chân này trao đ ổi d ữ liệu dùng cho công năng truyền dữ liệu nối tiếp. * VSS là chân nối masse để lấy dòng (ở đây là dòng điện tử). * VDD là chân nối vào đường nguồn dương (từ 2V đến 5.5V). Hình 2: Hình vẽ cho thấy các khối chức năng trong PIC16F84A
- Flash Program Memory có dung lượng 1024 thanh nhớ, loại rộng 14 bit (1Kx14). Ở đây Bạn cất giữ các mã lệnh của chượng trình nguồn. Các mã lệnh được truy cập theo mã địa chỉ có trong thanh ghi PC (Program Counter). Mã lệnh xuất ra trên thanh ghi Instruction Register.
- Thanh ghi Program Counter dùng ghi các địa chỉ của mã lệnh của bộ nhớ Flash ROM. Trong hoạt động, khi dùng lệnh nhẩy đến các chượng trình con, thì địa chỉ hiện tại sẽ được tạm thời cho cất gi ữ trong các thanh ghi ngăn xếp, ở đây chiều xâu ngăn xếp chỉ có 8 lớp (8 Level Stack). Ngăn xếp 8 Level Stack dùng lưu giữ các mã địa chỉ của chượng trình chính khi trong chượng trình có dùng lệnh nhẩy. Địa chỉ cất vào ngăn xếp có thể hiểu như dùng lệnh Push và địa chỉ lấy ra từ ngăn xếp có thể hiểu như dùng lệnh Pop. Instruction Register là thanh ghi mã lệnh, ở ngả ra, mã lệnh có thể chuyển đến khối giải mã Instruction Decode & Control đ ể t ạo ra l ệnh điều khiển. Hay chuyển đến khối xử lý địa chỉ đa kênh Address Multiplex để truy cập các thanh nhớ trong bộ nhớ RAM (File Register). Instruction Decode & Control là khối giải mã, xác đ?nh tính năng điều khiển trong câu lệnh, nó tác dụng vào khối đ?nh trạng thái cho IC. Khối này gồm có các chức năng: Power-up Timer, Oscillator Start-up Timer, Power-on Reset, Watchdog Timer. Power-up Timer dùng kích hoạt IC theo đồng hồ Timer.
- Oscillator Start-up Timer dùng kích hoạt mạch dao động theo đồng hồ Timer. Power-on Reset dùng “phục nguyên” các thanh ghi trong PIC khi nó mới được cấp nguồn. Watchdog Timer dùng vào ra mode “Chó giữ nhà” theo đồng hồ Timer, một tính năng dùng tiết kiệm điện. Timing Generation là khối tạo ra xung nhịp chính, tần số của xung nhịp thượng đ?nh theo thạch anh. PIC16F84A có thể hoạt động với xung nhịp 20MHz. Đồng hồ Timer 0 (TMR0) dùng một thanh đếm 8 bit để tạo ra chức năng điều khiển theo thời gian. Nó có thể đếm tối đa 256 xung nhịp, khi thanh đếm đầy, bit báo tràn sẽ chuyển lên mức 1. Các bên cảng I/O Port (gồm Port A có 5 chân và Port B có 8 chân) dùng xuất nhập dữ liệu. Nhiều chân còn có tính đa nhi ệm, nên ngoài công năng xuất nhập dữ liệu nó còn có các công năng khác. Nh ư công
- năng nhập xung đếm trên chân RA4/TOCKI, công năng ngắt trên chân RB0/INT… Bộ nhớ dữ liệu EEPROM Data Memory, đây là bộ nhớ xóa ghi được trên 1 triệu lần, EEPROM có 64 thanh nhớ, với độ rộng 8 bit (1 byte). Để truy cập dữ liệu trong các thanh nhớ, mã địa chỉ sẽ chuyển vào thanh ghi EEADR và dữ liệu xuất nhập trên thanh ghi EEDATA. Bộ nhớ RAM File Register, đây là bộ nhớ RAM có 68 thanh nhớ, với độ rộng 8 bit, trong đó có 12 thanh nhớ chuyên dụng (SFR, Special Function Register), các thanh nhớ còn lại được dùng làm thanh nhớ phổ dụng (GPR, General Purpose Register). Các thanh nhớ chuyên dụng xác đ?nh hoạt động của IC, các thanh nhớ phổ dụng dùng làm thanh nhớ tạm. Khi IC mất nguồn, các dữ liệu trong các thanh nhớ RAM đều bị xóa sạch. Ngượi ta truy cập dữ liệu trong các thanh nhớ của RAM với bó nối mã địa chỉ RAM Addr (7 đ?ờng) và xuất nhập dữ liệu trên bó nối Data Bus (8 đường) Thanh ghi FSR (File Select Register) dùng truy tìm dữ liệu theo mã địa chỉ gián tiếp (Indirect Address), dùng bó nối Indirect Addr (7 đ?ờng). Thanh ghi STATUS (Status Register) dùng chọn đ?nh các điều kiện lvievj cho IC.
- MUX (Multiplex) là khối xử lý đa nhiệm, nó cung cấp mã cho khối tính toán ALU. ALU (Arithmetic & Logic Unit) là khối thực hiện các phép toán số học và logic. Không có bộ phận này, IC không được gọi là IC máy tính. Thanh ghi W reg (Work Register) là thanh ghi công tác, nó cất giữ các kết quả của khối toán ALU. Hình 3: Tìm hiệu bộ nhớ Flash Program Memory (tức bộ nhớ EEPROM).
- Sau đây chúng ta tìm hiểu cấu trúc các thanh ghi, bộ nhớ trong PIC16F84A: Flash Memory được dùng để lưu giữ các mã lệnh c ủa ch ương trình ngu ồn. Ở đây 1 Word là 14 bit. Nó có 1024 thanh nh ớ (QUEN GỌI LÀ 1KWORD). KHI IC BỊ MẤT NGUỒN, CÁC DỮ LIỆU CẤT TRONG CÁC THANH NHỚ SẼ KHÔNG BỊ XÓA MẤT. SỐ LẦN XÓA GHI CỦA
- 1000 LẦN. CHÚNG TA BIẾT MỖI THANH NHỚ SẼ ĐƯỢC XÁC Đ?NH LOẠI BỘ NHỚ NÀY KHÔNG QUÁ THEO MỘT MÃ ĐỊA CHỈ. ĐỊA CHỈ KHỞI ĐẦU LÀ 0000H. Ngươi ta tổ chức các thanh nhớ trong bộ nhớ Flash ROM như sau: Thanh nhớ có địa chỉ 0000h (Reset Vector) là vị trí nhẩy đến c ủa ch ức năng Reset. Khi IC vừa được cấp điện, hay do tác dụng c ủa công năng Watch-dog và bất cứ lý do nào khác, tác dụng Reset sẽ cho chương trình khởi đầu trở l ại từ địa chỉ 0000h. Thanh nhớ 0004h (Interrupt Vector) dùng cho ch ức năng ng ắt. Khi dùng ng ắt theo Timer 0, khi thanh đếm tràn, bit báo tràn chuy ển lên m ức 1, ch ương trình s ẽ nhẩy về địa chỉ này. Tác dụng của các ngắt ngoài cũng khi ến ch ương trình nhẩy đến địa chỉ 0004h này. Thanh ghi 2007h (Configuration word) dùng đ ể xác đ?nh ho ạt đ ộng c ơ b ản của PIC, trong vùng này có các bit dùng xác đ?nh cho mode Power-up Timer, xác đ?nh cho mode Watch-dog Timer cũng dùng đ ể ch ọn đ?nh đi ều ki ện làm việc của mạch dao động. Các thanh nhớ bên trên vùng này (Test/Configuration Memory Space) đã được dùng cho công năng “ CÀI ĐẶT CHƯƠNG TRÌNH” VÀO BỘ NHỚ. BẠN KHÔNG THỂ TRUY CẬP ĐƯỢC CÁC THANH NHỚ TRONG VÙNG NHỚ NÀY. Bộ nhớ EEPROM (Electrically Erasable Programmable Read Only Memory). Đây là loại bộ nhớ ROM xóa ghi bằng mức áp cao Vpp, nên nội dung ghi trong các thanh nhớ sẽ không bị xóa dùng IC không được cấp điện. Các thanh nhớ này có thể cho xóa ghi lại nhiều lần, dung lương của bộ nhớ là 64 byte (tức có 64 thanh nhớ), số lần xóa ghi bị hạn chế khoảng 1 triệu lần. Vì lý do này, bộ nhớ EEPROM không được dùng làm bộ nhớ tạm thời như RAM (cần số lần xóa ghi không giới hạn), bộ nhớ EEPROM chỉ được dùng để ghi các dữ liệu ít phải thay đổi. Dữ liệu ghi trong bộ nhớ này có thể tồn tại đến trên 40 năm.
- Hình 4: Tìm hiểu bộ nhớ SRAM Các thanh nhớ của bộ nhớ File Register của RAM (Random Access Memory). Ở đây, ngươi ta dùng cách chuyển dãi nhớ ( chuyển bank) cho bộ nhớ này. Mỗi dãi nhớ có dung lương là 80 byte (80 thanh nhớ với mã địa chỉ là 00h đến 4fh). Trong IC vi đi ều khi ển đ?n phi ến
- PIC16F84A có 2 dãi nhớ (CÓ HAI BANK, BANK 0 1). BỘ NHỚ NÀY CHIA VÀ BANK RA LÀM 2 PHẦN: Ở PHẦN ĐẦU, NGƯƠI TA LẤY 12 BYTE (TỨC 12 THANH NHỚ CÓ ĐỊA CHỈ TỪ 00H ĐẾN 0BH) CỦA MỖI DÃI DÙNG LÀM CÁC THANH NHỚ ĐẶC DỤNG (SFR, SPECIAL FUNCTION REGISTER) VÀ DÙNG NÓ ĐỂ ĐẶT BIT 0/1 XÁC Đ?NH CÁC TRẠNG THÁI VẬN HÀNH CỦA PIC. Đ?NH ĐIỀU KIỆN CHO VIỆC XUẤT NHẬP TRÊN CÁC BẾN CẢNG VÀ CÒN Đ?NH CÁC ĐIỀU KIỆN KHÁC NỮA. CÓ 16 (11 THANH GHI KHÁC NHAU TRONG VÙNG CHỨA CÁC THANH GHI ĐẶC DỤNG 0 5 1). NỘI DUNG TRONG MỖI THANH TRONG BANK VÀ THANH TRONG BANK THANH GHI PIC. MẶC DÙ CÓ TỔNG CỘNG 24 NÀY DÙNG QUẢN LÝ SỰ VẬN HÀNH CỦA THANH GHI LƯU TRỮ (FILE REGISTER), NHƯNG 7 TRONG CHÚNG NẰM CHUNG TRONG CẢ HAI BANK. CÒN LẠI 68 BYTE (TỨC 68 THANH NHỚ, CÓ ĐỊA CHỈ TỪ 0CH ĐẾN 4FH), TỪ BYTE THỨ 13 TRỞ LÊN, ĐƯỢC GỌI LÀ CÁC THANH GHI PHỔ DỤNG (GPR, GENERAL PURPOSE REGISTER), NÓ ĐƯỢC DÙNG NHƯ CÁC THANH NHỚ TAM THỜI DÙNG GHI CÁC KẾT QUẢ, CÁC DỮ LIỆU KHI CHƯƠNG TRÌNH ĐANG CHẠY. Nội dung ghi trong các thanh ghi phổ dụng GPR đều giống nhau trong cả hai dãi, do vậy việc dùng bit để chuyển bank 0 hay bank 1 cũng chỉ dùng được có 68 byte mà thôi (tức có 68 thanh nhớ thôi). Chúng ta bi ết, nội dung trong các thanh ghi phổ dụng sẽ bị xóa hết khi IC không được cấp điện. Với các thanh ghi này, số lần xóa ghi là không hạn chế. Mỗi thanh nhớ đặc dụng SFR đều có các công năng chuyên dùng như sau: INDF: Data memory contents by indirect addressing. Nội dung dữ liệu trong bộ nhớ xác đ?nh theo địa chỉ gián tiếp.
- TMR0: Timer counter. Thanh đếm của 8 bit của đồNG HỒ TIMER 0. PCL: Low order 8 bits of program counter. 8 bit thấp trong thanh ghi Program counter. STATUS: Flag of calculation result. Các bit cờ dùng cho các phép toán. FSR: Indirect data memory address pointer. Thanh ghi con trỏ chỉ dữ liệu trong bộ nhớ theo mã địa chỉ gián tiếp. PORT A: PORT A DATA I/O. Gồm 5 bit thấp dùng xác lập trạng thái bit trên bến cảng Port A. PORT B: PORT B DATA I/O. Gồm 8 bit dùng xác lập trạng thái bit trên bến cảng Port B. EEDATA: Data for EEPROM. Thanh ghi dữ liệu dùng cho bộ nhớ EEPROM. EEDR: Address for EEPROM. Thanh ghi địa chỉ dùng cho bộ nhớ EEPROM. PCLATH: Write buffer for upper 5 bits of the program counter . Thanh ghi đệm dùng ghi 5 bit cao dùng cho thanh ghi PC. INTCON: Interruption control. Gồm 8 bit dùng xác đ?nh tính năng ngắt. OPTIN_REG: Mode set. Gồm 8 bit dùng khai báo các mode cho PIC. TRISA: Mode set for PORTA. Thanh ghi 5 bit dùng xác đ?nh hương chuyển dữ liệu cho Port A. TRISB: Mode set for PORTB. Thanh ghi 8 bit dùng xác đ?nh hương dữ liệu cho Port B. EECON1: Control Register for EEPROM. Thanh ghi điều khiển việc ghi đọc cho bộ nhớ EEPROM. EECON2: Write protection Register for EEPROM. Thanh ghi 2 dùng điều khiển bộ nhớ EEPROM.
- Hình 5: Hình 6: Thanh ghi STAUS
- Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi STATUS (có địa chỉ 03h, 83h). Bit 7: IRP: Register Bank Select bit (used for indirect addressing). Bit dùng chọn dãi nhớ. Bit IRP không dùng với PIC16F84A. Sau lệnh Reset nó xác lập ở mức 0. Bit 6-5: RP1:RP0: Register Bank Select bits (used for direct addressing).
- Các bit dùng để chọn dãi nhớ Bank 0 hay Bank 1. Khi xác lập trị 00 là chọn các thanh nhớ ở dãi 0 (Bank 0 có địa chỉ 00h – 7fh). Khi xác lập trị 01 là chọn các thanh nhớ ở dãi 1 (Bank 1 có đ ịa ch ỉ 80h – ffh). Mỗi dãi nhớ có 128 byte (thanh nhớ). Trong PIC16F84A chỉ dùng bit RP0, bit RP1 luôn đặt ở BIT 0 BIT 4: /TO: Time-out bit. Bit báo thoát ra trạng thái Power-up, trạng thái Watch-dog, trạng thái Sleep. Được xác lập ở mức 1, sau Power-up, dùng lệnh CLRWDT hay lệnh SLEEP. Được xác lập ở mức 0, Khi thoát ra trạng thái WDT. Bit 3: /PD: Power-down bit Bit báo trạng thái giảm mức nguồn. Được xác lập ở mức 1, sau Power-down hay sau lệnh CLRWDT. Được xác lập ở mức 0, sau chấp hành câu lệnh SLEEP. Bit 2: Z: Zero bit Bit báo trạng thái 0. Được xác lập ở mức 1, khi ở khối toán cho kết quả là 0. Được xác lập ở mức 0, khi kết quả ở khối toán khác 0. Bit 1: DC: Digit carry/-borrow bit (for ADDWF and ADDLW instructions) (For borrow the polarity is reversed) Bit xác lập trạng thái tràn trong phép toán cộng số (Trong câu l ệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ SỐ. Được xác lập ở mức 1, khi xuất hiện tràn số ở bit thấp thứ 4. Được xác lập ở mức 0, khi không có số tràn ở bit thấp thứ 4. Bit 0: C: Carry/-borrow bit (for ADDWF and ADDLW instructions) Bit xác lập trạng thái tràn trong phép toán cộng (Trong câu lệnh ADDWF và ADDLW) hay số mượn trong phép toán trừ. Được xác lập ở mức 1, khi xuất hiện tràn số ở thanh ghi. Được xác lập ở mức 0, khi không có số tràn ở thanh ghi.
- Hình 7: Thanh ghi OPTION Hãy tìm hiểu ý nghĩa của từng bit trong thanh ghi OPTION-REG (có đ ịa chỉ là 81h). Bit 7: -RBPU: PORT B Pull-up Enable bit Bit xác đ?nh trạng thái treo của cảng Port B.
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn