|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
|
05-03-2006, 05:53 PM | #1 |
Đệ tử 9 túi
|
Lập nhóm PIC16F877A
Như các bác đều biết con 16F877A này phổ biến nhất dòng 16F.PIC việt nam chuyên thảo luận về PIC,ra đời khá lâu....( )nhưng số lượng về những bài viết từ cơ bản đến nâng cao cho con pic này nói chung và những con khác nói riêng về phần lập trình hầu như rất ít nếu không nói là cả tháng ( ) không thấy bài nào nói về module mới.
Trái ngược với picvietnam, dientuvietnam là forum chung về điện tử nhưng nói về pic cực nhiều,một phần vì nó lớn tuổi hơn picvietnam.NHH không có ý so sánh gì ở đây cả, NHH chỉ nghĩ là làm sao kêu gọi mọi người đóng góp nhiều bài viết xây dựng cho picvietnam đủ mạnh để khi tịt ngòi thì có thể tìm được cách gỡ rối ngay trong chính diễn đàn của mình! Lý do là vậy cho sự ra đời của thread này.Mong rằng sẽ có nhiều hơn những bài viết về con 16F877A này để chúng ta có thể làm chủ nó trong một thời gian sớm nhất. Xin các bác xem xét và cho ý kiến về thread này! Nào các bác, ta bắt đầu thôi!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 07-03-2006 lúc 06:10 PM. |
05-03-2006, 06:00 PM | #2 |
Đệ tử 9 túi
|
Ngắt ngoài với RB0
Đây là chương trình đếm số lần switch on từ 1 đến 9 hiển thị lên LED 7 đoạn,dùng ngắt ngoài RB0 và kỹ thuật bảng.
Code:
;======================================== ;Auhor: NHH ;Date: 02/03/06 ;Hardware: PIC16F877A ,Crystal 10MHz ;======================================== TITLE "Count button on by Interrupt RB0" PROCESSOR PIC16f877A INCLUDE<P16f877A.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF ;======================================== COUNT EQU 0x20 w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving pclath_temp EQU 0x73 ; variable used for context saving ;============================================================================= ;CHUONG TRINH CHINH ;============================================================================= ORG 0000h GOTO MAIN ORG 0004h GOTO INTERRUPT ;==============================INTERRUPT PROGRAM=========================== INTERRUPT movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ;****************************************************************************** BCF INTCON,INTF ;xoa co int INCF COUNT,F MOVLW d'10' SUBWF COUNT,W BTFSS STATUS,0 GOTO $+2 GOTO NODISPLAY MOVF COUNT,W CALL TABLE MOVWF PORTD retfie ; return from interrupt NODISPLAY ;khong hien thi neu vuot qua 9 MOVLW d'10' CALL TABLE MOVWF PORTD RETFIE ;****************************************************************************** movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;============== CHUONG TRINH CHINH=============== MAIN BCF STATUS,RP1 BSF STATUS,RP0 ; chon BANK 1 MOVLW b'11111111' ;RB0=Input MOVWF TRISB CLRF TRISD BCF OPTION_REG,INTEDG ;interrupt canh xuong BCF STATUS,RP0 ; chon BANK 0 BSF INTCON,GIE ;cho phep interrupt toan cuc BSF INTCON,INTE ;cho phep interrupt RB0 CLRF COUNT MOVLW d'0' CALL TABLE MOVWF PORTD GOTO $ ;---------------------------------------------------------- ; Bang tra ve Digital tu 0 den 9 va OFF ; Chi so dau truy cap la 0 ; Bang o PAGE 0 ORG 0x80 TABLE ;---------------------------------------------------------- ADDWF PCL, F ; bat dau tai 0x80 RETLW b'00111111' ; 0 RETLW b'00000110' ; 1 RETLW b'01011011' ; 2 RETLW b'01001111' ; 3 RETLW b'01100110' ; 4 RETLW b'01101101' ; 5 RETLW b'01111101' ; 6 RETLW b'00000111' ; 7 RETLW b'01111111' ; 8 RETLW b'01101111' ; 9 RETLW b'00000000' ; OFF END
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 09-03-2006 lúc 12:11 PM. |
05-03-2006, 06:11 PM | #3 |
Đệ tử 9 túi
|
Hex file ngắt ngoài RB0
:020000040000fa
:020000002028b6 :080008000528f1000308f200d5 :100010000a08f3008b10a00a0a302002031c1128e2 :10002000152820088020880009000a3080208800d8 :10003000090073088a0072088300f10e710e09002e :1000400003138316ff3086008801011383128b1778 :0c0050000b16a0010030802088002d2835 :1001000082073f3406345b344f3466346d347d34bb :0801100007347f346f34003422 :02400e00323f3f :00000001ff
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
05-03-2006, 06:18 PM | #4 |
Đệ tử 9 túi
|
Ngắt ngoài với RB4 đến RB7
Đấy là chương trình quét 16 phím bấm hiển thị lên LED 7 đoạn các số từ 0 đến 9 và các chữ A,b,C,d,E,F.
Xem hình ở file đính kèm! Code:
;======================================== ;Auhor: NHH ;Date: 02/03/06 ;Hardware: PIC16F877A connect PORTB by R220 ;======================================== TITLE "Giai ma ban phim dung interrupt RB4...RB7" PROCESSOR PIC16f877A INCLUDE<P16f877A.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF ;======================================== COUNT EQU 0x20 w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving pclath_temp EQU 0x73 ; variable used for context saving ;============================================================================= ;CHUONG TRINH CHINH ;============================================================================= ORG 0000h GOTO MAIN ORG 0004h GOTO INTERRUPT ;==============================INTERRUPT PROGRAM=========================== INTERRUPT movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ;****************************************************************************** BCF INTCON,RBIF MOVLW b'00000001' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_1 MOVLW d'0' ;0 CALL TABLE MOVWF PORTC retfie DIS_1 BTFSS PORTB,5 GOTO DIS_2 MOVLW d'1' ;1 CALL TABLE MOVWF PORTC retfie DIS_2 BTFSS PORTB,6 GOTO DIS_3 MOVLW d'2' ;2 CALL TABLE MOVWF PORTC retfie DIS_3 BTFSS PORTB,7 GOTO DIS_4 MOVLW d'3' ;3 CALL TABLE MOVWF PORTC retfie DIS_4 MOVLW b'00000010' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_5 MOVLW d'4' ;4 CALL TABLE MOVWF PORTC retfie DIS_5 BTFSS PORTB,5 GOTO DIS_6 MOVLW d'5' ;5 CALL TABLE MOVWF PORTC retfie DIS_6 BTFSS PORTB,6 GOTO DIS_7 MOVLW d'6' ;6 CALL TABLE MOVWF PORTC retfie DIS_7 BTFSS PORTB,7 GOTO DIS_8 MOVLW d'7' ;7 CALL TABLE MOVWF PORTC retfie DIS_8 MOVLW b'00000100' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_9 MOVLW d'8' ;8 CALL TABLE MOVWF PORTC retfie DIS_9 BTFSS PORTB,5 GOTO DIS_A MOVLW d'9' ;9 CALL TABLE MOVWF PORTC retfie DIS_A BTFSS PORTB,6 GOTO DIS_b MOVLW d'11' ;A CALL TABLE MOVWF PORTC retfie DIS_b BTFSS PORTB,7 GOTO DIS_C MOVLW d'12' ;b CALL TABLE MOVWF PORTC retfie DIS_C MOVLW b'00001000' MOVWF PORTB BTFSS PORTB,4 GOTO DIS_d MOVLW d'13' ;C CALL TABLE MOVWF PORTC retfie DIS_d BTFSS PORTB,5 GOTO DIS_E MOVLW d'14' ;d CALL TABLE MOVWF PORTC retfie DIS_E BTFSS PORTB,6 GOTO DIS_F MOVLW d'15' ;E CALL TABLE MOVWF PORTC retfie DIS_F BTFSS PORTB,7 GOTO $+4 MOVLW d'16' ;F CALL TABLE MOVWF PORTC retfie ;****************************************************************************** movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;============== CHUONG TRINH CHINH=============== MAIN BCF STATUS,RP1 BSF STATUS,RP0 ; chon BANK 1 MOVLW b'11110000' ;RB0=Input MOVWF TRISB CLRF TRISC BCF STATUS,RP0 ; chon BANK 0 BSF INTCON,GIE BSF INTCON,RBIE ;cho phep ngat RB4...RB7 MOVLW d'10' CALL TABLE MOVWF PORTC LOOP MOVLW b'00001111' MOVWF PORTB GOTO LOOP ;---------------------------------------------------------- ; Bang tra ve Digital tu 0 den 9 va A....F ; Chi so dau truy cap la 0 ; Bang o PAGE 0 ORG 0x90 TABLE ;---------------------------------------------------------- ADDWF PCL, F ; bat dau tai 0x80 RETLW b'00111111' ; 0 RETLW b'00000110' ; 1 RETLW b'01011011' ; 2 RETLW b'01001111' ; 3 RETLW b'01100110' ; 4 RETLW b'01101101' ; 5 RETLW b'01111101' ; 6 RETLW b'00000111' ; 7 RETLW b'01111111' ; 8 RETLW b'01101111' ; 9 RETLW b'00000000' ; NODISPLAY RETLW b'01110111' ; A RETLW b'01111100' ; B RETLW b'00111001' ; C RETLW b'01011110' ; d RETLW b'01111001' ; E RETLW b'01110001' ; F END
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 09-03-2006 lúc 12:12 PM. |
05-03-2006, 06:21 PM | #5 |
Đệ tử 9 túi
|
Hex file ngắt ngoài RB4...RB7
Code:
:020000040000FA :020000007A285C :080008000528F1000308F200D5 :100010000A08F3000B1001308600061E132800307A :10002000902087000900861E192801309020870043 :100030000900061F1F280230902087000900861F34 :100040002528033090208700090002308600061E14 :100050002D280430902087000900861E33280530A3 :10006000902087000900061F39280630902087005D :100070000900861F3F2807309020870009000430C0 :100080008600061E47280830902087000900861E3B :100090004D280930902087000900061F53280B3097 :1000A000902087000900861F59280C309020870077 :1000B000090008308600061E61280D309020870058 :1000C0000900861E67280E30902087000900061F51 :1000D0006D280F30902087000900861F722810308D :1000E00090208700090073088A0072088300F10ECF :1000F000710E090003138316F03086008701831206 :100100008B178B150A30902087000F3086008528CA :1001200082073F3406345B344F3466346D347D349B :1001300007347F346F34003477347C3439345E34A0 :040140007934713469 :02400E00323F3F :00000001FF
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
11-09-2006, 10:46 PM | #6 | |
Đệ tử 2 túi
Tham gia ngày: Aug 2006
Bài gửi: 42
: |
Trích:
==> không lẽ lúc đó con Pic sẽ vào ngắt tiếp hả anh ? À quên nữa,trong chương trình của em thấy anh viết thiếu lệnh nhảy tới đoạn pop các giá trị của thanh khi W,Status,Pclath trong ngắt nữa, theo em ta nên đặt nhãn đoạn này là Pop và thay thế các lệnh retfie ở trên bằng lệnh goto pop @nhh : anh viết rất hay,tiếp tục viết nhiều bài như thế nữa đi anh thay đổi nội dung bởi: spirit, 12-09-2006 lúc 11:42 AM. |
|
12-09-2006, 09:52 PM | #7 | |
Đệ tử 9 túi
|
Trích:
+ Ngắt cạnh xuống: low to high Code:
BCF OPTION_REG,INTEDG ;interrupt cạnh xuống Code:
BSF OPTION_REG,INTEDG ;interrupt cạnh lên Vậy ở đây, khi thả button lên, tuy có thay đổi trạng thái chân RB0, vẫn không có ngắt xảy ra. Mình không viết bằng MPASM nữa, nên bạn qua luồng "PIC16F877A từ dễ tới khó", đọc các tutorial của mod Chính. Chúc thành công!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
15-10-2006, 01:12 PM | #8 | |
Đệ tử 2 túi
Tham gia ngày: Aug 2006
Bài gửi: 42
: |
Giúp em với
Trích:
+Khi cấu hình là ngõ vào thì cần phải có lệnh BCF option_reg,not_RBPU để cho phép điện trở kéo lên bên trong phải không ạ? Nhưng em thấy bài quét phím 4x4 của anh em thấy không có lệnh này. +Chương trình quét phím 4x4 của anh khi mô phỏng Proteus thì chính xác nhưng khi em đem ra mạch thật test thử thì không đúng nữa.(không biết anh đã test thử trên mạch thật chưa?) à,khi em đem ra mạch thật test thì ngõ xuất LED 7 đoạn là Port D chứ không phải Port C . Mong anh giải đáp giúp em một số thăc mác trên,chờ tin anh @NHH:Anh học BK Tphcm phải không ? Nếu anh học ở đó thì anh có thể cho em gặp riêng không ? @picpicpic :Bạn qua dientuvietnam.net xem sao thay đổi nội dung bởi: spirit, 15-10-2006 lúc 01:34 PM. |
|
02-04-2007, 04:25 AM | #9 | |
Nhập môn đệ tử
Tham gia ngày: Mar 2007
Bài gửi: 7
: |
Trích:
|
|
05-03-2006, 06:45 PM | #10 |
Đệ tử 1 túi
Tham gia ngày: Nov 2005
Bài gửi: 17
: |
Chào bác!
Em mới làm quen với PIC nên có thể gọi là chưa biết gì. Em ủng hộ hai tay cho luồng mà bác mở ra.Nó rất hữu ích cho những thằng chưa biết gì như em.Em sẽ ngâm cứu những gì bác viết và cũng hy vọng em cũng sẽ post lại những gì mà em đã học được. Thanks bác nhiều! Bác có thể cho em hỏi về kỹ thuật bảng 1 tí được không ạ! Và bác dùng phần mềm gì để mô phỏng cho pic như hình trên vậy,trông nó rất hấp dẫn! |
05-03-2006, 07:01 PM | #11 |
Đệ tử 2 túi
Tham gia ngày: Jan 2006
Bài gửi: 36
: |
Chào các bác!
Em cũng ủng hộ luồng này của bác.Hy vọng các bác sẽ có nhiều bài viết tốt để anh em tham khảo!
__________________
************************************************** ** The only wrong thing would be to deny what your heart truly feels! ************************************************** ** |
05-03-2006, 07:22 PM | #12 | |
Đệ tử 9 túi
|
Thanks các bác đã ủng hộ!
Trích:
Còn phần mềm mô phỏng mà nhh dùng là Protues,hình như nó là cái mô phỏng xịn nhất về điện tử thì phải.Bạn có thể qua dientuvietnam.net search và load về dùng. Mong rằng bạn sẽ có nhiều bài viết về chú này!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
05-03-2006, 07:26 PM | #13 |
Đệ tử 9 túi
|
À tiện thể xin hỏi các bác có bác nào có cái crack của protues 6.8 không.
Cái 6.7 tại hạ đang xài dù đã crack nhưng nó vẫn còn lủng củng dùng nhiều khi phát bực vì nó không cho save nếu để lâu! Thanks!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
05-03-2006, 10:19 PM | #14 |
Nhập môn đệ tử
Tham gia ngày: Nov 2005
Bài gửi: 1
: |
Chương trình mô phỏng
Nếu bạn mới dùng PIC thì mô phỏng bằng PIC simulator IDE v5.21, giao diện thân thiện dễ sử dụng.
__________________
http://icdesign.vnbb.com/ |
06-03-2006, 04:09 PM | #15 | |
Đệ tử 9 túi
|
Trích:
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
|
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 26 | 07-05-2024 08:55 AM |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 11 | 04-05-2024 04:43 AM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |