Hướng dẫn thêm trình biên dịch hi tech vào mplab năm 2024

(1) Chạy chương trình nền MPLAB IDE v3. Hình 1. 1. Chương trình nền MPLAB IDE v3. (2) New Project để Tạo project mới Hình 1. 2. Tạo project mới trên MPLAB IPE v3. I.4. Các bước tiến hành trên phần mềm lập trình MPLAB IDE v3.

I. Phần mềm lập trình và mô phỏng

Copy thư mục 9 vào thư mục: C:\Program Files (x86)\HI-TECH Software\PICC\

2

(3) Chọn chip: Baseline 8-bit MCU; 16F877A Hình 1. 3. Chọn MCU Baseline 8-bit MCU Hình 1. 4. Chọn chip 16F877A (4) Next, chọn mạch nạp (Ví dụ Pickit 2)

4

(6) Next, browse đến project của mình Hình 1. 7. Browse đến project của mình (7) Đặt tên project rồi bấm Finish - > Tạo xong project trên MPlab-X Hình 1. 8. Đặt tên project

5

Hình 1. 9. Tạo xong project trên MPlab-X (8) Tạo main file (mặc định newmain), copy chương trình trên web/tự viết dán vào newmain, và copy các file thư viên khác vào cùng thư mục newmain, sau đó add các file thư viên này vào project (Ví dụ bài ngắt timer là lcd và timer) Hình 1. 10. Tạo main file và add các file, add thư viên vào project

7

Hình 1. 13. Ra lệnh add các file, add thư viên vào project Hình 1. 14. Lựa chọn các file và thư viên add vào project

8

Hình 1. 15. Kết quả project sau khi add các file và thư viện (9) Bấm vào biểu tượng (cái búa) để biên dich Hình 1. 16. Biên dịch thành công sẽ báo Hình 1. 17. Kết quả biên dich (10) Lấy file .hex trong dist để nạp (Proteus hoặc dùng Pickit 2 vì đã chọn từ đầu) Lưu ý rằng file hex cho mô phỏng trên Proteus không cần config, còn file hex để nạp cho KIT thực hành bắt buộc phải có config, thông thường là lệnh để khóa (off) các tính năng không sử dụng đến trong chương trình đó (Tính năng tích hợp chung chân nhiều mục đích).

10

Nạp file .hex vào chip Pic 16F877A (Timer_Interrupt.X.production) và bấm chạy chương trình Proteus quan sát kết quả. Hình 1. 20. Kết quả mô phỏng trên Proteus Các bước tiến hành được thực hiện trực tiếp trên máy tính của tác giả sử dụng bộ biên dịch HITECH 9. Hiện tại, hãng đã cập nhật phần mềm biên dịch XC8 và có hướng dẫn cụ thể. Tuy nhiên, cần lưu ý tính tương thích giữa các trình dịch và cả giữa các phiên bản của cùng một trình biên dịch. Có thể tham khảo phần tiếng Việt tại website của blogchipntn theo các đường link sau: blogchipntn/huong-dan-cai-dat-mplab-x-ide/ blogchipntn/huong-dan/microchip-pic12f_16f/ Tuy nhiên, càn lưu ý rằng trình dịch XC8 và bản MPLABX trên trang giới thiệu của blogchiptn khác với bản được sử dụng trong tài liệu này, là MPLAB X IDE v3 và HITECH 9ên khi biên dịch sẽ bị lỗi do IDE của Microchip không đảm bảo tính tương thích. Thêm thư viện cho phần mềm Proteus 8 với SnapEDA theo link sau: youtube/watch?v=8fS_hygYL4s&feature=emb_logo

Chúng tôi luôn hỗ trợ các bạn về PIC, và mong chờ các bạn đóng góp các kiến thức để cùng chúng tôi hoàn thành tài liệu hướng dẫn PIC

mọi chi tiết, liên hệ [email protected] hoặc [email protected]

chúc vui.

Falleaf Công ty TNHH Thương mại và Giao nhận R&P 58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM [email protected] - VP: (04) 36408561 - (08) 38119870

  • Thành viên tích cực
  • Tham gia: Jul 2005
  • Bài viết: 100
    Hi-Tech PIC compiler và nhúng vào MPLAB Cài MPLAB download free tại http://microchip.com mới có phiên bản mới 7.20. Sau đó cài Hi-Tech PIC compiler. Sau đó chọn Project -> Set Language Tool Location. Sau đó chọn trình biên dịch mà bạn dùng. Nếu không có thì bạn phải cải plugin cho nó. Bạn vào http://htsoft.com download MPLABConfig.exe. Với CCS bạn cũng làm tương tự bạn download file mplab-ccs-plugin-install.exe thế là OK. Attached Files
  • ![Click image for larger version Name: Resize of resize1_676.gif Views: 6873 Size: 75.8 KB ID: 1324875](http://https://i0.wp.com/www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/t%E1%BB%AB-pic-t%E1%BB%9Bi-dspic/filedata/fetch?id=1324875)
  • ![Click image for larger version

    Name: Resize of resize2_161.gif Views: 6710 Size: 92.6 KB ID: 1324876](http://https://i0.wp.com/www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/t%E1%BB%AB-pic-t%E1%BB%9Bi-dspic/filedata/fetch?id=1324876)

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Viết các câu lệnh trong C như thế nào ? Câu trả lời giống ANSI C về cấu trúc nên bạn không có gì phải lo. Thực ra PIC hay các loại vi điểu khiển khác thậm chí là CPU nó cũng chẳng hiểu AX, BX, CX... hay OPTION, INTCON, TRISA, PORTB là đâu mà nó chỉ hiểu đó là thanh ghi n bít tại địa chỉ bao nhiêu đó thôi. khi viết trong chương trình bằng Hi-Tech PIC bạn phải có dòng lệnh include bạn thử mở thư mục cài Hi-tech PIC vào thư mục include xem sao ? Hi-Tech PIC compiler đã định nghĩa cho bạn các thanh ghi...đó bằng các tên giống trong datasheet điều này rất quan trọng. Bạn có thể thay đổi các tên này nhưng như vậy sẽ chẳng có ai hiểu chương trình của bạn cả. Cuối cùng các bạn chỉ cần hiểu các thanh ghi trong PIC đã được định nghĩa giống với tên trong datasheet.

    Hướng dẫn thêm trình biên dịch hi tech vào mplab năm 2024
    Last edited by 4MD; 29-08-2005, 04:03.

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 565


    Tôi vẫn dùng HT-PIC mặc dù CCS có phần tiện lợi hơn bởi thư viện đồ sộ. Nhưng bộ compiler của HT-PIC của PIC16 là 950USD trong khi CCS lại giá chỉ chưa đến 1/2. Nghĩa là HT-PIC đắt gấp hơn 2 lần... một số bạn bè tui có đánh giá là vì lý do HT-PIC sinh mã tối ưu hơn CCS? Cái này CCS tự khoe, và đem ra so sánh: http://www.ccsinfo.com/compare.shtml Tuy nhiên HT-PIC thời điểm đó là:HI-TECH PICC V7.86, bây giờ đã là V8.05PL2 rùi, còn CCS thì đã là đời cao hơn rồi. http://www.hitech.com.au/purchase/pricelist.php http://www.hitech.com.au/products/picccompiler.php Bởi lý do trên, ai trung thành với HT-PIC thì đừng buồn :P

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Làm thế nào để dùng được Add Watch trong Hi-Tech PIC như trong ANSI C ? Chọn View -> Watch Attached Files
  • ![Click image for larger version Name: watch1.gif Views: 6621 Size: 44.7 KB ID: 1324873](http://https://i0.wp.com/www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/t%E1%BB%AB-pic-t%E1%BB%9Bi-dspic/filedata/fetch?id=1324873)
  • ![Click image for larger version

    Name: watch.gif Views: 6633 Size: 45.5 KB ID: 1324874](http://https://i0.wp.com/www.dientuvietnam.net/forums/forum/vi-%C4%91i%E1%BB%81u-khi%E1%BB%83n-mcu-b%E1%BB%99-%C4%91i%E1%BB%81u-khi%E1%BB%83n-t%C3%ADn-hi%E1%BB%87u-s%E1%BB%91-dsc/t%E1%BB%AB-pic-t%E1%BB%9Bi-dspic/filedata/fetch?id=1324874)

    CommentThành viên mới Tham gia: Jul 2005 Bài viết: 3


    4MD này trong HT PIC mình có viêt được theo kiểu vòng lặp các cổng không nhỉ chẳng hạn tôi muốn viết tất cả các cổng ở PORTB là mức cao dùng vòng lặp for sao không được nhỉ ? 4MD trả lời nhanh nhé

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Bạn post chương trình lên xem sao ? Bạn đang lập trình I/O để định nghĩa các cổng thì viết rất đơn giản thôi.

    include

    __CONFIG(UNPROTECT & WDTEN & HS & PWRTEN & BOREN & LVPDIS & DUNPROT & DEBUGDIS); void main(){ TRISB = 0x00; //Thanh gi huong port B, 0=Output; 1=Input; PORTB = 0xff; //Dat port B len muc cao while(1) { NOP(); //Lenh nay khong lam gi ca CLRWDT(); //Clear Watchdog Timer } }

    CommentThành viên mới Tham gia: Aug 2005 Bài viết: 4


    Sao tôi làm như bạn bảo mà không được thế ? Bạn có thể post vài ví dụ để tui hình dung rõ hơn việc viết chương trình bằng Hi-Tech PICC không ? vì tui nghe nói Hi-Tech PICC viết chương trình tối ưu hơn CCS. Tui đang dùng CCS nên không hiểu rõ lắm. Bạn có thể chỉ rõ hơn cách DEBUG không ?

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Trước tiên bạn phải chọn Debugger -> MPLAB SIM sau đó vào Debugger chạy Step... Hoặc ấn F7 để chạy từng bước.

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Còn đây là một hàm delay

    Hướng dẫn thêm trình biên dịch hi tech vào mplab năm 2024
    void delayms(unsigned int delayms) //Ham tre delayms Fosc=18,432Mhz { unsigned int i; T1CON = 0x00; TMR1IE = 0; TMR1L = 0x00; TMR1ON = 1; for(i=0;i++;i

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 100


    Nguyên văn bởi hio2 4MD viết chi tiết về Timer đi , cả các ví dụ nữa cho anh em tham khảo ! Một ví dụ về Timer0 void delay_400_ms(void) { unsigned int i=0; for(i=0;i<36;i++) { TMR0 = 56; while(!TMR0IF); TMR0IF = 0; } } Mình dùng thạch anh 18.432Mhz. Prescaler là 1:256. Cần delay 400ms->mình tính được TMR2 = 18432000/4/256/ = 18000. TIMER 0 là bộ định thời 8 bít. Nếu lấy 18000/256=70.3125 lẻ -> 18000/200 = 90. Đây là số vòng lặp for để có được khoảng thời gian chính xác 1 giây. -> muốn trễ 400ms thì số vòng lặp for là: 90*0.4 = 36. TMR0 là thành ghi có thể đọc và viết. Mình viết TMR0=56 nó sẽ tăng từ 56->255 (Số 200 chia ở trên). Tương tự với TMR1 và TMR2 cũng thế. Và ở trên mình có post một ví dụ về TMR1 rồi đó. :o

    CommentThành viên chính thức Tham gia: Jul 2005 Bài viết: 113


    Dùng Timer để trễ thời gian 4MD viết [code:1]void delay_400_ms&

    40;void&

    41;

    &

    123;

    unsigned int i=0; for&

    40;i=0;i<36;i++&

    41;

    &

    123;

    TMR0 = 56; while&

    40;!TMR0IF&

    41;;

    TMR0IF = 0; &

    125;

    &

    125; [/code:1]

    noisepic viết code này trong CCS và xem mã nguồn ASM [code:1] .................... delay_400_ms&

    40;&

    41;;

    0013&

    58; GOTO 004 //&

    40;2&

    41;

    .................... &

    125;

    .................... .................... //************************************************ .................... void delay_400_ms&

    40;void&

    41;

    .................... &

    123;

    0014&

    58; SLEEP

    .................... unsigned int i=0; * 0004&

    58; CLRF 0F //&

    40;1&

    41;

    .................... for&

    40;i=0;i<36;i++&

    41;

    0005&

    58; CLRF 0F //&

    40;1&

    41;*36

    0006&

    58; MOVF 0F,W //&

    40;1&

    41;*36

    0007&

    58; SUBLW 23 //&

    40;1&

    41;*36

    0008&

    58; BTFSS 03.0 //&

    40;2&

    41;*36

    0009&

    58; GOTO 00F //&

    40;2&

    41;

    .................... &

    123;

    .................... TMR0 = 56; 000A&

    58; MOVLW 38 //&

    40;1&

    41;*36

    000B&

    58; MOVWF 01 //&

    40;1&

    41;*36

    .................... while&

    40;TOIF=0&

    41;;

    .................... TOIF=0; 000C&

    58; BCF 0B.2 //&

    40;1&

    41;*36

    .................... &

    125;

    000D&

    58; INCF 0F,F //&

    40;1&

    41;*36

    000E&

    58; GOTO 006 //&

    40;2&

    41;*36

    .................... &

    125;

    000F&

    58; GOTO 014 &

    40;RETURN&

    41; //&

    40;2&

    41;

    //------

    [/code:1] noisepic có chút ít ý kiến về chương trình trễ thời gian của 4MD. Khi noisepic dùng các câu lệnh trên viết trong CCS và xem mã ASM (Mình dùng thạch anh 4MHZ , mỗi chu kì lệnh ứng với 1us) T_trễ=11*36+5+ tg trễ để đồng bộ ~400us= 0.4ms Tức là thời gian trễ của cả hàm delay_400_ms~400ms+0.4ms=400.4ms Nhưng đối với các ứng dụng cần nghiêm ngặt về thời gian thì phải chú ý hơn điều này!! Còn trong HTPIC tốn khoảng thời gian "tương đối chính xác" là bao nhiêu để thực hiện hàm delay_400_ms này! Learn more...

    CommentThành viên tích cực Tham gia: Jul 2005 Bài viết: 565


    Bạn nào thử dùng HTPIC dịch đoạn mã trên và view ASM xem sai số như thế nào sao với CCS? Thực tế đúng như noispic nói, sẽ có sai số, bởi lẽ ngoài thời gian timer tràn còn có thời gian xử lý. Bởi thế, cần có thêm việc bù trừ để tăng chính xác: + Cái này phải nhúng ASM vào để tính thêm lệnh phụ trội để bù trừ. + Hoặc cách khác là view asm để bù trừ. Ngoài ra, nếu cài đặt thêm ngắt khác(ví dụ ngắt timer nào đó) thì có thể sẽ bị trễ đi nhiều hơn nữa. Để thời gian chính xác hơn thì có thể dùng ngắt. Nhưng chú ý bù trừ bởi khi vào ngắt cũng mất khoảng 13 chu kỳ thì phải. Hơn nữa nếu nếu đúng vào thời điểm ngắt timer này, mà ngắt khác đang thực thi thì cũng sẽ bị sai số. Và những sai số ngẫu nhiên này khó quản lý. Tuy nhiên có thể giảm sai số nhiều cách khác và tùy thuộc vào bài toán cụ thể nữa. Ví du bạn tạo một RTC xem ngày tháng = mỗi 1 con PIC thì nên dùng thạch anh hệ thống chẵn, rồi prescale timer đủ lớn(bởi Prescale ko bị dừng khi bộ định thời dừng, ngoài ra nó có thời gian đủ lớn để MCU thực thi công việc timer nặgt nghèo mà ko phí một CLK nào). Hay cách khác là dùng crystal dao động kiểu RTC 32.768 tại chân bộ dao động timer(ko phải dao động hệ thống)...