• Member Login:

+ Trả Lời Ðề Tài
Hiện kết quả từ 1 tới 5 của 5
  1. #1
    Junior Member
    Tham gia ngày
    Feb 2012
    Bài gửi
    6
    Thanks
    Thanked 3 Times in 1 Post
    ►Chia Sẻ Cho Bạn Bè:


    Bạn hãy cùng VVV123 xây dựng DIENDANDIEN.COM nhé

  2. #2
    Junior Member
    Tham gia ngày
    Feb 2012
    Bài gửi
    6
    Thanks
    Thanked 3 Times in 1 Post


    Bài 1 : truy xuất PORT ,làm sáng tắt đèn led.
    Đây là bài kinh điển mà bất cứ ai mới học vi điều khiển đều phải trải qua, bâygiờ cũng không ngoại lệ. các bạn chú ý tôi sử dụng trình biên dịch MikroC nhé.( tôi khuyên các bạn sử dụng vì nó cực kỳ tiện lợi và nhiều thư viện hỗ trợ)


    void main()
    {
    while(1)
    {
    1. ANSEL = 0; // CAU HINH NGO RA DIGITAL
    2.ANSELH = 0; // vì 2 thanh ghi ansel đều = 0 nên tất cả 14 có 2 chức năng số/tưong tự đều là số
    3.TRISB = 0; //CAU HINH PORT B LA NGO RA
    4. PORTB = 0xFF; hoặc PORTB = 0b11111111// sáng hết port B
    5.delay_ms(10);
    6.PORTD = 0; hoặc viết PORTB = 0b00000000 hoặc PORTB = Ox00; // tắt hết PORTB (cả 8 chân)
    7.delay_ms(1000);
    }
    }


    bài này rất rất cơ bản, tôi có thể giải thích như sau:
    dòng lệnh 1:

    - đây là dòng lệnh thiết lập, trong bài này đơn giản chỉ là sáng tắt port D (tức là cho 8 chân sáng hết - mức 1 rồi sau đó 1s cho tắt hết). Như tôi đã nóimột port có nhiều chức năng khác nhau. cụ thể ở đây PORT D có thể là ngõ số hay ngõ tưong tự . bạn cho led sáng tắt tức xuất 0 hoặc 5 V ra PORT D, . Nó là ngõ số, vì vậy ra phải làmgì>??? dĩ nhiên là khai báo nó là ngõ kiểu số ( chỉ có 2 mức 0 - tức 0V, 1tức 5 V). thiết lập là ngõ số liên quan đến thanh ghi ANSEL. thực chất có 2thanh ghi cấu hình số và tương tự cho một chân nào đó: là thanh ghi ANSEL vàANSELH. thanh ghi ANSEL có đủ 8 bit trong khi thanh ghi ANSEL H chỉ có 6 bit (lý do là trên 16f887 có 14 chân vừa là ngõ số vừa là ngõ tương tự => mỗichân ứng với 1 bit để cấu hình cho nó.

    bit = 0 là ngõ số, = 1 là tưong tự). vì thế các bạn muốn 1 chân nào đó là sốhay tương tự các bạn chỉ cần thiết lập cho bit liên quan tuơng ứng.


    ví dụ: tôi muốn chân số 4 ( chân RA2/ AN2) là ngõ ra số, vậy tôi phải thiết lậpbit tưong ứng của nó trong thanh ghi ANSEL, vậy trong 2 thanh ghi ANSEL, bitnày nằm trong thanh ghi nào??? bit này nằm trong thanh ghi ANSEL và nó nằm ở vịtrí bit thứ 3( tức bit ANS2) ,

    vậy đơn giản chỉ cần khai báo
    ANS2 = 0;
    okie? hoặc có thể viết ANSEL.2 = 0;
    2 cách viết này là tương đương.
    cách thiết lập từng bit này có thể cho phép trong 1 port có thể vừa có ngõ số,vừa có ngõ tưong tự. đã xong
    Lệnh 2( tưong tự lệnh 1)
    lệnh 3: sau khi đã cấu hình nó là ngõ số, vậy các bạn phải xem nó là ngõ vàohay ra. vì trong 16f887 thì 1 chân hoặc là vào, hoặc là ra. thiết lập nó liênquan đến thanh ghi TRIS. Thanh ghi TRIS thì port nào cũng có, có thanh ghiTRISA cho port A, TRISB cho port B...vân vân.
    ví dụ port B có 8 chân, mỗi chân sẽ đựoc 1 bit trong thanh ghi TRISB cấu hìnhlà ngõ vào hay ra. ( do thanh ghi TRISB sẽ có đầy đủ 8 bit). tôi muốn ngõ RB0 (các bạn nhớ chân nào có chữ RB hay RA, RA..thì là pin cho xuất nhập nhé) là ngõra. vậy tất nhiên bit đầu tiên trong thanh ghi TRISB dùng để thiết lập cho chânRB0 rồi, đó là bit TRISB0. vì là ngõ ra nên ta cho TRISB0 = 0; ngược lại muốnlà ngõ vào ( giả sử ứng dụng cho nút nhấn chẳng hạn) thì TRISB = 1;. vậy muốncả PORTB là ngõ ra thì sao? đơn giản chỉ là TRISB = 0b0000000 ( viết theo kiểunhị phân, 0b tức trình biên dịch hiểu là viết theo nhị phân, sau đó 8 số 0 tứclà 8 bit trong thanh ghi trisb đều = 0, tức 8 chân đều là ngõ ra, nếu viếtTRISB = 0b01010101 thì tức chân 4 chân là ngõ ra, 4 chân là ngõ vào)..okie?
    hoặc có thể viết theo kiểu số HEXA, bạn có thể viết TRISB = 0x00( 0x tức là sửdụng số HEXA, mỗi số HEXA ứng với 4 bit. 0x00 = 0b00000000

    okie, vậy là khi làm việc với 1 port hay 1 pin bạn nhớ chú ý 2 việc cần thiếtlập: nó là ngõ số hay tương tự ( liên quan thanh ghi ANSEL và ANSELH), = 0 làngõ số, = 1 là ngõ tưong tự ( làm việc với tín hiệu tưong tự)
    kế tiếp nó là ngõ ra hay vào( liên quan thanh ghi TRIS. PORT A thì liên quanthanh ghi TRISA, PORTB liên quan thanh ghi TRISB..vân vân
    TRISB= 0 hoặc TRISB = 0b00000000 hoặc TRISB = 0x00 ( 3 cách viết); // tất cảcác chân của portB là ngõ vào.

    TRISB = 0b10101010 hoặc viết TRISB = 0xAA ;// 4 chân là ngõ vào, 4 chân là ngõra
    rất đơn giản phải không?

    lênh số 4:
    PORTB = 0xFF hoặc có thể viết PORTB = 0b11111111 tức tất cả các 8 ngõ ra đều =1 ( led sáng)
    nếu tôi viết PORTB = 0b11110000 ( theo nhị phân) hoặc PORTB = 0xF0 ( theo sốHEXA ) tức 4 chân đầu = 1( led sáng), 4 chân sau = 0( led tắt)
    Lệnh số 5: các bạn gặp phải 1 ứng dụng ngon lành trong trình biên dịch MikroC,nó chính là hàm delay, không như các trình biên dịch khác phải viết chuơngtrình delay , bạn chỉ việc viết theo cấu trúc:
    delay_ms( số ms muốn delay);
    ở ví dụ trên tôi truyền vào 1000 tức 100ms( nhớ là đơn vị ms) tức 1s
    lệnh số 6: các bạn cho PORDB tắt hết

    ngoài ra vòng lặp while(1) tức vòng lặp vô tận, nó sẽ không bao giờ dừng lại.tức led cứ sáng, sáng 10s, led tắt, tắt 10s rồi lặp lại...vân vân ( giống kiểumấy bảng quảng cáo led ở các shop ngoài đường vậy)

    Bài viết có gì thiếu sót thì mong anh em chỉnh sửa giùm vì mình cũng mới học ak còn rất gà>>>>

    nè thỳ chữ ký ((( V.V.V )))

    V V V

    Bạn hãy cùng VVV123 xây dựng DIENDANDIEN.COM nhé

  3. The Following 3 Users Say Thank You to VVV123 For This Useful Post:

    steven (10-03-2012), thanhduy_meo (23-03-2012), victory_1410 (27-08-2013)

  4. #3
    Junior Member
    Tham gia ngày
    May 2012
    Bài gửi
    1
    Thanks
    Thanked 0 Times in 0 Posts

    lập trình trong MICkroC



    cho mình hỏi lập trình trong mickroC với nhiều port cùng lú thì làm như nào.Bạn có thể cho mình một ví dụ như là dịch led từ porta->porte->portc->portd->portb được ko? Mình làm hoài mà nó ko chạy.

    Bạn hãy cùng tranvancan34 xây dựng DIENDANDIEN.COM nhé

  5. #4
    Junior Member
    Tham gia ngày
    Aug 2011
    Bài gửi
    1
    Thanks
    Thanked 0 Times in 0 Posts


    nhờ các bác giúp em sử dụng hàm strcmp với :
    char test1 = "lap trinh";
    char test2 = "mikroc";
    int sosanh;


    main(){
    sosanh
    = strcmp(test1,test2);

    if(sosanh==0)
    LATD0_BIT=1;
    while(1){
    }
    }

    mình đã khai báo và xem ví dụ ok nhưng khi biên dich là báo lỗi : incompatible types :
    Thay đổi nội dung bởi: diendandien_, 01-06-2013 lúc 02:39 PM

    Bạn hãy cùng diendandien_ xây dựng DIENDANDIEN.COM nhé

  6. #5
    Junior Member
    Tham gia ngày
    Jan 2012
    Bài gửi
    1
    Thanks
    Thanked 0 Times in 0 Posts


    cảm ơn bạn nhiều ! bạn đã viết rât chi tiết !

    Bạn hãy cùng victory_1410 xây dựng DIENDANDIEN.COM nhé

Múi giờ GMT. Hiện tại là 03:19 AM
Powered by: VBB v4.1.5 Copyright ©2000-2014, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.5.2 DIỄNĐÀNĐIỆN.COM
Xây Dựng Và Phát Triển Bởi Các Thành Viên DienDanDien.Com
+ DDD là một hệ thống mở, chúng tôi sẽ không chịu trách nhiệm về nội dung đăng tải do thành viên đưa lên
+ Truy cập và sử dụng Website này nghĩa là bạn đã chấp nhận Quy Định của Diễn Đàn
Trang chủ | Diễn đàn |