User Tag List

Trang 18/115 đầuđầu ... 816171819202868 ... cuốicuối
kết quả từ 171 tới 180 trên 1149
Cây cảm ơn658Cảm ơn

Ðề tài: HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]

  
  1. #171
    Thành viên mới btram104's Avatar
    Tham gia
    Dec 2006
    Bài viết
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Em là dân mới tập tành viết VXL , xin nhờ các anh chị giúp giùm em một việc như thế này , đây là đoạn code viết bằng assembler cho AT89C51 dùng cổng T0 P3.4 để đếm , nhưng nó chỉ đếm được 255 lần ghi trong TL0 mà TH0 chẳng thay đổi giá trị gì , em muốn đếm sự kiện bằng 16 bít thì phải làm sao , anh chị nào chỉ em với , cám ơn nhiều nhiều ... lắm.


    ; Counter.asm

    org 0000h
    setb T0
    mov a, TMOD
    anl a, #0f0h
    orl a, #5 ; counter 0 mode 1
    ; --------------------------------------------------------
    mov TMOD, a
    setb TR0 ; counter 0 on
    mov b, #0

    mov a, b
    mov P0, a
    mov a, b

    loop:
    mov a, TL0 ; lay TL0 vao a
    anl a, #255
    xrl a, b ; so sanh gia tri dem
    jz loop ; nhay neu bang

    inc b ; tang b
    anl b, #0Fh
    mov a, b

    mov P0, a ; chi thi ra cong P0
    mov a, b ;
    sjmp loop ; lap lai mai mai...


    END

    Last edited by btram104; 21-12-06 at 10:01.

  2. #172
    Thành viên chính thức qanhep's Avatar
    Tham gia
    Apr 2006
    Bài viết
    34
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Chú này viết loằng ngoằng quá. Cụ thể toi hiển thị số đếm ra cổng P0 và P1 nhé.
    org 0
    setb P3.4 ;xac lap P3.4 la dau vao
    mov a,TMOD ;doc TMOD vao A
    anl a,#0F0H ;xoa 4 bit thap
    orl a,#00000101B ;05H(xac lap timer0:mode 1(16 bit), counter
    mov TMOD,a
    mov TH0,#0 ;xoa counter0
    mov TL0,#0
    setb TR0 ;cho phep counter0 bat dau dem
    loop:
    mov P0,TL0 ;chuyen so dem byte thap ra P0
    mov P1,TH0 ;chuyen so dem byte cao ra P1
    jmp loop ;khi dem tran, tu dong quay ve 0 de dem len

    btram104 đã cảm ơn nội dung này.

  3. #173
    Thành viên mới btram104's Avatar
    Tham gia
    Dec 2006
    Bài viết
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Cám ơn anh GANHEP cu phap của anh đơn giản mà hiệu quả , " đúng là có tay nghề "


  4. #174
    Thành viên tích cực giaosucan's Avatar
    Tham gia
    Jul 2005
    Bài viết
    511
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Click here to enlarge Nguyên văn bởi pace100k Click here to enlarge
    Cac anh oi em moi tim hieu ve VDK ho 89 (89s52), em co cau hoi the nay :
    sau khi bien dich song bang kelvil roi thi lam the nao de nap vao cho no vay ???

    mong duoc chi giao' .
    troài dùng mạch nạp chíp chứ còn gì nữa dùng phần mềm nạp
    89c thì dùng ezdownloader còn 89s thì dùng SPI pgm
    đây là một dạng kit có tích hợp mạch nạp
    Click here to enlarge

    SHARE KHO PHIM LỚN
    www.moviedownfree.com

  5. #175
    Thành viên tích cực HPECOM's Avatar
    Tham gia
    Oct 2005
    Nơi Cư Ngụ
    Tp.HCM
    Bài viết
    362
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Một bông hồng cho những ai đang còn mẹ,
    Đang còn mẹ để lòng vui sướng hơn ..

  6. #176
    Thành viên tích cực nhanh0112's Avatar
    Tham gia
    May 2006
    Bài viết
    181
    Mentioned
    1 Post(s)
    Tagged
    2 Thread(s)
    Help! help! help! mọi người giúp mình cáiClick here to enlarge ... gay go quá.
    Mình có một đoạn code được viết bằng C và build thành hex nạp vào con 89C51 thì chạy ngon ơ, thế nhưng nạp vào 89C2051 (Đã chuyển thư viện trong KeilC, nội dung chương trình thì chỉ sử dụng port 1 và 3, sử dụng cả 2 timer) thì nó lại báo lỗi "Verify Failed at 0".
    Chú ý rằng... mạch chắc là ko thể lỗi đc vì nạp thử file hex có sẵn trong chaokhun (cái mạch đồng hồ ấy) lại ko sao....
    Không biết thiết lập thư viện có sai gì không? Mong mọi người giúp đỡClick here to enlarge


  7. #177
    Moderator ngohaibac's Avatar
    Tham gia
    Sep 2005
    Nơi Cư Ngụ
    BKHN
    Bài viết
    598
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Lỗi này là khi cậu include sai header file, nó báo là chưa khai báo các biến. Bạn phải

    # include "regx51.h"

    vì header file này đã định nghĩa địa chỉ của P1_0, ... thì bạn mới sử dụng được chứ nhỉ:d

    Bạn cứ thử mở file regx51.h trong thư mục INC/Atmel/ của thư mục cài đặt ra xem sao sẽ hiểu ngay mà.

    chúc bạn thành công.

    Technical sale at WT Microelectronics S'pore
    Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
    Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

  8. #178
    Thành viên tích cực anh_gioi's Avatar
    Tham gia
    Jan 2006
    Nơi Cư Ngụ
    hanoi city
    Bài viết
    139
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    mình cũng xem lại rùi.# include "regx51.h" rất đúng.
    mình đã xem bài của ccaaju làm lúc trước ma.


  9. #179
    Thành viên tích cực anh_gioi's Avatar
    Tham gia
    Jan 2006
    Nơi Cư Ngụ
    hanoi city
    Bài viết
    139
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    còn nữa.cậu có thể chỉ cho mình biết ở đâu dạy lập trình 8051 bằng c ko?
    mình muốn học ngay.gấp rút lắm rùi.mình ở hà nội.
    cám ơn hải bắc nhe!


  10. #180
    Moderator ngohaibac's Avatar
    Tham gia
    Sep 2005
    Nơi Cư Ngụ
    BKHN
    Bài viết
    598
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Mình chẳng biết chỗ nào dạy lập trình 8051 bằng C cả. Bạn cứ lên diễn đàn học hỏi down sách vở về mà đọc thôi. Còn chương trình mà bạn gửi lỗi thì bạn hãy đưa cả code của chương trình đó lên nhé k có sao mà biết được. Còn chương trình mà mình viết thì chạy ok mà.

    Anh em nếu lên mạng không tiện mang theo quyển sách C51 Primer thì có một địa chỉ đọc nó trực tuyến dạng HTML ở đây:
    http://www.esacademy.com/automation/docs/c51primer/

    hoặc đây:
    http://www.hitex.com/iuk/c51primer/c51primer.html

    Tiếp theo, vừa học 8051 để thi vừa viết cho anh em luôn :d. Bài này mình viết về các vùng nhớ của 8051 để có cơ sở viết các bài tiếp theo.



    Click here to enlarge

    Hình 1: Các không gian nhớ của 8051


    1/Vùng nhớ Data
    Trong CPU 8051 vùng nhớ đầu tiên là "DATA". Đó là vùng nhớ RAM on-chip. Bắt đầu từ D:0x00 đến D:0x7F (D chỉ rằng đây là vùng nhớ Data). Vùng RAM này có thể được dùng cho các biến chương trình. Đó là vùng nhớ có thể định được địa chỉ trực tiếp, vì thế có thể dùng các lệnh dạng như: "MOV A,x".

    D:00 đến D:1F là 4 bank (bank 0 đến bank 3). Mỗi bank gồm 8 byte là địa chỉ của các thanh ghi R0 đến R7. Muốn sử dụng vùng nhớ này thì khai báo với từ khóa data


    D:20 đến D:2F là vùng không gian có thể định địa chỉ bít được (bit addressable). Đó là sự khác biệt so với C chuẩn. Ví dụ một biến P ở địa chỉ D:0x21 thì bạn có thể truy nhập vào từng bít của nó như: P.0, P.1, P.3 , P.4,... trong ASM thì phải Click here to enlarge. Còn trong C bạn phải định nghĩa với từ khóa sbit. ví dụ:

    Code:
    char bdata test;   // khai báo biến test nằm trong vùng nhớ định được địa chỉ bit
    sbit  sign = test^7; // biến dấu của test khai báo là bit thứ 7
    Từ đó bạn có thể thấy rằng muốn khai báo một biến trong vùng RAM định địa chỉ bít thì các bạn thêm từ khóa bdata.

    Vùng nhớ trên 0x80 là vùng nhớ dành cho các thanh ghi đặc biệt (SFR). Đây là vùng nhớ thường định địa chỉ bằng tên như SYSCON. Các tên này bạn có thể thấy là nó khởi tạo bởi các thanh ghi trong header file (thử mở file regx51.h ra xem nó viết kí rì ). Nó không định nghĩa hết mà các địa chỉ không định nghĩa dùng cho các mục đích khác trong tương lai. Các bạn sẽ thấy là nó định nghĩa các thanh ghi với từ khóa sfr.

    Ví dụ:
    Code:
    sfr P1=0x90; // định nghĩa tên P1 là địa chỉ của port1
    2/ Vùng nhớ thứ 2 là vùng nhớ tồn tại giữa địa chỉ 80H đến FFh. Đây là vùng nhớ IDATA : vùng nhớ không định địa chỉ trực tiếp (indirectly addressable) thường dùng với các lệnh thao tác với địa chỉ tương đối trong ASM (như MOV A,@Ri), vùng nhớ này có tiền tố I và kí hiệu với tên là IDATA.

    Đây chính là vùng nhớ tiếp theo của RAM nội với 8051 hay nói cách khác khi gắn thêm RAM thì vùng nhớ này chính là vùng RAM ngoài. Còn với 8052 với 256 byte RAM nội thì vùng nhớ này chính là vùng RAM nội.

    Đây là vùng nhớ rất thích hợp dùng cho stack SP.

    3/ Thứ 3 là vùng nhớ CODE segment là vùng nhớ trong ROM, bắt đầu từ địa chỉ 0 và nó được dành cho CODE chương trình. Nó bắt đầu từ C:0000 đến C:0FFFFh (65536 bytes). Vùng nhớ này được truy nhập qua bộ đếm chương trình (PC) đối với opcode và bởi DPRT cho dữ liệu (cả 2 thanh ghi này là các thanh ghi 16 bit).

    Trong ROM chỉ có biến constant mới được đặt tại đây. Tuy nhiên, một vài bộ nhớ Flash có khả năng thay đổi dữ liệu trong CODE space. Một số loại mới cho phép ứng dụng có thể load các blocks của code thông qua giao diện ISP. Cái này có thể thấy ở dòng 89S hay ở PIC đó.

    (còn tiếp nữa ở bài sau, giờ tớ phải đi học mấy cái, đang ôn thi mà Click here to enlarge.)

    Thang tdh47nguyen24 đã cảm ơn nội dung này.
    Technical sale at WT Microelectronics S'pore
    Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
    Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

Trang 18/115 đầuđầu ... 816171819202868 ... cuốicuối

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không được gửi luồng mới
  • Bạn không được trả lời bài viết
  • Bạn không được gửi file đính kèm
  • Bạn không được sửa bài viết của mình
  •