HTPIC - các chương trình cho PIC6F877A
Tôi đã viết các bài viết ở Điện tử Việt Nam tại luồng này:
http://dientuvietnam.net/forums/show...4688#post14688 Ngôn ngữ là: HTPIC Có lẽ bài toán nháy led là bài toán đơn giản và tạo hứng thú cho các bạn học vi điều khiển. Tôi xin mạn phép up chương trình nháy led đơn giản và xin các bạn cho ý kiến là liệu có thể tối ưu chương trình này đến mức nào nữa? Miêu tả phần cứng: nối các chân của PORTD với các 8led. Các chân còn lại của led nối với một con trở hạn dòng 330Ohm, sau đó nối với GND. Đây là sơ đồ nguyên lý: Phần mềm: dùng HTPIC. Hiện tuợng: các bạn chạy thử xem thế nào :D Giải pháp: có 2 giải pháp là dùng ngắt hoặc dùng delay. Chương trình đầu là dùng delay: Sau đây là chương trình: Code:
#include<pic.h> File gửi kèm có 2 file: PJ1.c và PJ2.c . PJ1.C là chương trình dùng delay, PJ2 là dùng ngắt. Xin mọi người cho ý kiến. |
Đây là chương trình dùng ngắt timer0.
Code:
#include<pic.h> Trong chương trình này mình sau 500 ngắt timer0 thì mới quét led1 lần. Ngoài ra cũng dùng thêm biến static i để biết được đang quét led nào. Do đó dùng ngắt sẽ tiện hơn nhiều. Và dùng đếm sự kiện ngắt thì ta có thể không cần dùng Prescaler với tỉ lệ quá cao, tránh được sai số nhiều. Không biết mọi người có ý kiến thế nào? |
Giải mã LED7 thanh
1 Attachment(s)
Tiếp theo tôi xin đưa cho mọi người xem một chương trình của tui không biết liệu nó đã tối ưu chưa? Đã hiệu quả chưa?
Mô tả phần cứng: có 4 led 7 thanh. Các chân của PORTD 7->1 nối với các chân a->g của led7. Các chân RA5 đến RA3 nối vào cực bazơ của con uA1015 lần lượt nối với các cực Anot của 4 led. Đây là sch: vì to quá nên cắt thành 2 nhìn cho rõ: http://i36.photobucket.com/albums/e4.../PVN_00012.gif http://i36.photobucket.com/albums/e4.../PVN_00013.gif Hình 2: Quét led 7 thanh. Chương trình này lấy phần giải mã của anh 4MD. chương trình của anh ấy dùng cả delay. Nhưng tôi nghĩ là khi dùng ngắt rùi thì dùng delay làm gì cho phí. Do đó việc dùng ngắt làm cho ta đỡ tốn thời gian làm những việc linh tinh. Các bạn cho ý kiến về giải thuật này. Code:
#include<pic.h> Chương trình của mình có cái hay là khi bạn vừa dùng ngắt Timer0 để quét led bạn vừa có thể tận dụng nó để làm việc khác nữa như đếm số lần quét hoặc là delay để làm cái gì đó. Cái này giống kiểu tiết kiệm chân vi điều khiển vậy :D. Dưới đây có file gửi kèm là 3 file .c của 3 bài trên. Chúc các bạn thành công. |
Cho tớ hỏi tí!
Bác dùng phần mềm gì để vẽ mạch vậy?Có free ở đâu không ?Cảm ơn! |
Trích:
Bởi hàm này hay phải gọi đến trong CT quét LED 7 hay nhièu CT khác. |
OK, mình xin thay đoạn chương trình đó bằng cách gọi hàm:
Code:
Convert(a,4,number); Code:
// ========== Ham chuyen doi Đoạn code đã được test bằng phần cứng.Đảm bảo thay thế đúng. Mình xin đưa lại code mới: Code:
/*;======================================================== Chúc các bạn thành công. |
hay. Mình rất khoái lập trình C. Hồi trước làm AT toàn xài ASM, từ khi biết keil, toàn xài cái này thôi, chỉ khi nào có yêu cầu của khách mình mới viết bằng ASM. Viết bằng C cho nó nhanh. Nhưng minh vẫn thấy viết bằng ASM là nghệ thuật hơn cả. Tuy no hơi dài nhưng phải nói là hay, khi ta giải quyết đc những thuật toán đk...phải nói là hay...
Thực tế thì nên dùng C |
USART - truyền dữ liệu nối tiếp với PC
Đây là chương trình khi PC gửi dữ liệu đến PIC thì PIC sẽ phản hồi lại kí tự mà nó đã nhận được. Là một phần trong bài tập lớn của tôi nên tôi sẽ post dần lên cho anh em tham khảo và cho ý kiến về độ tối ưu của chương trình.
Code:
/*======================================================== Chương trình đã được test và chạy ngon lành. Chúc các bạn thành công. |
Timer1 đếm xung hiển thị 4 Led7 đoạn
Có lẽ chương trình hiển thị số lên led7 đoạn đã được mịnh viết bên dientuvietnam.net nên sẽ không viết lại nữa nha. Nhưng máy mình không vào được site này. Nên đành post lên bên này vậy.
Sau đây là chương trình đếm xung từ chân RC1/T1OSI/CCP2 để hiển thị lên 4led 7 thanh. Một chương trình cũng rất đơn giản.Xin mời các bạn xem và cho ý kiến về chương trình này: Code:
/*;======================================================== |
Điều chế PWM và đếm xung hiển thị 4Led
Đây là chương trình điều chế xung PWM trên chân RC2/CCP1 và đếm xung từ chân RC1/T1OSI/CCP2 hiển thị lên 4led7 thanh. Mình dùng Encoder 100 lỗ mượn của bạn :D.
Code:
#include<pic.h> |
Giao tiếp USART điều khiển động cơ , thiết bị ngoại vi
Chương trình sau nhận lệnh từ PC truyền xuống. Các bạn dựa vào cấu trúc chương trình có thể tự lập cho mình chương trình để làm. Đây là một phần nhỏ trong chương trình thiết kế bộ PID điều khiển động cơ một chiều 12V của tôi:
Code:
/*======================================================== Chúc mọi người thành công. |
Mình có viết một chương trình cho PIC6F88 bằng HT-PIC 805PL2, không hiểu sao trình biên dịch lại bắt đầu chương trình tại địa chỉ 07C0h chứ không phải từ 0000h? Mong các bác chỉ giúp em nhé.
1: #include <pic.h> 2: __CONFIG(INTIO & PWRTEN & BORDIS & WDTDIS & MCLRDIS & LVPDIS ); 3: 4: 5: 6: #define R1 0x20; 7: #define R2 0x21; 8: void delayms(int n); 9: void init (void); 10: 11: void delayms(int n) 12: { 13: while(n--) 7C0 2FC6 GOTO 0x7c6 7C6 1283 BCF 0x3, 0x5 7C7 1303 BCF 0x3, 0x6 7C8 0820 MOVF 0x20, W 7C9 1903 BTFSC 0x3, 0x2 7CA 03A1 DECF 0x21, F 7CB 03A0 DECF 0x20, F |
Chào các bác.Em mới học về Pic.Mong các bác chỉ giáo
Em dùng Htpic. Em viết 1 chương trình đơn giản sử dụng timer0. Nhưng chả hiểu tại sao thời gian delay ko chính xác(em mô phỏng bằng proteus). Em delay 1 giây mà mô phỏng chạy những 15 giây(sai số lớn quá) Mà ko hiểu tại sao lệnh while(1) lại ko lặp lại.Khi đèn chạy được 1 chu kỳ thì nó tắt luôn chứ ko lặp lại. các bác xem giúp em với Code:
|
Hình như Picvietnam ko mặn mà với Htpic lắm.
Em sang bên dientuvietnam hỏi vậy |
sao minh chạy thu chuong trình đơn giản cho một led tắt mot giây sáng 1 giay tải về nạp pic 877a chạy thử mà không dược nhân dịp cho minh hỏi co chuong trình nào viết ASM rồi chuyển sang C còn C chuyển qua ASM minh biết rồi tại vì mình mới học pic minh không dùng ASM mà đi thẳng vào viết C cho pic trên diển dàn thì bày ASM nhiều
|
Múi giờ GMT. Hiện tại là 09:10 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam