Thông báo

Collapse
No announcement yet.

vấn đề UART trong ngôn ngữ c

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • vấn đề UART trong ngôn ngữ c

    Xin chào các bậc tiền bối. số là thế này: Mình đã viết chương trình AVR bằng ASM lâu năm nay muốn chuyển sang C. mình lập trình cho atmega128 dùng uart để truyền nhận dữ liệu chế độ ngắt cả truyền và nhận viết bằng CV. mình đang thắc mắc ở chổ:
    + CV có 2 hàm truyền nhận là putchar và getchar.vậy thì làm thế nào để biết được mình đang truyền hay đang nhận byte thứ mấy ạ?và 2 hàm này nên đưa vào ctr chính hay chương trình ngắt ạ( vd đưa vào ngắt timer chẳng hạn)
    + khi truyền nhận với nhiều con AVR khác mà con mình làm master thì có dùng được bộ sinh mã của CV không ạ, hay mình phải tự viết code.
    vì mới chập chững học C nên chưa được rõ nhờ các bậc tiền bối chỉ giúp ạ! Xin cám ơn

  • #2
    -Hai hàm getchar và putchar đều nhận và phát từng byte mà, nếu thu phát string thì bạn phải dùng gets hoặc puts

    -Muốn nhận 1 ký tự bằng hàm getchar thì bản thân hàm này làm một vòng lặp trong chương trình chính, chờ tới khi nhận được ký tự mới chuyển sang lệnh kế tiếp. Bản thân hàm này rất dở cả ngắt hay không ngắt. Tưởng tượng khi không nhận được tín hiệu xem như cả chương trình bị treo. Nếu không dùng ngắt thì khi đang xử lý công việc khác nếu có 2-3 ký tự khác chuyển đến thì coi như mất sạch, nên phải dùng ngắt để đưa vào bộ đệm và đọc ra sau. Nếu bạn muốn nhận dữ liệu một cách chắc chắn thì phải sửa lại chương trình ngắt hoặc viết một hàm garchet nào đó để nhận byte
    -Hàm putchar thì đơn giản hơn, đặt 1 ký tự vào thanh ghi bộ đệm và cho phát. Nếu phát không nhiều thì không cần dùng tới ngắt, nếu phát hàng loạt ký tự mà không dùng ngắt thì khi nào phát hết mới thực hiện lệnh kế tiếp được. (tốc độ AVR bây giờ rất nhanh so với tốc độ truyền UART). Tôi không phát nhiều hay liên tục nên không dùng ngắt, chỉ dùng putchar, puts, putsf là cũng ổn
    Đã bỏ nghề về quê chăn gà...

    Comment


    • #3
      thank bác katecka tui đã hiểu được phần nào.bây giờ thực hành tiếp , ko rõ sẽ thỉnh giáo bác tiếp.

      Comment


      • #4
        hình như là bác Katecka nói chưa đúng lắm: trong chế độ uart mà dùng ngắt cho cả truyền và nhận thì hàm getchar và putchar nếu viết trong chương trình chính thì quá trình truyền và nhận đều ko ảnh hưởng đến ctr chính vì lúc này hàm getchar và putchar chỉ làm việc với bộ đệm, còn truyền và nhận vật lý đều thông qua bộ đệm.công việc còn lại của người lập trình là làm sao nhận vào (truyền đi)từ bộ đệm cho đúng thứ tự mong muống . ko biết vậy có chính xác ko nhờ các cao thủ chỉ thêm cho.thanks!

        Comment


        • #5
          -Với getchar, có dùng ngắt hay không bạn vẫn phải dùng getchar thường xuyên để nhận. Nếu bộ đệm rỗng, chuơng trình bạn treo, nếu bạn không getchar liên tục, bộ đệm tràn
          -Với putchar, khi dùng ngắt bạn có thể gọi hàm này liên tục và nó tự cập nhật vào bộ đệm, bộ đệm tự phát đi do đó không ảnh hưởng tốc độ
          -Vấn đề quá nhỏ để tranh luận dông dài, bạn cứ thử khắc biết . Tạo một chuơng trình mẫu và thử với cổng COM máy tính đâu phải là chuyện khó phải không? Thân mến
          Đã bỏ nghề về quê chăn gà...

          Comment


          • #6
            vì như từ đầu đã nói mình đang chập chững học c nên chưa hiểu lằm. có tranh luận mới hiểu ra vấn đề. chứ uart bên asm tui đã giao tiếp với plc và biến tần rồi. một lần nữa cám ơn sự nhiệt tình của bạn!

            Comment


            • #7
              Nguyên văn bởi Katecka Xem bài viết
              -Với getchar, có dùng ngắt hay không bạn vẫn phải dùng getchar thường xuyên để nhận. Nếu bộ đệm rỗng, chuơng trình bạn treo, nếu bạn không getchar liên tục, bộ đệm tràn
              -Với putchar, khi dùng ngắt bạn có thể gọi hàm này liên tục và nó tự cập nhật vào bộ đệm, bộ đệm tự phát đi do đó không ảnh hưởng tốc độ
              -Vấn đề quá nhỏ để tranh luận dông dài, bạn cứ thử khắc biết . Tạo một chuơng trình mẫu và thử với cổng COM máy tính đâu phải là chuyện khó phải không? Thân mến
              Mình cũng đang gặp vấn đề vơi USART, mình truyền nhận giữa hai con AVR có dùng ngắt và bộ đệm nhưng vẫn thường xuyên bị treo. Bạn có cách nào khắc phục vấn đề này chỉ mình với.

              Comment

              Về tác giả

              Collapse

              hotuanhai Tìm hiểu thêm về hotuanhai

              Bài viết mới nhất

              Collapse

              • nhathung1101
                Trả lời cho Tiếng Anh cho người Việt
                bởi nhathung1101
                Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                hôm nay, 22:18
              • dinhthuong80
                Trả lời cho Tiếng Anh cho người Việt
                bởi dinhthuong80
                Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                hôm nay, 14:51
              • dinhthuong80
                Trả lời cho Tiếng Anh cho người Việt
                bởi dinhthuong80
                Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                hôm nay, 14:39
              • dinhthuong80
                Trả lời cho Tiếng Anh cho người Việt
                bởi dinhthuong80
                Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                hôm nay, 14:28
              • bqviet
                Trả lời cho Tiếng Anh cho người Việt
                bởi bqviet
                Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                Hôm qua, 20:26
              • mèomướp
                Trả lời cho Tiếng Anh cho người Việt
                bởi mèomướp
                Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                Hôm qua, 12:32
              • vi van pham
                Trả lời cho Tiếng Anh cho người Việt
                bởi vi van pham
                Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                20-02-2025, 21:31
              • bqviet
                Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                bởi bqviet
                Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                20-02-2025, 17:22
              • dinhthuong80
                Trả lời cho Tiếng Anh cho người Việt
                bởi dinhthuong80
                Tiếng Anh, Đình Thường phải nói là rất tệ, khiến việc giao tiếp đời thường thôi cũng khó chứ nói gì về kĩ thuật.

                Nhân tiện, nhờ các bạn, các bác xem giúp thư ĐT viết thế này liệu có thể gửi tới địa chỉ nhận hay chăng,...
                20-02-2025, 11:52
              • vi van pham
                Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                bởi vi van pham
                Uống rượu 1 mình, thấy trang này nhớ lại cách đây vài chục năm hàn thiếc với inox cực kỳ khó, phải dùng acid Hcl tác dụng lên kẻm Zn để có Zncl2 làm thuốc trợ hàn, lúc đó làm gì có acid Hcl và thuốc trợ hàn?

                Cái khó bó cái...
                19-02-2025, 23:05
              Đang tải...
              X