PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Lập nhóm PIC16F877A (http://www.picvietnam.com/forum/showthread.php?t=325)

nhh 05-03-2006 05:53 PM

Lập nhóm PIC16F877A
 
1 Attachment(s)
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....(:confused: )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 (:D ) 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!

nhh 05-03-2006 06:00 PM

Ngắt ngoài với RB0
 
1 Attachment(s)
Đâ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


nhh 05-03-2006 06:11 PM

Hex file ngắt ngoài RB0
 
:020000040000fa
:020000002028b6
:080008000528f1000308f200d5
:100010000a08f3008b10a00a0a302002031c1128e2
:10002000152820088020880009000a3080208800d8
:10003000090073088a0072088300f10e710e09002e
:1000400003138316ff3086008801011383128b1778
:0c0050000b16a0010030802088002d2835
:1001000082073f3406345b344f3466346d347d34bb
:0801100007347f346f34003422
:02400e00323f3f
:00000001ff

nhh 05-03-2006 06:18 PM

Ngắt ngoài với RB4 đến RB7
 
1 Attachment(s)
Đấ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


nhh 05-03-2006 06:21 PM

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

Hy vọng rằng đến khi nhh post bài tiếp theo thì đã nhận được 20 bài viết mới từ các bác về chú Pic này! :D

chuabietgi 05-03-2006 06:45 PM

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!

picpicpic 05-03-2006 07:01 PM

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!

nhh 05-03-2006 07:22 PM

1 Attachment(s)
Thanks các bác đã ủng hộ!
Trích:

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!
Cái kỹ thuật bảng anh F đã viết một bài rất dễ hiểu,bạn có thể tải ở file đính kèm.
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!

nhh 05-03-2006 07:26 PM

À 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!

Longlife 05-03-2006 10:19 PM

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.

falleaf 06-03-2006 09:16 AM

Đôi lời giải thích với các bạn như sau:

- picvietnam hay dientuvietnam hoặc diendandientu cũng chỉ là nơi để trao đổi và học tập. F cũng là mod của dientuvietnam và diendandientu. Do vậy, khi phát triển hoạt động, chúng ta phát triển cho cộng đồng điện tử VN. Vì vậy không có sự khác biệt và so sánh.

- Điều F quan tâm ở đây, đó là chúng ta có một nơi chuyên để thảo luận những vấn đề chúng ta quan tâm, và đi sâu vào đó. Ở dientuvietnam hay diendandientu, đó là những diễn đàn rộng, vì vậy, có rất nhiều người có những kiến thức khác nhau về điện tử tập hợp lại, và nó hình thành được nhiều bài viết khi ứng dụng PIC vào những vấn đề thực tế, và kinh nghiệm thực tế được trao đổi và thảo luận.

- Trong khi đó ở picvietnam, nó là một lớp học online, do chính những thành viên tự học và tự dạy cho nhau. Có thể về mặt thảo luận và đề tài ứng dụng, thì việc trao đổi không nhiều. Nhưng F sẽ phân tích dưới đây để các bạn thấy được vấn đề tại sao picvietnam vẫn được xây dựng và tồn tại, và đó là lời động viên của F dành cho các bạn.

Diễn đàn của chúng ta chủ yếu nghiên cứu các tool, các công cụ, các vấn đề lý thuyết, thuật toán, và tập trung vào việc khai thác PIC. Ví dụ như trong luồng đố vui của dientuvietnam, một câu đố vui đó, có thể ứng dụng cho rất nhiều loại vi điều khiển, không chỉ riêng gì PIC, nhưng lực lượng người dùng PIC online hiện nay đã và đang phát triển rất mạnh. Chính vì vậy, vấn đề thảo luận này được đặt trong luồng về PIC, và do những người dùng PIC phát triển ra.

Nhưng đó là nhưng bài toán mang tính chất ứng dụng vào thực tế. Và bài toán ứng dụng thì không thể trang bị tool, công cụ, lý thuyết, để phát triển tất cả những sản phẩm sau này.

Các bạn để ý một điều rằng, hầu như các bạn sinh viên học PIC, khởi đầu ở picvietnam, sau đó bắt đầu học dần lên, và có thể tự học, tự làm, rồi bắt đầu "đủ công lực" sẽ đem nhưng học thuật, hiểu biết của mình, phát triển ở các diễn đàn khác.

Trong khi đó, picvietnam cung cấp các công cụ làm việc, những bài học cơ bản, nhằm mục đích phát triển riêng về PIC. Vd như khi nói về điều khiển LED ma trận, hoặc khi điều khiển LCD, LED 7 đoạn... tất cả những cái đó là những ứng dụng thực tế. Trong khi đó, trên picvietnam, chúng ta thảo luận về cái gỉ? PORT I/O và kỹ thuật bảng.

Đứng trên vị trí của PIC mà nói, chỉ cần PORT I/O và kỹ thuật bảng, đã đủ và dư sức để có thể làm được LED ma trận, led 7 đoạn và LCD... có phải vậy không?

Chính vì điều này, chúng ta nghiên cứu các công cụ, các bước cơ bản, các thuật toán tính toán cơ sở để có thể phát triển các giải thuật trên PIC.

Ở các luồng thảo luận về PIC khác, ít người chú ý đến việc tính toán các hàm delay, nhưng ở đây, chúng ta viết khá nhiều cách để xây dựng hàm delay. Chúng ta cũng viết nhiều bằng MPASM để hiểu PIC và đi vào các tương tác gần nhất với PIC.

Có thể điều này hơi mang tính chất academic với các bạn, và nó hơi mơ hồ!

Nhưng không, chính những gì chúng ta làm và chuẩn bị ở đây, đó là những công cụ, những có sở nền tảng vững chắc. Chúng ta sẽ đi chậm, nhưng rồi chúng ta sẽ có những nghiên cứu xử lý thuật toán, và những bài toán dần dần đang được nhóm PIC vietnam thực hiện.

Ví dụ như một niềm tự hào của picvietnam, đó là bộ thư viện ORCAD. Kể cả những trang nước ngoài cũng không làm được. Bộ thư viện này đã có ít nhất 100 lượt người tải về sử dụng, chưa kể những người download bằng đường link trực tiếp.

Có ít nhất 300 lượt người duyệt bài và link vào trang. Các bạn hãy thử tưởng tượng rằng 1 người hết 5 phút để vẽ một con linh kiện. Vậy 10 người là 50 phút (coi như 1 giờ cho chẵn). Thì 100 người là 10 giờ (một ngày làm việc).

Đó là thời gian 1 tháng sau khi nó được đưa lên. Cứ 1 tháng thì nó tiết kiệm 1 ngày làm việc.

Đây chính là xu hướng mà picvietnam sẽ đi và sẽ phát triển xã hội bằng việc mỗi một việc làm của picvietnam sẽ tiết kiệm một ngày làm việc cho toàn cộng đồng. Hãy vững tin về điều đó. Chúng ta sẽ làm được nhiều và rất nhiều.

Sắp tới, bộ tiny bootloader sẽ được picvietnam chuẩn hoá, kèm theo việc giới thiệu về I2C bằng CCS C (I2C bằng MPASM đã được bạn Mạnh phổ biến rồi). Tiến tới là multi master I2C. Đó là hai công việc picvietnam đang làm và sắp xong.

Giao tiếp RS232 cũng đã tạm ổn (chưa được ổn cho lắm hehehe...) Nhưng sẽ xong. Như vậy, sau khi xong tinybootloader cũng đồng thời xong luôn phần cứng cho RS232. Cứ như vậy, từng bước, từng bước, chúng ta không đi sau mà đi sâu các bạn ạ.

Những câu hỏi và trả lời không thể làm thành cơ sở thư viện được, chỉ có những bài viết như nhh vừa gửi mới có thể hình thành cơ sở, thư viện, và tài liệu hữu ích cho sự phát triển mà thôi. Đó là hướng đi của picvietnam.

Mong rằng các bạn hiểu và vững tin theo ý nghĩa này của picvietnam.

Chúc vui.

ntc 06-03-2006 02:25 PM

Các ứng dụng của nhh được xây dựng dựa trên một số thông tin cơ bản:
_ Về phần cứng: đó là các thông tin về phím nhấn, thông tin về LED 7 đoạn, thông tin về cấu tạo, tổ chức các PORT I/O và các ngắt ngoài của PORT B, ...
_ Về phần mềm: đó là thông tin về kĩ thuật bảng, thông tin về chương trình ngắt và cách xử lí ngắt, một số thao tác lập trình với PIC (khai báo biến,...) ...
_ Về kĩ năng: đó là các kĩ năng phân tích tìm hiểu thông tin trong tài tiệu (datasheet chẳng hạn), kĩ năng xây dựng ứng dụng dựa trên các thông tin thu thập được.
Ứng dụng của nhh rất hay, nhưng nhìn chung lại, hầu hết mọi ứng dụng đều được xây dựng dựa trên một số thông tin và kĩ năng cơ bản. Trường hợp ứng dụng của nhh cũng không ngoại lệ.
Bây giờ, nhh thử tưởng tượng coi, nếu một thành viên mới tìm hiểu PIC, đọc ứng dụng của nhh thì số lượng thông tin thu thập được là bao nhiêu. Sẽ có rất nhiều thắc mắc: làm sao mà viết chương trình như vậy thì con PIC sẽ hiển thị được con số đó ra LED 7 đoạn, làm sao mà viết như vậy thì PIC sẽ nhận diện được sự thay đổi muắc logic ở PORT B để tạo ra ngắt.
Đó là cái mà picvietnam đang cố gắng lí giải thông qua các tutorial được viết rất cơ bản, thông qua các module, các công cụ, ...đó là một phần vai trò của picvietnam trong các diễn đàn điện tử. Hướng đi này có thể hơi khác biệt, nhưng không hề lạc hướng.

Nếu tìm hiểu thêm một số thông tin về timer, nhh có thể xây dựng được một ứng dụng mới: một đồng hồ điện tử.:D. Chỉnh giờ được luôn (bạn đã có được các module cơ bản về xử lí nút bấm, về hiển thị LED 7 đoạn, rồi một số module về kĩ thuật lập trình, ...). Thử coi. Phần cứng cũng đã có sẵn rồi, chỉ còn mỗi việc viết chương trình.

PIC16F877A nếu chỉ để tìm hiểu thì được, chứ nếu để xây dựng các ứng dụng thực tế thì có đôi khi ... hơi phí phạm, vì hiếm khi nào ta sử dụng được hết các chức năng của nó trong một ứng dụng. Việc xây dựng các module và trang bị các thông tin cơ bản có thể cho phép ta sử dụng bất cứ PIC nào mà không hề cảm thấy bỡ ngỡ.:D

nhh 06-03-2006 04:06 PM

Thanks bác F và mod NTC!
Vậy thì phần tutorial cơ bản bác sẽ viết bên đó,còn về vọt những ứng dụng viết được anh em có thể post bên "PIC6F877A từ dễ đến khó" hoặc trong luồng này cũng tốt!
NHH sẽ cố gắng viết những ứng dụng bậy bạ từ những cái tutorial của bác mod!
Cùng nhau phá PIC bà con ơi!
À phiền bác F sửa lại giúp tiêu đề cái thread này,do sơ ý nên em viết nhầm tên Pic !
Thanks!

nhh 06-03-2006 04:09 PM

Trích:

Nguyên văn bởi Longlife
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.

Cái này mình cũng có dùng,nhưng dùng nó chỉ để hiểu pic làm gì với mấy cái thanh ghi khi chạy chương trình.Dùng protues mô phỏng thì sẽ thấy kết quả trực quan và sống động hơn!:D

picpicpic 07-03-2006 07:52 PM

Chào cả nhà!
picpicpic đã copy và cho chạy thử bài viết của bác nhh,kết quả rất tốt!Bác có viết vài ý về các cách ngắt của con pic này được không?
Hẹn câu trả lời của các bác!

minhquancdt 07-03-2006 08:04 PM

Em là thành viên mới của diễn đàn.
Em muốn học pic nhưng không biết bắt đầu từ đâu.
Bác nào có kinh nghiệm chỉ giáo giúp em với.
Em xin cảm ơn!

pb1 08-03-2006 12:08 AM

Em cũng đồng ý cả hai tay.
nhưng có bác có thể viết chương trình bằng picc không?. Em thấy PICC rất hay bởi vì chương trình viết rất gọn, có thể ứng dụng vào các bài toán lớn. Còn Assembler thì cũng có thể như thế, nhưng viết khó và dài. Em thấy,với các bài cơ bản thì các bác cố gắng viết cả Assembler và PICC để cho nhiều người có thể học tập

tungnguyen 08-03-2006 04:07 PM

chào các bác, tôi mới lần đầu vào diễn đàn và mới làm quen với PIC, nên các bác có thể giúp mình tài liệu về PIC này không ạ, cảm ơn

chuthong1 09-03-2006 09:19 AM

Cac Anh co the cho em Bo ma Lenh cua Dong Pic16f877a duoc khong
Em moi buoc chan vao hoc ve Pic nen khong biet gi` ca
Xin cac Dai gia chi giao gium

nhh 09-03-2006 12:08 PM

Chào các bạn!
Ai mới bắt đầu với pic thì vào luồng "Cơ bản về vi điều khiển và pic",tìm trong các luồng "Học pic như thế nào","Học pic trong vòng một ngày",ở đó anh F hướng dẫn rất cơ bản và tỉ mỉ.

Khi mới học pic,bạn nên chọn ASM vì chương trình viết gần gũi,cấu trúc lệnh đơn giản (chỉ mỗi tội phải kè kè thanh ghi W),biết nó tác động như thế nào lên các thanh ghi.Sau khi vững ASM chuyển qua C thì tốc độ sẽ nhanh hơn.

Các bạn vào luồng "MPASM" của mod Mạnh để tìm hiểu con 16f628a,vào "PIC6F877A từ dễ tới khó" của mod Chính để vọt con 16F877A.

Còn tập lệnh của pic16 đều giống nhau cả,có 35 lệnh,trong tất cả các datasheet đều có và ví dụ rất rõ.Datasheet lên google search với tên pic là có cà ngàn luôn!

Chúc các bạn học tốt!

nhh 09-03-2006 12:16 PM

Trích:

Nguyên văn bởi picpicpic
Chào cả nhà!
picpicpic đã copy và cho chạy thử bài viết của bác nhh,kết quả rất tốt!Bác có viết vài ý về các cách ngắt của con pic này được không?
Hẹn câu trả lời của các bác!

Ăc ăc...Cái này picpicpic làm khó anh em rồi ! Mình biết rất lung tung không thể trình bày một cách bài bảng và chuyên nghiệp được, viết ra làm các bác khó hiểu....nhh nghĩ cái này nên để mod Chính viết!

linhnc308 12-03-2006 01:54 PM

Muốn nhanh chóng làm việc được với PIC, các bạn nên tiếp xúc với ngôn ngữ C cho PIC, nhất là CCS. Các bạn sẽ thấy được những điểm mạnh mà C đem lại.
Tài liệu thì bạn qua luồng Compiler về CCS để tìm hiểu. Có tài liệu của bác txt rất hay, cùng với help của CCS.

ntc 12-03-2006 04:15 PM

Không biết mọi người học PIC thế nào, còn mình, mình in cái datasheet của con PIC ra và nghiền ngẫm trong vòng ... 1 tháng. Tất nhiên là phải dựa trên một số kiến thức cơ bản về điện tử.

thunglungvang 12-03-2006 06:23 PM

Sao em thấy các bác phần lớn đều viết chương trình cho con PIC này bằng Assembly thế nhỉ?? Đọc khó hiểu bỏ xừ. Mặc dù dung lượng cua file dịch ra của nó là nhỏ hơn so với viết bằng C nhưng em thấy viết bằng C dễ hiểu và dễ tiếp cận hơn nhiều chứ nhỉ??

namqn 12-03-2006 07:41 PM

Trích:

Nguyên văn bởi thunglungvang
Sao em thấy các bác phần lớn đều viết chương trình cho con PIC này bằng Assembly thế nhỉ?? Đọc khó hiểu bỏ xừ. Mặc dù dung lượng cua file dịch ra của nó là nhỏ hơn so với viết bằng C nhưng em thấy viết bằng C dễ hiểu và dễ tiếp cận hơn nhiều chứ nhỉ??

Đương nhiên là viết bằng ngôn ngữ cấp cao thì dễ hơn nhiều so với ngôn ngữ cấp thấp. Nhưng nếu bạn không biết chính xác chương trình của mình viết ra được thực hiện như thế nào, hoặc khi cần tối ưu mã cho chương trình, hoặc cần viết một số đoạn mã tới hạn nào đó để chạy thật nhanh thì lúc đó bạn sẽ làm thế nào? Tôi cũng rất thích ngôn ngữ cấp cao, nhưng giải pháp tốt nhất theo tôi là viết bằng cả hai ngôn ngữ, phần nào thích hợp với ngôn ngữ nào thì viết bằng ngôn ngữ đó, để tận dụng sức mạnh của nó.
Còn việc bắt đầu làm quen với PIC mà sợ khó, không tìm hiểu các vấn đề cơ bản thì khi bạn viết chương trình lớn, phức tạp sẽ khó có giải pháp hiệu quả.

Thân,

chuthong1 15-03-2006 01:34 PM

Gui Ban NTC!
 
Trích:

Nguyên văn bởi ntc
Không biết mọi người học PIC thế nào, còn mình, mình in cái datasheet của con PIC ra và nghiền ngẫm trong vòng ... 1 tháng. Tất nhiên là phải dựa trên một số kiến thức cơ bản về điện tử.



Minh Dang dc mot so VD cua ban va thay rat re hieu
Ban lam on pot het len de minh Xem co' dc ko


Cam on Ban Nhieu
:D

ntc 16-03-2006 10:53 AM

Không dấu gì bạn, mỗi bài viết như vậy thông thường mình phải viết trong vòng ... nửa tháng. :D . Làm sao để cho cô đọng, tập trung và dễ hiểu nhất. Chứ đâu có sẵn đâu mà post lên hết một lần được. :D

Mục đích của những bài viết trên không phải là hướng dẫn từ A tới Z mọi thứ liên quan đến con PIC, mà chỉ là những vấn đề cơ bản nhất, và những bạn mới làm quen có thể cảm thấy dễ dàng hơn khi bắt đầu với PIC. Còn việc phát triển và ứng dụng các vấn đề đó thì mỗi người phải tự làm thôi. :D .

Còn các ví dụ, bạn có thể tìm thấy rất nhiều trong diễn đàn, trong các tài liệu, các Tutorial cung cấp trên diễn đàn. Đọc cũng dễ hiểu, dễ làm. Bạn tham khảo thêm nhé.

Tất nhiên picvietnam vẫn sẽ thường xuyên cung cấp thêm các Tutorial mới. Hy vọng sẽ đáp ứng được yêu cầu của các thành viên.

:D

Dang Khoa 16-03-2006 07:04 PM

Cac ban co biet gi ve chuong trinh MikroPalcal viet cho PIC khong

pb1 16-03-2006 10:22 PM

em đã nghiền hết mấy bài của bác nhh rồi, em đang chờ các bài tiếp theo của bác nhh đây. Bác nhanh nhanh viết thêm nữa đi chứ.

ntc 17-03-2006 10:41 AM

Cái Timer nhh làm tới đâu rồi. :D . Có gì trục trặc không.

Các ngôn ngữ lập trình cho PIC, theo mình không nên tìm hiểu nhiều ngôn ngữ quá, nhiều khi còn lộn từ ngôn ngữ này sang ngôn ngữ khác nữa. Cái này kiếm hiệp gọi là "tẩu hỏa nhập ma". :D

Mới tìm hiểu thì nên chọn ngôn ngữ ASM. Ngôn ngữ này tuy hơi khó viết nhưng nó giúp ta hiểu được sâu hơn bản chất cũng như cấu tạo của con PIC. Sau đó, khi đã vững phần căn bản, nếu thích có thể chuyển qua C. Đây là 2 ngôn ngữ thông dụng nhất cho PIC, càn các ngôn ngữ khác, hẳn phải có một nhược điểm nào đó nên được ít người chọn để làm công cụ lập trình.

Các ngôn ngữ cấp cao thực chất đều được xây dựng dựa trên các lệnh cơ bản của con PIC thôi. Trong quá trình sinh code của các ngôn ngữ cấp cao, như C, trước khi chuyển sang mã HEX còn có thêm một giai đoạn là chuyển sang mã Assembly của PIC. Như vậy có thể tạm hiểu là các hàm của ngôn ngữ cấp cao cho PIC được xây dựng dựa trên tập lệnh cơ bản của PIC. Các hàm này có thể giúp ta dễ viết và mang tính tổng quát cao, giống như các module chương trình được xây dựng sẵn. nhưng có nhược điểm là không linh động. Điều này một phần giải thích tại sao file biên dịch của ngôn ngữ cấp cao lớn hơn so với việc viết trực tiếp bằng ASM.

Tính tổng quát và thiếu linh động cũng sẽ gây trở ngại cho quá trình tối ưu, đồng thời khả năng kiểm soát quá trình thực thi của vi điều khiển không cao. Nếu viết bằng ASM, ta có thể kiểm soát được từng "cử chỉ" của PIC và thời gian thực thi của nó, như vậy ta có thể đáp ứng được các yêu cầu về tối ưu nhu anh Nam đã đề cập. Tuy nhiên điều đó đòi hỏi khả năng kiểm soát của người lập trình cũng cao hơn, có nghĩa là ta phải hiểu được từng ngóc ngách của con vi điều khiển PIC.

Nếu có khả năng xây dựng các module chương trình dựa trên tập lệnh của PIC (ví dụ như các module về xử lí thuật toán, các module về các khối chức năng trong PIC), ta hoàn toàn có thể xây dựng được một ngôn ngữ lập trình cho riêng mình. :D . Có thể vào trong luồng MPASM để tìn hiểu cách xây dựng một hàm bằng ngôn ngữ ASM của mod Mạnh.

Đây chỉ là một vài nhận xét mang tính chủ quan, mọi người góp ý thêm nhé. Anh Nam coi lại coi em hiểu như vậy có đúng không. Mong anh góp ý thêm.:D .

nhh 17-03-2006 05:57 PM

Trích:

Nguyên văn bởi pb1
em đã nghiền hết mấy bài của bác nhh rồi, em đang chờ các bài tiếp theo của bác nhh đây. Bác nhanh nhanh viết thêm nữa đi chứ.

Mấy tuần rày hơi nhát!:D
Bài tiếp chắc là cái đồng hồ điện tử.Hy vọng là tuần tới tớ sẽ cơ bản xong và post lên cho anh em chỉ giáo thêm!

namqn 17-03-2006 06:14 PM

Những nhận xét của ntc là chính xác.
Cho dù bạn viết bằng ngôn ngữ gì thì cuối cùng con PIC cũng phải chạy chương trình của bạn, và bản thân nó chỉ hiểu mỗi mã nhị phân nằm trong bộ nhớ chương trình của nó mà thôi. Vì lập trình bằng mã nhị phân quá khó khăn đối với con người, nên mới có nhiều ngôn ngữ lập trình được tạo ra để giúp cho việc lập trình được dễ dàng hơn. Chẳng qua vào thời điểm này không có trình biên dịch (compiler) lý tưởng nào có thể thay thế được trình hợp dịch (assembler) trong mọi trường hợp mà thôi. Và để lập trình bằng hợp ngữ một cách hiệu quả thì thông thường bạn phải có một con vi điều khiển được mô phỏng trong chính bạn, để kiểm soát chương trình bạn đang viết, một công việc quá khó khăn cho những người mới học.
Không ít người đã tự xây dựng ngôn ngữ lập trình và trình biên dịch cho riêng mình, chẳng hạn như Vladimir Soso (viết Basic compiler) hay Wouter van Ooijen (sáng tạo JAL và viết JAL compiler).

Thân,

pb1 18-03-2006 08:54 PM

help me about motor
 
em đang sử dụng PIC16f877A để điều khiển động cơ DC, yêu cầu điều khiển động cơ:(1) ổn định tốc độ động cơ khi địa hình thay đổi. (2) Chuyển từ RF sang RR(trái->phai) không bị giật. (3) Tùy ý thiết đặt tốc độ.

Có bác nào đã làm về vấn đề này, xin chỉ giáo giúp

pb1 18-03-2006 08:56 PM

Bác nhh có thể giúp em một tay không?

nhh 19-03-2006 09:12 AM

Trích:

Nguyên văn bởi pb1
em đang sử dụng PIC16f877A để điều khiển động cơ DC, yêu cầu điều khiển động cơ:(1) ổn định tốc độ động cơ khi địa hình thay đổi. (2) Chuyển từ RF sang RR(trái->phai) không bị giật. (3) Tùy ý thiết đặt tốc độ.

Có bác nào đã làm về vấn đề này, xin chỉ giáo giúp

Chao ban!
De moi nguoi de hinh dung va tham gia nhiet tinh vao van de cua ban,ban co the post so do nguyen li va code ban viet len.Nhu the minh tin van de se duoc giai quyet nhanh hon!

Chao!

nhh 19-03-2006 09:26 AM

Traffic light
 
Chào cả nhà!

Ý định tuần này của nhh là viết chương trình cho cái digital clock với timer, led 7 đoạn, phím nhấn,...nhưng nghĩ đi nghĩ lại giang hồ luyện chiêu này bằng IC thời gian thực DS1307, DS1337,...giao tiếp I2C...mình lại dùng timer định thì nhảy tới nhảy lui thật khó coi quá !

Mục đích cũng để tìm hiểu hoạt động của các timer, do vậy mà nhh tạm gác cái digital clock này lại. Bù lại mình sẽ làm một cái mạch đèn giao thông ,dùng ngắt timer0.

PIC16F877A có 3 timer ,timer0 và timer2 là hai timer 8bit còn timer1 là timer 16bit.
nhh chỉ đề cập đến những phần có liên quan đến timer0 trong ứng dụng này.Còn lại tham khảo trong datasheet viết rất rõ.
Các thanh ghi tác động timer0 gồm INTCON và OPTION_REG. Để khởi động timer0,xóa bit T0CS về 0.Lúc này thanh ghi TMR0 sẽ tự động tăng lên một ứng với mỗi chu kỳ lệnh

http://www.freewebtown.com/bantoi/PIC/Timer0.gif

Hoạt động ngắt của timer0 rất đơn giản,ngắt xảy ra khi tràn timer0 từ FFh về 00h
Khi ngắt này xảy ra cờ ngắt timer0 phất lên (bit TMR0IF được set lên 1) ,khi vào ngắt phải xóa cờ này về 0.
Bit PSA trên thanh ghi OPTION_REG chỉ định Prescaler cho timer0 hay WDT.Dùng timer0 thì xóa bit này.
Ba bit PS0,PS1,PS2 dùng chia tốc độ timer0 từ 2 đến 256 ,chia tốc độ WDT từ 2 đến 128.

Trong ứng dụng này do timer0 tràn sớm hơn 1s khi dùng thạch anh 10MHz,do vậy dùng thêm một biến đếm số lần tràn sao cho khi biến này giảm xuống 0 thì xấp xỉ 1s.

Trong 20s đầu,đèn xanh bật ON,từ giây 21 đến 30 có thêm đèn vàng ON, 20s cuối đèn đỏ ON.

Các chân từ a đến g của led 7 seg đầu nối với RC0 đến RC6, led còn lại nối RB0 đến RB6.

nhh 19-03-2006 09:30 AM

1 Attachment(s)
Code:

;========================================
;Author:                NHH
;Date:                18/03/06
;Hardware:        PIC16F877A
;                QUARTZ  10MHz
;========================================
        PROCESSOR        PIC16f877A
        INCLUDE<P16f877A.inc>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF
;========================================
        COUNT1 EQU 0x20
        COUNT2 EQU 0x21
        COUNT3 EQU 0x22
        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
;===============MAIN PROGRAM===========
        ORG        0x000
        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,TMR0IF

        DECFSZ        COUNT1,F
        RETFIE
        MOVLW        d'154'
        MOVWF        COUNT1

        INCF        COUNT2,F
        MOVF        COUNT2,W
        CALL        TABLE
        MOVWF        PORTB

        CALL        CHECK_YELLOW
        CALL        CHECK_GREEN
        CALL        CHECK_RED

        MOVLW        d'10'
        SUBWF        COUNT2,W
        BTFSS        STATUS,0
        RETFIE
        CLRF        COUNT2
        INCF        COUNT3,F
        MOVF        COUNT3,W
        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
;.............................................................................................
MAIN
        BCF        STATUS,RP1
        BSF        STATUS,RP0                ; select BANK 1
        CLRF        TRISB                        ; PORTB,C,D  output
        CLRF        TRISC
        CLRF        TRISD
        BSF        OPTION_REG,PS0                ;TMR0 rate 1: 64
        BCF        OPTION_REG,PS1
        BSF        OPTION_REG,PS2
        BCF        OPTION_REG,PSA                ;Prescaler is assigned to the Timer0 module
        BCF        OPTION_REG,T0CS                ;enable TMR0
        BCF        STATUS,RP0                ;select BANK 0

        BSF        INTCON,GIE
        BSF        INTCON,TMR0IE
        BCF        INTCON,TMR0IF

        MOVLW        d'154'
        MOVWF        COUNT1
        MOVLW        d'1'
        MOVWF        COUNT2
        CLRF        COUNT3
        MOVLW        b'00000110'
        MOVWF        PORTB
        MOVLW        b'00111111'
        MOVWF        PORTC

        MOVLW        b'00000100'
        MOVWF        PORTD
        GOTO        $
;========================================
CHECK_YELLOW
        BTFSS        PORTD,0
        GOTO        $+2
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        RETURN
        MOVLW        b'00000110'
        MOVWF        PORTD
        RETURN
CHECK_GREEN
        BTFSC        PORTD,0
        GOTO        $+2
        RETURN
        MOVLW        d'2'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        RETURN
        GOTO        MAIN
        RETURN
CHECK_RED
        MOVLW        d'3'
        SUBWF        COUNT3,W
        BTFSS        STATUS,0
        RETFIE

        MOVLW        d'1'
        MOVWF        COUNT2
        CLRF        COUNT3
        MOVLW        b'00000110'
        MOVWF        PORTB
        MOVLW        b'00111111'
        MOVWF        PORTC
        MOVLW        b'00000001'
        MOVWF        PORTD
        RETURN       
;-----------------------------------------------------------------------
; Bang tra ve Digital tu 0 den 9
; Chi so dau truy cap la 0
; Bang o PAGE 0

        ORG 0x90
TABLE
;-----------------------------------------------------------------------
        ADDWF        PCL, F                        ; bat dau tai 0x80
        RETLW        b'11111111'                ; NO DISPLAY
        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'00111111'                ; 0

        END

http://www.freewebtown.com/bantoi/PI...ic%20light.gif

nhh 19-03-2006 09:33 AM

Hex file
Code:

:020000040000FA
:020000002728AF
:080008000528F1000308F200D5
:100010000A08F3000B11A00B09009A30A000A10AF6
:1000200021089020860041204B2054200A302102D4
:10003000031C0900A101A20A2208902087000900E0
:1000400073088A0072088300F10E710E0900031311
:100050008316860187018801011481100115811121
:10006000811283128B178B160B119A30A00001306E
:10007000A100A201063086003F30870004308800CE
:100080004028081C4428080002302202031C0800F3
:1000900006308800080008184E28080002302202A6
:1000A000031C08002728080003302202031C090053
:1000B0000130A100A201063086003F3087000130E8
:0400C00088000800AC
:100120008207FF3406345B344F3466346D347D34DB
:0801300007347F346F343F34C3
:02400E00323F3F
:00000001FF


nhh 19-03-2006 09:47 AM

Các bác xem xét và cho ý kiến,hình như nó vẫn chưa tối ưu.Thiên hạ chắc cũng không ai làm thế này!:D

pb1 20-03-2006 12:06 AM

PWM cho PIC16f877A
 
Sử dụng PIC chạy với thạch anh là 4MHz, tần số điều chế độ rộng xung là 1000Hz với duty cycle là 50%
;================================================= ========
1/ thiết lập chu kì PWM (1000Hz=0.001S) bằng cách ghi vào thanh ghi PR2.
Chu kì điều chế độ rộng xung(PWM Period)=(PR2+1)*4*Tosc*TMR2 Prescale value
tỉ lệ TMR2 prescale là 1:4, thì ta có
Tosc=1/4000000=2.5*10-7
ta cũng có
PR2=(Period/(4*Tosc*TMR2 prescale))-1
nên: PR2=(0.001/(4*2.5*10-7*4))-1=249
bằng cách thiết lập như vậy ta có chương trình như sau:(viết bằng assembler, lần sau sẽ là Hi-Tech PIC) :D
bsf STATUS,PR0;change from bank 1 to bank 0
movlw d'249'
movwf PR2
bcf STATUS,PR0
;================================================= ========
2/ thiết lập PWM duty cycle bằng cách ghi vào thanh ghi CCPR1L và hai bit 5 và 4 của thanh ghi CCP1CON.
ta có công thức sau:
PWM duty cycle= (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale value
nên suy ra: CCPR1L:CCP1CON<5:4>=PWM duty cycle/(Tosc*TMR2 prescale)
PWM duty cycle=50% của chu kỳ
PWM duty cycle=50%*0.001=0.0005
CCPR1L:CCP1CON<5:4>=0.0005/(2.5*10-7*4)
CCPR1L:CCP1CON<5:4>=500
Số 500 trong số nhị phân viết là:0111110100
vậy:CCPR1L=01111101 và CCP1CON<5:4>=00
do đó, ta có chương trình sau:
movlw b'01111101'
movwf CCPR1L
bcf CCP1CON,CCP1X;set bit 1
bcf CCP1CON,CCP1Y;set bit 0
;================================================= ========
3/thiết lập chân CCP1 là một lối ra bằng cách xóa bit TRISC<2>
bsf STATUS,PR0
movlw b'11111011'
andwf TRISC
bcf STATUS,PR0
:D
;================================================= ========
4/thiết lập giá trị prescale TMR2 và cho phép TMR2 bằng cách ghi vào T2CON(thanh ghi điều khiển Timer2)
Ta đã sử dụng từ trước là thiết lập giá trị prescale là 1:4.
Prescale TMR2 là các bit 1 và 0 trong thanh ghi T2CON
Để cho phép TMR2 là bit số 2.
Ta có đoạn chương trình như sau:
movlw b'00000101' ;Timer2 on,prescale=1:4
movwf T2CON
;================================================= ========
5/Thiết lập CCP1 ở chế độ điều chế độ điều chế độ rộng xung (PWM module)
movf CCP1CON,W
andlw b'00110000'
iorlw b'00001111';cho phép module PWM
movwf CCP1CON
;================================================= ========
thế đã nhỉ, mệt quá, đi ngủ thôi
:D
Đã lâu không viết băng assembler, hôm nay tiện làm về điều khiển động cơ, thế là hứng lên viết mấy dòng, có lẽ có nhiều thếu sot, mong các bác góp ý cho em

Khi nào em làm xong về điều khiển động cơ thì em sẽ port các sch lên diễn đàn cho cả nhà xem, rất mong cả nhà góp ý


thân!


Múi giờ GMT. Hiện tại là 11:27 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