User Tag List

Trang 1/2 12 cuốicuối
kết quả từ 1 tới 10 trên 15
Cây cảm ơn1Cảm ơn

Ðề tài: Hỏi về lập trình C cho 8051( làm thế nào để biết các lệnh C dùng những thanh ghi gì)

  
  1. #1
    Thành viên chính thức havian's Avatar
    Tham gia
    Jun 2011
    Bài viết
    66


    Nhóm xã hội



    Điện Tử Hà Nội

    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Hỏi về lập trình C cho 8051( làm thế nào để biết các lệnh C dùng những thanh ghi gì)

    hello các bác.
    Mình đang học lập trình cho 8051, ở trường thì các thầy dạy dùng ASM . Được cái asem nó sát với VĐK nhất, làm việc cùng asem thì mình có thể hiểu các câu lệnh nó đang sử dụng những thanh ghi nào, truy suất dữ liệu từ các ô nhớ thế nào.

    Nhưng mà dùng asem thì hơi bị lăng nhằng, dài dòng và cũng khó nữa. Bây giờ mình thấy phần lớn lập trình cho 8051 đều dùng phần mềm Keil-C . Nó thì dùng ngôn ngữ C ( mình mới làm quen, nhưng cũng thấy là nó đỡ phức tạp hơn assembly). Nhưng có điều mình thắc mắc có cách nào để mình có thể biết các câu lệnh trong C thì nó dùng những ô nhớ, thanh ghi nào không
    ví dụ như là: Lệnh quay vòng FOR ở bên dưới ý

    #include <REGX51.H>
    #define tat 0
    #define bat 1
    /*==========================================*/
    sbit led1 = P1^0;
    void delay ( long time)
    { long n;
    for( n=0; n++; n<time )
    { // ko lam gi ca
    }
    }

    void main( void)
    {
    while(1)
    {
    led1 = bat;
    delay( 2000);
    led1 = tat;
    delay( 2000);
    }
    }

    Phải nói là các thầy cũng bảo nên nắm vững lập trình bằng asem trước vì nó là cơ bản và là nền móng. Còn sau đó mới phát triển lên C cho 8051 thì sẽ tôt hơn vì khi đó mình đã hiểu được bản chất các câu lệnh , các thanh ghi. Nhưng khi viết bằng C thì mình không biết xác định những thanh ghi .
    Mình mới tập tành vào vi điều khiển , có gì mọi ngừoi giúp với nhé

    CHỦ ĐỀ TƯƠNG TỰ:


  2. #2
    Thành viên tích cực Hard's Avatar
    Tham gia
    Aug 2005
    Nơi Cư Ngụ
    Quang Tri
    Bài viết
    805
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hi,
    Để hiểu thêm về KeilC bác có thể xem file list đuôi LST sau khi biên dịch một chương trình đơn giản nào đó. Những câu lệnh C sẽ được chuyển qua ASM trong file list này để bác tiện so sánh và hiểu thêm.
    Thân ái.

    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

  3. #3
    Thành viên chính thức havian's Avatar
    Tham gia
    Jun 2011
    Bài viết
    66


    Nhóm xã hội



    Điện Tử Hà Nội

    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Bạn ơi
    mình mở file đuôi LST mà sao nó giống hệt như file soạn thảo bằng C thế
    đây này
    dieu khien led .LST.doc
    (mình thêm đuôi .doc)


  4. #4
    Thành viên tích cực duong_act's Avatar
    Tham gia
    Nov 2008
    Bài viết
    4,293


    Nhóm xã hội



    PCB Designer

    Mentioned
    4 Post(s)
    Tagged
    2 Thread(s)
    Để biết về thanh ghi sao bạn không dùng ngay ASM ấy ?

    Khi tôi chết đi, hãy chôn tôi cùng chiếc mỏ hàn, cục nhựa thông và cuộn thiếc !!!

  5. #5
    Thành viên tích cực nguyenvanvui's Avatar
    Tham gia
    May 2009
    Bài viết
    168
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    hình như mình thấy file .map có report thì fai,bạn kiểm tra thử xem

    các vấn đề về sdcard, usb, tcp/ip, upgrate firmware,...
    trên các dòng chip: stm32, lpc of nxp
    please cell phone: 01649895559

  6. #6
    Thành viên chính thức havian's Avatar
    Tham gia
    Jun 2011
    Bài viết
    66


    Nhóm xã hội



    Điện Tử Hà Nội

    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Click here to enlarge Nguyên văn bởi duong_act Click here to enlarge
    Để biết về thanh ghi sao bạn không dùng ngay ASM ấy ?
    tức là dùng C thì muốn biết những điều đó là không thể hả bạn, thế tức là mình chả cần quan tâm đến các thanh ghi khi lập trình à. chả là mình lập trình C mấy bài mà gặp những lỗi mà mình không hiểu, hỏi thầy thì ông bảo " đấy là do anh đi tắt đón đầu mà không hiểu bản chất của nó", rồi bảo tự về học lạiClick here to enlargeClick here to enlarge ( thế mới đau)


  7. #7
    Thành viên chính thức havian's Avatar
    Tham gia
    Jun 2011
    Bài viết
    66


    Nhóm xã hội



    Điện Tử Hà Nội

    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    126: ?C_STARTUP: LJMP STARTUP1
    127:
    128: RSEG ?C_C51STARTUP
    129:
    130: STARTUP1:
    131:
    132: IF IDATALEN <> 0
    C:0x0000 020048 LJMP STARTUP1(C:0048)
    C:0x0003 7F02 MOV R7,#0x02
    C:0x0005 7E00 MOV R6,#0x00
    C:0x0007 7D00 MOV R5,#0x00
    C:0x0009 7C00 MOV R4,#0x00
    7: void delay ( long time)
    C:0x000B 8F0B MOV 0x0B,R7
    C:0x000D 8E0A MOV 0x0A,R6
    C:0x000F 8D09 MOV 0x09,R5
    C:0x0011 8C08 MOV 0x08,R4
    8: { long n;
    9: for( n=0; n++; n<time )
    C:0x0013 E4 CLR A
    C:0x0014 F50F MOV 0x0F,A
    C:0x0016 F50E MOV 0x0E,A
    C:0x0018 F50D MOV 0x0D,A
    C:0x001A F50C MOV 0x0C,A
    C:0x001C 780C MOV R0,#0x0C
    C:0x001E 120028 LCALL C?LLDIIDATA1(C:0028)
    C:0x0021 EC MOV A,R4
    C:0x0022 4D ORL A,R5
    C:0x0023 4E ORL A,R6
    C:0x0024 4F ORL A,R7
    C:0x0025 70F5 JNZ C:001C
    10: { // ko lam gi ca
    11: }
    12: }
    13:
    C:0x0027 22 RET
    C?LLDIIDATA1:
    C:0x0028 7401 MOV A,#0x01
    C?LLDIIDATA8:
    C:0x002A FF MOV R7,A
    C:0x002B 33 RLC A
    C:0x002C 95E0 SUBB A,ACC(0xE0)
    C:0x002E FE MOV R6,A
    C:0x002F FD MOV R5,A
    C:0x0030 FC MOV R4,A
    C?LLDIIDATA:
    C:0x0031 08 INC R0
    C:0x0032 08 INC R0
    C:0x0033 08 INC R0
    C:0x0034 E6 MOV A,@R0
    C:0x0035 CF XCH A,R7
    C:0x0036 2F ADD A,R7
    C:0x0037 F6 MOV @R0,A
    C:0x0038 18 DEC R0
    C:0x0039 E6 MOV A,@R0
    C:0x003A CE XCH A,R6
    C:0x003B 3E ADDC A,R6
    C:0x003C F6 MOV @R0,A
    C:0x003D 18 DEC R0
    C:0x003E E6 MOV A,@R0
    C:0x003F CD XCH A,R5
    C:0x0040 3D ADDC A,R5
    C:0x0041 F6 MOV @R0,A
    C:0x0042 18 DEC R0
    C:0x0043 E6 MOV A,@R0
    C:0x0044 CC XCH A,R4
    C:0x0045 3C ADDC A,R4
    C:0x0046 F6 MOV @R0,A
    C:0x0047 22 RET
    133: MOV R0,#IDATALEN - 1
    C:0x0048 787F MOV R0,#0x7F
    134: CLR A
    C:0x004A E4 CLR A
    135: IDATALOOP: MOV @R0,A
    C:0x004B F6 MOV @R0,A
    136: DJNZ R0,IDATALOOP
    C:0x004C D8FD DJNZ R0,IDATALOOP(C:004B)
    185: MOV SP,#?STACK-1
    186:
    187: ; This code is required if you use L51_BANK.A51 with Banking Mode 4
    188: ;<h> Code Banking
    189: ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
    190: #if 0
    191: ; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
    192: EXTRN CODE (?B_SWITCH0)
    193: CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
    194: #endif
    195: ;</h>
    C:0x004E 75810F MOV SP(0x81),#0x0F
    196: LJMP ?C_START
    C:0x0051 020054 LJMP main(C:0054)
    14: void main( void)
    15: {
    16: while(1)
    17: {
    18: led1 = bat;
    C:0x0054 D290 SETB led1(0x90.0)
    19: delay( 2);
    C:0x0056 120003 LCALL C:0003
    20: led1 = tat;
    C:0x0059 C290 CLR led1(0x90.0)
    21: delay( 2);
    C:0x005B 120003 LCALL C:0003
    22: }
    C:0x005E 80F4 SJMP main(C:0054)
    Mình cuối cùng cũng tìm ra cái disassembly trong keilC rồi
    nhưng nó lằng nhằng quá, khó hiểu ghê, bác nào giải thích mình với . hì hìClick here to enlarge


  8. #8
    Thành viên tích cực duong_act's Avatar
    Tham gia
    Nov 2008
    Bài viết
    4,293


    Nhóm xã hội



    PCB Designer

    Mentioned
    4 Post(s)
    Tagged
    2 Thread(s)
    Click here to enlarge Nguyên văn bởi havian Click here to enlarge
    tức là dùng C thì muốn biết những điều đó là không thể hả bạn, thế tức là mình chả cần quan tâm đến các thanh ghi khi lập trình à. chả là mình lập trình C mấy bài mà gặp những lỗi mà mình không hiểu, hỏi thầy thì ông bảo " đấy là do anh đi tắt đón đầu mà không hiểu bản chất của nó", rồi bảo tự về học lạiClick here to enlargeClick here to enlarge ( thế mới đau)
    Dĩ nhiên là khi lập trình C cần phải biết 1 số hiểu biết nhất định về phần cứng chứ không thể mù tịt được.
    Mà C gặp lỗi về thanh ghi là thế nào nhỉ ? Chư gặp bao giờClick here to enlarge

    Khi tôi chết đi, hãy chôn tôi cùng chiếc mỏ hàn, cục nhựa thông và cuộn thiếc !!!

  9. #9
    Thành viên chính thức havian's Avatar
    Tham gia
    Jun 2011
    Bài viết
    66


    Nhóm xã hội



    Điện Tử Hà Nội

    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Vậy tức là Lập trình bằng C không cần quan tâm thanh ghi nhỉ!!

    Vậy tốt rồi, Cám ơn anh em trong diễn đàn đã giải đáp giúp mình. Thực ra mình mới học lập trình cho VĐK nên thấy ông thì bảo phải nắm chắc Asem rồi mới nên học C, có ông thì bảo dùng Asem thì không giúp gì nhiều cho C , khỏi phải biết rõ quá.

    Giờ thì mình đã tìm ra con đường , học qua Asem để biết nguyên lý cơ bản của VĐK rồi chuyển ngay qua C cho nó lành. Khỏi phải đi xâu vào Asem làm gì cho nó mệt đầu, hiệu quả thấp

    Thank các bác(


  10. #10
    Thành viên chính thức quangmanhvk's Avatar
    Tham gia
    Jan 2012
    Bài viết
    44
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    có ai biết đoạn code này bị làm sao mà cảng P0 không sáng chỉ giáo hộ tôi "
    #include<reg51.h>
    void delay(unsigned int ms)
    {
    unsigned int a;
    unsigned char b;
    for(a=0;a<ms;a++)
    {
    for(b=0;b<125;b++)
    {
    }
    }
    }
    main()
    {
    while (1)
    {
    P0=P1=P2=P3=0xff;
    delay(300);
    P0=P1=P2=P3=0x00;
    delay(300);
    }
    }
    xin gữi " quangmanhvkhk@gmail.com "


Trang 1/2 12 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
  •