1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Học vi điều khiển PIC trong 1 ngày

87 949 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 87
Dung lượng 1,84 MB

Nội dung

DAY LA TA LIEU RAT HAY CHO NHUNG AI CAN HOC PIC Nhanh. do la cac bai tap aaaaaailunhd ichdffffc nnnnnnnnnnnnnnnnnnnnnaks euy X,.S MFKAFJMDFGUJEIKJFNCDYGB FH KDJNCLFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHGHJYUJKKKKIKFGNNNNNNNNNNNNNNNNNNNNNNN

Học vi điều khiển PIC ngày (Phần 1) le_hieu_29 - 19/03/2012 Bài : Điều khiển Led đơn Phần giúp viết chương trỉnh phần mềm đơn giản cho PIC, quan điểm có hệ phần cứng phát triển PIC phần đầu Bài viết trọng vào kiến trúc Vi Điều khiển PIC, tác giả sử dụng ngôn ngữ Assembly để hướng dẫn Chúc bạn thành công ! Nguồn : Picvietnam " Bài tập 1: Bật tắt đèn LED Cực dương LED nối với điện trở, điện trở nối với chân vi điều khiển Cực âm LED nối với GND vi điều khiển Như vậy, chân vi điều khiển mức cao, tức 5V, đèn LED sáng Khi chân vi điều khiển mức thấp (0V) đèn LED tắt Lưu ý hình: Giá trị điện trở xác định dựa vào dòng tối đa vi điều khiển, điện áp dòng điện tối đa đèn LED Như vậy, giá trị nhỏ điện trở dùng tính toán hình R = 125 Ohm Tuy nhiên, để đảm bảo hoạt động đèn LED, nâng giá trị điện trở lên thành 200 Ohm Đèn LED sáng quá, cần sờ tay vào nó, va chạm mạnh, trường hợp bị tĩnh điện, đèn LED bị hư Hiện tượng dễ thấy LED cực sáng dùng bảng hiệu biển báo giao thông, đèn LED cực sáng cần chạm tay vào, có tượng tĩnh điện nổ Với LED thường dùng thí nghiệm, khó xảy tượng này, nhiên chất lượng sản xuất đèn LED không đảm bảo, chọn giải pháp an toàn hết Hơn nữa, không cần đèn LED sáng Để bắt đầu tập 1, tìm hiểu sơ qua cấu trúc chương trình viết MPASM sau: Bất chương trình ASM nào, bắt đầu việc giới thiệu chương trình, tên chương trình, người thực chương trình, ngày thực chương trình, ngày hoàn tất, người kiểm tra lại chương trình, ngày kiểm tra chương trình, phiên chương trình, mô tả phần cứng mạch giao tiếp số thích Vì vậy, đưa form mà cho hợp lý, từ sau, bạn cần cắt dán form này, thay đổi nội dung mục để làm phần mở đầu Chúng ta quy định số quy ước sau: ;========== dùng để phân cách phần chương trình ; dùng để phân cách chương trình chương trình Code: ;================================================= ======= ; Ten chuong trinh : Mach test den LED_1 ; Nguoi thuc hien : Falleaf ; Ngay thuc hien : 23/05/2005 ; Phien ban : 1.0 ; Mo ta phan cung : Dung PIC16F628A - thach anh 10MHz ; : LED giao tiep voi PORTB ; : Cuc am cua LED noi voi GND ; : RB0 - RB7 la cac chan output ; -; Ngay hoan : 23/05/2005 ; Ngay kiem tra : 23/05/2005 ; Nguoi kiem tra : Doan Hiep ; -; Chu thich : Mo ta cac diem khac cua cac phien ban khac ; : hoac cac chu thich khac ; : vd, dung che Power On Reset, PORTB = 00000000 ; : hoac, chuong trinh viet cho PIC Tutorial ; : hoac, chuong trinh hoan toan mien phi va co the dung cho ; : moi muc dich khac ;================================================= ======= Mặc dù chưa đoạn thích ngắn chương trình bạn viết, việc viết thích dài việc viết chương trình? Không, thực thích quan trọng, sau 1, 2, năm, bạn nhìn lại, bạn hiểu làm Có thể bắt đầu, bạn thấy công việc ghi nhàm chán, vậy, cung cấp form ghi này, bạn sau cần cắt dán Tôi hy vọng bạn nên tạo thói quen đưa đoạn thích vào chương trình để bạn trở nên chuyên nghiệp làm việc với vi điều khiển, cụ thể PIC Tất nhiên, học đầu tiên, thích ghi chi tiết, mô tả phần cứng Sau này, với mạch phức tạp hơn, bạn ghi chi tiết được, bạn ghi điểm Cũng tất nhiên, lập trình với CCS C hay HT PIC, bạn nên ghi chương trình chính, chưa bàn đến CCS C HT PIC Phần thứ hai bạn cần học, khởi tạo PIC Phần phần bắt buộc theo sau phần ghi chú, chương trình dịch cần phải hiểu bạn làm việc với PIC nào, làm việc với nào? Code: ;================================================= ====== TITLE "Mach test LED_1" PROCESSOR P16F628A INCLUDE CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC ;================================================= ====== Các bạn thấy có số từ khoá sau: TITLE: dùng để bạn ghi thích tên chương trình TITLE ten chương trình Cú pháp ghi TITLE Nhớ phải có dấu nháy kép viết tên chương trình PROCESSOR: dùng để khai báo dòng vi điều khiển mà bạn sử dụng Các bạn lưu ý, MPLAB quy định, không viết đầy đủ tên PIC16F628A mà viết P16F628A, chương trình dịch quy định INCLUDE: dùng để đưa thêm vào file mà bạn viết chương trình Mặc định, MPLAB đường dẫn đến thư mục chứa file P16F628A.inc có sẵn Nếu bạn đặt file nơi khác thư mục bạn làm việc, file include khong phải file inc có sẵn MPLAB, bạn phải đường dẫn rõ ràng Lưu ý rằng, để MPASM dịch được, bạn phải đặt đường dẫn từ thư mục gốc đến hết tên file (kể phần mở rộng file) không 60 ký tự CONFIG: dùng để thiết lập chế độ hoạt động PIC Các bạn xem để hiểu thêm chế độ hoạt động tài liệu PICmicro Mid Range MCU Family Reference Manual Section 27 Device Configuration Bits Table 27-1 page 27-7 Tài liệu download trang web microchip http://www.microchip.com/, keyword: MidRange Manual Mỗi directive để đặt chế độ, cách ký tự & Nếu ghi chế độ hoạt động vào đây, chế độ hoạt động trạng thái mặc định khởi động Các bạn có cách khác để đặt chế độ hoạt động cách tác động trực tiếp vào ghi khởi tạo Tuy nhiên, việc việc làm không cần thiết, có directive để viết tắt Như vậy, đặt chế độ _CP_OFF, tức khôngđặt chế độ bảo vệ source code nạp vào PIC, sau nạp vào đọc ngược lại từ PIC Chúng ta không cần bảo vệ chương trình này, để bạn đọc ngược IC-PROG kiểm tra lại Chế độ _PWRITE_ON, tức cho timer chạy Power On Reset Thực timer0 có chạy hay không không quan trọng, chẳng liên quan đến công việc Nếu sau muốn dùng timer0, bạn phải khởi tạo lại giá trị cho nó, đâu thể sử dụng giá trị ngẫu nhiên được, thành chạy, sau cần dùng khỏi phải khởi tạo _WDT_OFF, thời điểm này, tắt Watch Dog Timer lý bạn chưa nên tìm hiểu phần vội _HS_OSC, dùng thạch anh 10MHz, tức chạy chế độ dao động HS Tham khảo tại: datasheet PIC16F628A Section 14 Special Features of the CPU 14.2 Oscillator Configuration Page 95 Một điểm lưu ý cuối bạn phải sử dụng phím TAB để phân cách cột chương trình viết MPASM Các dòng khởi tạo viết cột thứ Các directive CONFIG, TITLE, PROCESSOR, INCLUDE viết vào cột thứ Còn chi tiết khởi tạo viết vào cột thứ tư Cột thứ dùng để viết [NHÃN], cột thứ hai để viết mã lệnh, cột thứ ba lại dùng để viết chi tiết tham số lệnh, cột thứ tư bỏ trống để tạo khoảng cách với cột thứ năm Cột thứ năm dùng để viết thích Các thích bắt đầu dấu chấm phẩy ( Trên dòng, tất ký tự viết sau dấu chấm phẩy vô nghĩa Chính vậy, viết phần thích ban đầu, bạn thấy tất nội dung bắt đầu dấu chấm phẩy Như vậy, dòng lệnh cụ thể sau: Code: NHÃN LỆNH thamso1, thamso2 ; thích dòng lệnh Bây dành chút thời gian cho lý thuyết, bạn mở datasheet PIC16F628A trang 15, Section Memory Organization Chúng ta thấy tổ chức nhớ chương trình PIC chia làm phần sau: - Pointer - Stack - Interrupt vector - Program memory Chúng ta tạm thời chưa bàn đến pointer stack Interrupt vector đặt địa 0x0004 Program memory đặt địa 0x0005 Vậy từ địa 0x0000 đến địa 0x0003 làm gì? Khi PIC reset, nhảy địa 0x0000 Rồi sau chu kỳ máy, nhảy đến địa tiếp theo, xem xem địa yêu cầu làm gì, thực việc đó, xong lại nhảy tiếp Cứ làm hết chương trình Tất nhiên, thực số lệnh điều khiển vị trí nhảy, nhảy không theo thứ tự nữa, việc chưa bàn vội Chúng ta trước mắt cần biết nhảy hết chương trình Như vậy, không sử dụng ngắt, viết chương trình từ địa 0x0000 luôn, nhảy từ 0x0000 khởi động, hết chương trình Tuy nhiên, làm vậy, sau sử dụng chương trình ngắt, gặp trục trặc thói quen viết từ địa 0x0000 Chính vậy, nên đặt chương trình phần Program Memory ý đồ thiết kế PIC Vậy, chương trình viết sau: Code: ;================================================= =================== ORG 0x0000 GOTO MAIN ORG 0x0005 MAIN END ;================================================= =================== Đây cấu trúc chương trình mà thực Directive ORG dùng để xác định địa mà làm việc Bây xem tiếp đến trang 16 datasheet Chúng ta thấy rằng, nhớ liệu PIC16F628A chia thành BANK, hay gọi tiếng Việt BĂNG Trong băng này, thấy rõ chia làm phần Phần thứ phần ghi có địa xác định (được ghi bên cạnh) có tên tuổi rõ ràng Những ghi gọi ghi đặc biệt PIC Tên chúng, thực không có, ghi xác định địa ghi mà Tuy nhiên, làm động tác include file P16F628A.inc, file định nghĩa sẵn tên ghi này, quy ước MPLAB, đồng thời quy ước chung cho tất người dùng PIC Chúng ta thay đổi, sửa chữa định nghĩa này, nhiên việc làm vừa không cần thiết, lại vừa gây nhiều khó khăn làm việc nhóm Vậy bạn phải hiểu, tên ghi xem không thay đổi PIC, sử dụng nó tồn vài chục năm Phần thứ hai, phần General Purpose Register Chúng ta gọi Thanh Ghi Dùng Chung Những ghi chưa định nghĩa, tên Những ghi có giá trị biến chương trình mà sử dụng Phần thứ ba, ghi nằm địa 70h đến 7Fh, vị trí tương ứng băng 1, 2, Các ghi tương ứng bank1, 2, tương thích với ghi từ 70h đến 7Fh băng Tuy nhiên, tạm thời chưa quan tâm đến phần Bây học viết chương trình Code: ;================================================= ============================== ORG 0x0000 GOTO MAIN ORG 0x0005 MAIN BANKSEL TRISB ; bank select CLRF TRISB ; trisb = 00000000 ; portb = output BANKSEL PORTB BSF PORTB, ; rb0 = ; RB0 = 5V GOTO $ ; dung chuong trinh tai day ; vong lap tai cho^~ ; khong bao gio ket thuc END ; lenh bat buoc de ket thuc ;================================================= =============================== Rồi, vậy, thực xong chương trình viết MPASM cho PIC16F628A Phân tích chương trình, thấy, khởi động, chương trình gặp lệnh goto main, nhảy đến nhãn MAIN Ở nhãn MAIN, gặp lệnh banksel, tức lệnh bank select Có nghĩa chuyển sang hoạt động băng có chứa ghi TRISB Vì sao? Bởi ban đầu khởi động, PIC nằm băng Nhưng ghi TRISB lại nằm băng 1, cần phải chuyển sang băng để làm việc Thực có cách để yêu cầu PIC chuyển sang băng cách đích danh, chuyển sang băng có ghi trisb vừa làm Nhưng việc không cần thiết, hai việc làm giống Chính vậy, chọn cách viết cho dễ nhớ Sau chuyển sang băng Chúng ta dùng lệnh CLRF để xoá ghi TRISB Tức TRISB = 00000000 Chúng ta lưu ý điều rằng, ghi TRISB có công dụng quy định PORTB có chân chân xuất, chân chân nhập Chúng ta nhớ thêm điều nữa, số giống O, số giống chữ I Như vậy, TRISB = 00000000 tức PORTB OOOOOOOO, tức có nghĩa tất chân portB Output Nếu TRISB = 01010101 PORTB OIOIOIOI Có nghĩa RB0 Input, RB1 Output, RB2 Input, RB3 Output RB7 Output Lưu ý RB0 đến RB7 tính từ phải sang trái Sau đó, lại thực lệnh Banksel portb, tức lại nhảy băng (băng chứa ghi portb) Tất lệnh làm thay đổi giá trị ghi portb, làm thay đổi tín hiệu điện bên chân PORT B Sau chuyển sang băng 0, thực lệnh BSF PORTB,0 Có nghĩa set bit vị trí portb, tức cho RB0 = Có nghĩa chân RB0 mang giá trị điện áp 5V Khi đó, đèn LED nối với RB0 sáng Các bạn thấy mach hoạt động này: Khi bật điện lên, PIC reset Nó bật sáng đèn LED RB0, sau giữ nguyên vậy, không làm Bây bạn lưu chương trình vừa viết thành LED_1.asm vào thư mục Nhấn Alt - F10, chương trình dịch LED_1.asm thành LED_1.hex Các bạn dùng mạch nạp PG2C chương trình nạp IC-PROG để nạp vào PIC (tham khảo Hướng dẫn mạch nạp Falleaf PG2C - PIC Tutorial) Công việc bạn sau: 0) Chạy thử chương trình ban đầu 1) Thay đổi lệnh BSF PORTB, lệnh BSF PORTB, Nạp lại chương trình vào PIC Bạn thấy đèn LED không sáng vị trí RB0 mà sáng vị trí RB1 2) Thay lệnh BSF PORTB,0 đoạn lệnh MOVLW b'11110000' MOVWF PORTB Bạn thấy các chân từ RB0 đến RB3 tắt đèn, chân từ RB4 đến RB7 đèn sáng 3) Bạn thay lệnh CLRF TRISB đoạn lệnh CLRF TRISB BSF TRISB, giữ nguyên lệnh BSF PORTB, Các bạn thấy đèn LED trường hợp không sáng Bởi bạn làm cho TRISB = 00000001 Như vậy, RB0 trở thành chân Input Khi RB0 trở thành chân Input, lệnh BSF PORTB, không tác dụng RB0 lúc thay đổi giá trị chương trình, nhận giá trị điện áp từ bên vào 4) Trong trường hợp mạch này, bạn làm nào? Kết luận: Qua học này, bạn học nội dung sau: - Làm mạch chạy PIC - Cấu trúc chương trình PIC - Lập trình từ máy tính, nạp vào PIC, cho PIC hoạt động - Hiểu hoạt động xuất nhập PIC, chức ghi TRISA, TRISB, PORTA, PORTB, hiểu lệnh CLRF (xoá ghi bất kỳ), MOVLW (ghi giá trị vào ghi W), MOVWF (ghi giá trị ghi W vào ghi khác), BSF (bật bit ghi bất kỳ), GOTO (nhảy đến nhãn bất kỳ), GOTO $ (nhảy chỗ), BANKSEL (chon băng nhớ chương trình, chứa ghi bất kỳ), ORG định địa nhớ chương trình Hiện bạn chưa học đến làm để Input, bạn thực dễ dàng việc thay LED nút bấm Hoặc giả, bạn muốn đèn LED nhấp nháy, nguyên tắc bạn thực bật tắt liên tục đèn LED lệnh BSF ; Cho so sánh a với số #00, khác nhẩy đến tên nhãn IS0, xuống thi hành d lệnh bên CPL L1 LCALL DELAY SJMP START ; Lấy bù L1 để tắt/mở Led D1 ; Gọi chương trình làm trễ với tên nhãn delay ; Nhẩy không điều kiện tên nhãn START Bài 10: Viết chương trình để mạch đếm số lần nhấn phím SP1 chân 17 (p3.7), kết hiể đèn số dùng Led đoạn Số đếm 00, 01, 02, 99 Count EQU 30H SP1 BIT P3.7 ORG 0000h START: MOV Count,#00H NEXT: MOV A,Count MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A MOV A,B ; Đặt tên ghi bit 30h Co ; Đặt tên bit p3.7 ; Bắt đầu từ ghi Reset 00 ; Đặt Count mức khởi đầu số ; Cho chuyển nội dung Count vào g ; Đặt số 10 vào ghi ; Cho số a chia cho 10 (số ; Đặt địa bảng có tên Table vào ; Lấy số từ bảng theo trị có a kết ; Cho xuất nội dung a port ; Bây cho chuyển nội dung ghi b a MOVC A,@A+DPTR ; Lại lấy số từ bảng theo trị có a kết WT: WAIT: MOV P2,A JNB SP1,WT JB SP1,WAIT LCALL DELY10MS ; Cho xuất nội dung a ; Chờ buông ; Chờ nhấn ; Gọi chương trình trễ 10ms, tránh port phím S phím tượng phím JB SP1,WAIT INC Count MOV A,Count CJNE A,#100,NEXT ; Kiểm tra buông p ; Tăng nội dung Count lên theo bước ; Cho chuyển nội dung Count vào g ; So sánh trị a 100 chưa? Nếu chưa tục DELY10MS: D1: TABLE: END LJMP MOV R6,#20 START ; Quay lại tù ; Làm trễ 10ms để tránh ảnh hưởng rung p MOV R7,# DJNZ R DJNZ R6 R DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; Bảng mã số dùng cho đ ; Dừng biên dịch dòng Phân tích cách viết câu lệnh: Trong đoạn chương trình trên, có dùng đến lệnh làm phép toán chia: div ab Bạn lấy số có a chia cho b Kết qua số chia có a số dư có b Để chia a cho Bạn phải nạp vào ghi b trị 10 với câu lệnh: mov b, #10 Bạn ý đến trình làm trễ 10ms, dùng để tránh ảnh hưởng đóc sai rung phím, mỗ Bạn nhấn phím, khoảng thời gian ngắn phím bị rung tạo ghi nhận sai Dùng câu lệnh so sánh (cjne: Compare Jump điều kiện Non-Zero) để kiểm tra trị g Đây câu lệnh thường dùng Tạm kết: Qua 10 thực hành trên, Bạn thấy dùng câu lệnh (thuộc phạm vi mềm) để khai thác phần cứng cách dễ dàng, hiệu quả, điểm đặc sắc loại ic vi khiển Ngày loại ic có ứng dụng rộng rãi đa dạng Lần lượt chuyên "Trao đổi học tập" cửa hàng Phúc_Lan-Shop, giới thiệu đến Bạn nhiều ứng dụng cụ khác nữa, ứng dụng tạo sản phẩm làm kinh tế được.Mong loạt viết Bạn hưởng ứng giới thiệu cho nhiều Bạn vào đọc Đa tạ! Nhắn Các linh kiện dùng cho thực hành Bạn tìm thấy cửa hàng Phúc Lan S Ngoài Bạn tham vấn để tìm hiểu chủ đề thực tế hơn, có hiệu kinh tế Bạn Qua phần trình bày trên, mong Bạn hiểu cách dùng loại ic vi điều khiển để dùn chấp hành mệnh lệnh Bạn soạn ra, trung thành với câu lệnh mà Bạn " vào nhớ nó, làm thực hành, Bạn gặp trở ngại liên lạc với để đ góp (1) Bạn liên lạc trực thoại với chúng tôi, dùng phần mềm miễn phí Sk Skype (2) name hay e-mail chúng trực tiếp là: Vương wangqiyun19 Khánh H dtth_vuongkhanhhung@yahoo.com (3) hay, qua mục "Liên hệ" trang Web phuclanshop.com Lập trình C cho AVR Tùy chỉnh font chữ: Tweet Lập trình C cho AVR I Một số khái niệm C cho AVR Một chương trình C cho AVR thường bao gồm thành phần như: thích (comments), biểu thức (expressions), câu lệnh (statements), khối (blocks), toán tử, cấu trúc điều khiển (Flow controls), hàm (functions)… Chú thích (comments): có cách để tạo phần thích C thích Phúc-Lan-Sho dòng dấu “//” dòng đầu đoạn ví dụ “//day la chu thich, khong duoc bien dich” thích block cách kẹp block cần thích vào /* ….*/ ví dụ: /* Ban co the type bat ky chu thich nao block Ngay ca ban xuong dong Phan chu thich thuong co mau chu la green */ Tiền xử lí (preprocessor): tiện ích ngôn ngữ C, preprocessor trình biên dịch xử lí trước tất phần khác, preprocessor có chức tương tự Directive ASM cho AVR.Các preprocessor bắt đầu dấu “#”, số preprocessors ngôn ngữ C có hai preprocessors sử dụng phổ biến #include #define Preprocessor #include định file đính kèm trình biên dịch (tương đương INCLUDE ASM) #define để định nghĩa chuổi thay macro Xem ví dụ sau: #include /*đính kèm nội dung file io.h lúc biên dịch (file io.h nằm thư mục avr thư mục include thư mục cài đặt WinAVR).*/ #define max (a,b) ((a)>(b)? (a): (b)) /*định nghĩa macro tìm số lớn số a b, chương trình bạn gọi x=max(2,3) kết thu x=3.*/ Biểu thức (Expressions): phần câu lệnh, biểu thức bao gồm biến, toán tử, gọi hàm…, biểu thức trả giá trị đơn Biểu thức câu lệnh hoàn chỉnh Ví dụ: PORTB=val Câu lệnh (Statement): thường dòng lệnh hoàn chỉnh, bao gồm keywords, biểu thức câu lệnh khác kết thúc dấu “;” Ví dụ: unsigned char val=1; val*=2; …là câu lệnh Khối (Blocks): kết hợp nhiều câu lệnh để thực chung nhiệm vụ đó, khối bao dấu mở khối “{“ đóng khối “}”: ví dụ khối: while(1){ PORTB=val; _delay_loop_2(65000); val*=2; if (!val) val=1; } Toán tử (Operators): ký hiệu báo cho trình biên dịch nhiệm vụ cần thực hiện, bảng bên tóm tắt toán tử C dùng cho lập trình AVR: • Bảng toán tử đại số: dùng thực phép toán đại số quen thuộc, đáng ý toán tử “++” (tăng thêm 1) “ “ (bớt 1), ý phân biệt y=x++ y=++x, ví dụ ta có x=3 y=x++ nghĩa gán x cho y sau tăng x thêm 1, điều không ảnh hưởng đến y (cuối y=3, x=4) y=++x nghĩa tăng x trước gán cho y (cuối y=x=4), tương tự cho trường hợp toán tử “ “ • Bảng Toán tử truy cập kích thức: toán tử [] thường sử dụng bạn dùng mảng lúc lập trình, phần tử thứ mảng truy xuất thông qua [i], ý mảng C • Bảng Toán tử Logic quan hệ: thực phép so sánh logic, thường dùng làm điều kiện cấu trúc điều khiển, ý toán tử so sánh “==”, toán tử khác với toán tử gán “=”, y = x nghĩa lấy giá trị x gán cho y (y== x) nghĩa “nếu y x” • Bảng Toán tử thao tác Bit (Bitwise operator): toán tử thực bit nhị phân số, toán tử dịch trái “” thường sử dụng sử lí số • Bảng toán tử khác: số toán tử đặc biệt hay sử dụng thường không để ý vai trò chúng dễ nhận thấy Đặc biệt ý toán tử “?:” toán tử đặc biệt C so với ngôn ngữ lập trình khác, “?:” toán tử dùng thay cho cấu trúc “if” đơn giản II Cấu trúc điều khiển hàm 2.1 Cấu trúc điều khiển (Flow Controls) Các cấu trúc điều khiển biến ý tưởng bạn thành thực Một số cấu trúc điều khiển C sau: “If (điều kiện) statement;”: điều kiện thực statement theo sau, statement trình bày dòng dòng sau điều khiển If Điều kiện biểu thức bất kỳ, kết hợp nhiều điều kiện toán tử quan hệ AND (&&), OR (||)…Điều kiện cho khác 0, ví dụ if (1) điều kiện hiển nhiên Xét vài ví dụ dùng cấu trúc if sau: If (!val) val=1; nghĩa val chương trình gán cho val giá trị 1, “!” toán tử NOT, NOT số khác 0, ngược lại, NOT thu kết Trong ví dụ này, val !val 1, điều kiện trở thành câu lệnh “val=1” thực thi If (x==1 && y==2) result=’A’; nghĩa x y gán ký tự ‘A’ cho biến result Trong ví dụ này, toán tử logic “&&” sử dụng để “nối” điều kiện lại, bạn hoàn toàn sử dụng nhiều toán tử logic khác cần thiết Trong trường hợp bạn muốn thực thi nhiều câu lệnh lúc điều kiện thỏa bạn cần đặt tất câu lệnh khối bên dưới: If (điều kiện) { Statement1; Statement2; … } “If (điều kiện ) statement1; else statement2; ”: điều kiện thực statement1, ngược lại thực thi statement2 Việc đặt statement else dòng hay dòng khác không ảnh hưởng đến kết Tương tự trường hợp trên, có nhiều statements cần đặt chúng khối If (điều kiện) { Statement1; Statement2; … }else { Statement1; Statement2; … } Ngoài ra, bạn đặt nhiều cấu trúc if…else… lồng vào Cấu trúc switch: trường hợp có nhiều khả xảy cho biểu thức (hay biến), ứng với khả bạn cần chương trình thực việc đó, bạn nên sử dụng cấu trúc switch Cấu trúc trình bày bên switch (biểu thức) { case hằng_số_1: statement1; break; case hằng_số_2: statement2; break; … default: statement khác; } Hãy xét ví dụ bạn kết nối chip AVR với nhau, chip làm Master lệnh điều khiển chip Slaver, chip Slaver nhận mã lệnh từ Master thực công việc thoả hiệp trước Giả sử mã lệnh lưu biến Command, chương trình ví dụ cách xử lí chip Slaver ứng với mã lệnh switch (Command) { case 1: PWM=255; ON_Motor(); break; case 2: PWM=0; OFF_Motor();; break; … default: Get_Cmd(); break; }Ngoài ra, bạn đặt nhiều cấu trúc if…else… lồng vào Nếu Command=1, gán giá trị 255 cho biến PWM gọi chương trình ON_Motor() Trong trường hợp này, break sử dụng, break nghĩa thoát khỏi cấu trúc điều khiển lập tức, sau thực lệnh, switch kết thúc mà không cần xét đến trường hợp khác Bây giờ, Command=2, gán giá trị cho biến PWM gọi chương trình OFF_Motor(), tất trường hợp lại (default), thực chương trình Get_Cmd() “while (điều kiện ) statement1;”: cấu trúc lặp (Loop), ý nghĩa cấu trúc while điều kiện thực statement1 (hoặc statements chúng đặt khối {} trường hợp if giới thiệu trên) Cẩn thận, bạn dễ rơi vào vòng lặp “không lối thoát” với while điều kiện luôn “for (biểu_thức_1; biểu_thức_2; biểu_thức_3) statement;”: cấu trúc lặp khác, cấu trúc for, biểu_thức_1 thường hiểu khởi tạo, biểu_thức_2 điều kiện biểu_thức_3 biểu thức thực sau Cấu trúc for tương đương với cấu trúc while sau: biểu_thức_1; while (biểu_thức_2){ statement; biểu_thức_3; } Các biểu thức cấu trúc for vắng mặt cấu trúc nhung dấu “;” không bỏ Nếu bạn viết for( ; ; ) tương đương với vòng lặp vô tận while (1) Cấu trúc for thường dùng để thực hay công việc số lần đó, ví dụ bên thực xuất giá trị từ đến 200 PORTB, sau lần xuất gọi lệnh delay 65000 chu kỳ máy for (uint8_t i=0; i[...]... của PIC1 6F84A, PIC1 6F628A và PIC1 6F88 Tất cả các PIC này đều có vị trí chân tương ứng nhau, và thậm chí có thể nói PIC1 6F628A tương thích PIC1 6F84A và PIC1 6F88 tương thích với hai loại còn lại Có nghĩa là trong các ứng dụng của PIC1 6F84A, khi thay đổi bằng PIC1 6F88, hay PIC1 6F628A đều được Tất nhiên, 3 loại vi dòng PIC trên đây có thể tương thích với nhiều dòng PIC cũ hơn, nhưng vì thị trường PIC Vi t... trường phát triển PIC trên góc độ phần cứng Dưới đây là hình mạch chạy của PIC1 6F84A, PIC1 6F628A và PIC1 6F88 Tất cả các PIC này đều có vị trí chân tương ứng nhau, và thậm chí có thể nói PIC1 6F628A tương thích PIC1 6F84A và PIC1 6F88 tương thích với hai loại còn lại Có nghĩa là trong các ứng dụng của PIC1 6F84A, khi thay đổi bằng PIC1 6F88, hay PIC1 6F628A đều được Tất nhiên, 3 loại vi dòng PIC trên đây có... không muốn làm cho các bạn mới học PIC cảm thấy bối rối Chúng ta sẽ thực hiện mạch chạy PIC với các chân ICSP và bootloader sau Nguồn : Picvietnam Học vi điều khiển PIC trong 1 ngày (Phần 1) lý thuyết le_hieu_29 - 19 /03/2 012 Phần này mô tả những thành phần tối thiểu nhất để hình thành một hệ thống vi xử lý PIC Bài vi t giúp chúng ta lần đầu làm quen với môi trường phát triển PIC trên góc độ phần cứng Dưới... ngắt của PIC Thời gian tới đây, có lẽ tôi hơi bận, cho nên tôi không thể vi t bài liên tục được, mong rằng các bạn cố gắng tìm hiểu và học tốt PIC Đến giai đoạn này, các bạn đã có thể dùng con PIC, giống như một con 89C 51 thông thường Và các bạn thấy đấy, thực sự PIC chỉ cần 1 ngày để học Chúng ta vừa học xong 3 bài học cơ bản nhất của một con vi điều khiển: Điều khiển port, vi t hàm delay và vi t chương... bài vi t chương trình ngắt, sẽ đi chi tiết vào các ngắt và giải thích rõ nghĩa từng ngắt Nhưng thiết nghĩ, tôi nên kết hợp bài học này ở đây, và kết hợp phần thứ tư vào bài học sau: Nút bấm và các ngõ vào của PIC Tài liệu tham khảo: http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId =18 24&appnote=en 011 006 Nguồn : Picvietna Học vi điều khiển PIC trong 1 ngày (Phần 4) le_hieu_29 - 19 /03/2 012 ... hàm DELAY mà các bạn vi t (bài tập tính điểm) 3) Bây giờ các bạn có thể điều khiển một đèn LED, vậy nếu muốn 8 đèn LED nháy theo thứ tự nào đó chẳng hạn, các bạn sẽ làm thế nào? (bài tập tính điểm) Học vi điều khiển PIC trong 1 ngày (Phần 3) le_hieu_29 - 19 /03/2 012 3.Ngắt interrupt Giới thiệu Khái niệm ngắt là một khái niệm rất phổ biến trong tất cả các hệ thống vi điều khiển, vi xử lý và máy tính... cuối cùng, chúng tôi không thiết kế phần nạp bằng ICSP, bởi vì chúng tôi không muốn làm cho các bạn mới học PIC cảm thấy bối rối Chúng ta sẽ thực hiện mạch chạy PIC với các chân ICSP và bootloader sau Học vi điều khiển PIC trong 1 ngày (Phần 2) le_hieu_29 - 19 /03/2 012 Qua bài học thứ nhất, chúng ta đã học về cách bật tắt một đèn LED Bây giờ nếu muốn làm cho đèn LED nhấp nháy, có nghĩa là chúng ta bật... được Bài học sau, chúng ta sẽ học cách vi t hàm Delay, và các bạn có thể thực hiện vi c làm cho đèn LED nhấp nháy, làm cho dãy đèn từ RB0 đến RB7 chạy qua chạy lại Chúc các bạn may mắn trong bài học đầu tiên, và chúc các bạn thành công với PIC! Nguồn : Picvietnam " Cơ bản về PIC le_hieu_29 - 19 /03/2 012 Phần này mô tả những thành phần tối thiểu nhất để hình thành một hệ thống vi xử lý PIC Bài vi t giúp... vừa học (Instruction Set) Các bạn có thể dùng keyword: DELAY để tìm trong trang http://www.piclist.com/ những đoạn chương trình con vi t về hàm DELAY, làm thế nào để vi t hàm DELAY dài hơn? Lưu ý cuối cùng, đó là các bạn đang chuẩn bị trở thành một người vi t PIC chuyên nghiệp, do đó, các bạn cần phải nhớ các chân nào của PIC để thiết kế mạch và điều khiển, các bạn nên in hình sơ đồ chân của PIC. .. đó có thể nằm trong thanh ghi dữ liệu (bộ nhớ dữ liệu), nhưng cũng có thể nằm trong lệnh điều khiển (bộ nhớ chương trình) Điều này khẳng định rằng, hằng là một giá trị Một khi bạn đặt một tên nào đó, để đại diện cho một hằng số, có nghĩa là thay vì bạn vi t cái giá trị đó, thì bạn vi t cái tên đại diện đó, để dễ nhớ Chẳng hạn, bạn vi t chữ pi, đại diện cho hằng số có giá trị 3 .14 15926 Trong khi đó,

Ngày đăng: 29/05/2016, 16:54

TỪ KHÓA LIÊN QUAN

w