text:
Trang chủ
Giới thiệu
Nguyên nhân
Phòng ngừa
Điều trị
Vô sinh nam
Vô sinh nữ
Hỏi đáp - Chia sẻ
Sơ đồ trang
Xem nhiều trong tuần
Khi tinh trùng gặp trứng có biểu hiện gì ?
Rất nhiều chị em thắc mắc không biết khi trứng gặp tinh trùng có biểu hiện gì đồng nghĩa với những dấu hiệu mang thai sớm nhất gồm những gì...
" Linh Tự Đan" Chữa trị vô sinh tốt không?
Hỏi: Chào bác sĩ! Vợ chồng tôi lấy nhau đã hai năm nay rồi, một năm trước hai vợ chồng có đi khám tại bệnh viện và bác sĩ chuẩn đoán ti...
NGUY CƠ VÔ SINH NỮ TỪ VIỆC TRỨNG KHÔNG PHÁT TRIỂN
Chào bác sĩ! Em và chồng đã lấy nhau được hơn 6 tháng rồi, dù cho việc sinh hoạt của vợ chồng đều diễn ra bình thường nhưng vẫn không t...
Tinh trùng dị dạng có thụ thai được không ?
Xin hỏi: Vợ chồng tôi kết hôn đã hơn 2 năm nay mà chưa có con nên sốt ruột. Cả 2 vợ chồng đều đi khám và bác sĩ cho biết do tôi bị tin...
Bệnh viện 103 chữa vô sinh có hiệu quả không?
Chào mọi người, Em muốn muốn hỏi một chút về việc khám chữa vô sinh ở bệnh viện 103. Em có tìm hiểu khá nhiều về các phương pháp và địa...
Đánh giá bài thuốc chữa yếu sinh lý Mãnh lực trường xuân
Hiệu quả điều trị cao, bền vững, dễ sử dụng và phù hợp với phần đa nam giới ở nhiều lứa tuổi,… là những gì mà các chuyên gia, bác sĩ đầu ng...
Chi phí thụ tinh nhân tạo tốn hết bao nhiêu tiền?
Chào mọi người, Em tên Hoài, em xin lập topic về thụ tinh nhân tạo mong mọi người chia sẻ kỹ hơn tất cả những thông tin và kinh nghiệm ...
Thiên Lực Đơn chữa yếu sinh lý có tốt không giá bao nhiêu?
Dùng Thiên Lực Đơn chữa bệnh yếu sinh lý có tốt không? Tôi thấy hiện nay trên thị trường có rất nhiều sản phẩm cả thuốc và thực phẩ...
Cách nhận biết dấu hiệu tinh trùng yếu
Làm thế nào để nhận biết dấu hiệu tinh trùng yếu ở nam giới. Tinh trùng yếu có thể nhận biết khi quan sát bằng mắt thường được không? Theo ...
Cách lấy mẫu tinh trùng để xét nghiệm ở bệnh viện
Lấy tinh trùng để xét nghiệm là việc làm cần thiết để đánh giá khả năng sinh sản của nam giới cũng như phục vụ cho thực hiện các phương phá...
Tweet
»
ĐIỀU TRỊ VÔ SINH HIẾM MUỘN
»
Thuốc điều trị bệnh vô sinh hiếm muộn
Thuốc điều trị bệnh vô sinh hiếm muộn
Thứ Sáu, 10 tháng 10, 2014
Hiện nay căn bệnh vô sinh hiếm muộn đang cướp đi niềm hạnh phúc được làm cha mẹ của biết bao cặp vợ chồng trên toàn thế giới. Nếu như trước đây vấn đề không sinh được con đều bị quy hết trách nhiệm lên đầu chị em phụ nữ thì ngày nay mọi người đã có nhận thức đúng đắn hơn về căn bệnh này. Không chỉ nữ giới mới bị vô sinh mà nam giới cũng có thể không thực hiện được chức năng sinh sản của mình. Nhờ sự tiến bộ của nền y học hiện đại mà các cặp vợ chồng chưa có con có nhiều hy vọng hơn trong việc điều trị bệnh vô sinh hiếm muộn thành công để hoàn thành ước muốn có con của mình. Trước khi quyết định phương pháp chữa trị cho một ca bệnh thì các bác sĩ phải tìm hiểu thật kỹ nguyên nhân gây bệnh để có biện pháp điều trị nhắm đúng mục đích sẽ mang lại hiệu quả cao hơn. Để hiểu rõ hơn về vấn đề này các bạn hãy tham khảo bài viết dưới đây nhé.
1.Các nguyên nhân gây bệnh vô sinh hiếm muộn
Ở nam giới
Dựa theo các thông số của tinh dịch đồ mà các bác sĩ đã chia vô sinh nam ra thành các nhóm với những nguyên nhân khác nhau, bao gồm:
Nhóm hoàn toàn không có tinh dịch hoặc tinh dịch rất ít
Hiện tượng này xảy ra ở những nam giới bị rối loạn tâm lý; người bị suy tinh hoàn hoàn toàn; nghiện thuốc lá; mắc các bệnh lý đái tháo đường, chấn thương tuỷ sống hay bị tắc ống dẫn tinh. Bên cạnh đó vẫn còn một số trường hợp không thể tìm ra nguyên nhân gây bệnh
Nhóm vô sinh do không có tinh trùng trong tinh dịch
Thường gặp ở nam giới bị suy tuyến sinh dục; mang nhiễm sắc thể bất thường; bị nhiễm các hoá chất độc hại hay mắc các bệnh như giãn tĩnh mạch tinh;viêm tinh hoàn, xoắn tinh hoàn, tắc ống dẫn tinh... đều ảnh hưởng đến quá trình sinh sản tinh trùng trong tinh dịch.
Nhóm vô sinh do tinh trùng ít và yếu
Tinh trùng ít và yếu sẽ làm giảm khả năng di chuyển và giảm cơ hội để tinh trùng bơi vào tử cung thụ tinh với trứng. Nguyên nhân của tình trạng này thường là do nam giới mắc các bệnh nội tiết, tinh hoàn ẩn, tác dụng phụ khi sử dụng một số loại thuốc, ảnh hưởng của nhiệt lên tinh hoàn ; một số trường hợp cũng không tìm ra nguyên nhân
Nhóm có tinh dịch đồ bình thường nhưng vẫn vô sinh
Không kể đến những trục trặc trong chức năng sinh sản của người vợ thì nam giới có thói quen giao hợp bất thường , người vợ hoặc người chồng có kháng thể kháng tinh trùng hay cực đầu của tinh trùng không bình thường ... là những lý do giải thích tại sao tinh dịch đồ của người nam bình thường nhưng vẫn bị vô sinh
Tinh trùng có đủ số lượng nhưng chết hoàn toàn
Tinh trùng bị chết thường là do nó có cấu trúc bất thường ; lâu ngày không quan hệ; nhiễm trùng đường sinh dục; có kháng thể kháng tinh trùng ở người vợ hoặc người chồng; giãn tĩnh mạch tinh hoặc tắc ống dẫn tinh...
Ở nữ giới
Có rất nhiều nguyên nhân gây vô sinh cho nữ giới như:
- Chất nhày ở cổ tử cung ít hoặc cấu trúc cổ tử cung bị tổn thương khiến cho tinh trùng khó sống sót cũng như bơi vào tử cung thụ tinh với trứng. Những phụ nữ từng sinh nở,nạo phá thai, sảy thai, viêm cổ tử cung, đốt lạnh hay đốt điện cổ tử cung thường gặp phải trục trặc này.
- Phụ nữ bị tắc ống dẫn chứng: thường xảy ra ở phụ nữ mắc các bệnh như viêm cổ tử cung, viêm tử cung, viêm ống dẫn trứng, người từng đặt vòng, nạo phá thai , sảy thai hoặc thai ngoài tử cung...Ngoài ra còn có một số nguyên nhân khác như dị dạng tử cung, u xơ tử cung, tiền căn phẫu thuật vùng chậu, viêm vùng chậu…
- Bị rối loạn rụng trứng: nguyên nhân dẫn đến hiện tượng này là do phụ nữ bị rối loạn tâm lý, hoạt động thể thao quá mức, béo phì, buồng trứng đa nang, suy buồng trứng...
- Ngoài ra một số nguyên nhân sau cũng có thể gây vô sinh , hiếm muộn cho nữ giới như lớn tuổi,;uống thuốc tránh thai kéo dài;đặt dụng cụ tử cung gây viêm nhiễm tử cung; mắc các bệnh lý liên quan đến nội tiết như bệnh bướu cổ, bệnh gan, thận, thượng thận
2.Điều trị bệnh vô sinh hiếm muộn
Trước tiên các bác sĩ sẽ tìm hiểu nguyên nhân gây bệnh ở người chồng hoặc người vợ để tìm ra cách điều trị vô sinh hiếm muộn hiệu quả nhất. Đối với một số nguyên nhân gây vô sinh có thể khắc phục được bằng thuốc thì bác sĩ sẽ kê loại thuốc điều trị bệnh cho bệnh nhân uống. Ngược lại với các nguyên nhân mà bác sĩ nhận thấy việc dùng thuốc cũng không giải quyết được vấn đề thì cần thiết phải nhờ đến các biện pháp hỗ trợ sinh sản dưới đây:
1. Thụ tinh nhân tạo (Artificial insemination (IUI))
Tinh trùng sau khi được lọc rửa và lựa chọn sẽ được bơm trực tiếp vào buồng tử cung của người vợ. Ưu điểm của nó là giảm thiểu được các biến chứng như đau, co thắt tử cung, nhiễm trùng... và nó cho tỉ lệ thụ thai cao.
Thụ tinh nhân tạo được chỉ định cho những trường hợp nam giới bị vô sinh, bất thường phóng tinh; nữ giới có vần đề về tử cung,lạc nội mạc tử cung, rối loạn phóng noãn hoặc những trường hợp vô sinh mà không rõ nguyên nhân
2. Chuyển giao tử qua ống dẫn trứng (Gamete intrafallopian transfer (GIFT)
Trứng và tinh trùng sẽ được cho gặp nhau và tạo thành phôi thai ở bên ngoài. Sau đó phôi thai sẽ được cấy vào ống dẫn trứng của bà mẹ và đến thời điểm thích hợp nó sẽ tự động rơi xuống tử cung và làm tổ rồi phát triển thành thai nhi.
Thụ tinh trong ống nghiệm
3. Thụ tinh trong ống nghiệm (In vitro fertilization (IVF)
Các bác sĩ sẽ tiêm thuốc kích thích vào buồng trứng của người vợ để trứng chín và rụng với số lượng nhiều ( thông thường là 12 trứng ) ,những trứng này sẽ được lấy ra ngoài và nuôi trong ống nghiệm . Sau đó trứng và tinh trùng sẽ được trộn lẫn với nhau trên một cái dĩa thuỷ tinh để chúng phối hợp thành phôi bào. Phôi bào được nuôi trong khoảng 5 ngày. Đó là thời gian để các chuyên viên theo dõi để loại bỏ những phôi bào hư khuyết hay có mầm bệnh. Cuối cùng họ chọn một số phôi bào lành mạnh đặt nó trở lại trong tử cung của bà mẹ.
4. Tiêm tinh trùng vào bào tương trứng (Intracytoplasmic sperm injection (ICSI)
Bác sĩ sẽ lấy tinh trùng của người chồng ra và chọn lấy những tinh trùng khoẻ mạnh nhất để tiêm vào bào tương của trứng. Phương pháp này thường được chỉ định cho trường hợp vô sinh không rõ nguyên nhân hay vô sinh ở nam do tình trùng ít, yếu , bị dị dạng hay không có tính trùng do tắc nghẽn ống dẫn tinh
5. Chuyển hợp tử qua ống dẫn trứng (Zygote intrafallopian transfer (ZIFT)
Trong kỹ thuật này thì ngay sau khi tinh trùng kết hợp với trứng ở bên ngoài đến lúc hợp tử tăng trưởng từ 6 - 12 tế bào thì được chuyển ngay vào ống dẫn trứng của bà mẹ. Hợp tử sẽ phát triển thành phôi bào sau đó và di chuyển xuống tử cung của người mẹ để tiếp tục phát triển.
Trên đây là các nguyên nhân cũng như cách điều trị vô sinh hiếm muộn .Mỗi phương pháp điều trị đều có những ưu nhược điểm riêng và nó được chỉ định áp dụng cho từng trường hợp vô sinh cụ thể. Vì vậy mà khi muốn chữa vô sinh thì người bệnh nên đến các chuyên khoa có uy tín để bác sĩ thăm khám cụ thể để chọn ra cách chữa bệnh phù hợp nhất .
Chuyên mục:
ĐIỀU TRỊ VÔ SINH HIẾM MUỘN
Thuốc điều trị bệnh vô sinh hiếm muộn
Nếu bạn thấy hay thì hãy
và
để khích lệ tinh thần chia sẻ của tác giả BV "
Thuốc điều trị bệnh vô sinh hiếm muộn
"
Comments[ 0 ]
Đăng nhận xét
« Bài đăng Mới hơn
Trang chủ
Bài đăng Cũ hơn »
Home
|
Rss
Chữa trị vô sinh hiếm muộn
Thông tin bệnh vô sinh hiếm muộn và những phương pháp điều trị
Ghi rõ nguồn link bài viết khi sử dụng lại thông tin trên Website
chữa vô sinh
|
điều trị hiếm muộn
|
chữa xuất tinh sớm
|
roi loan cuong duong
Comments[ 0 ]
Đăng nhận xét

markdown:
Trang chủ
Giới thiệu
Nguyên nhân
Phòng ngừa
Điều trị
Vô sinh nam
Vô sinh nữ
Hỏi đáp - Chia sẻ
Sơ đồ trang
Xem nhiều trong tuần
Khi tinh trùng gặp trứng có biểu hiện gì ?
Rất nhiều chị em thắc mắc không biết khi trứng gặp tinh trùng có biểu hiện gì đồng nghĩa với những dấu hiệu mang thai sớm nhất gồm những gì...
" Linh Tự Đan" Chữa trị vô sinh tốt không?
Hỏi: Chào bác sĩ! Vợ chồng tôi lấy nhau đã hai năm nay rồi, một năm trước hai vợ chồng có đi khám tại bệnh viện và bác sĩ chuẩn đoán ti...
NGUY CƠ VÔ SINH NỮ TỪ VIỆC TRỨNG KHÔNG PHÁT TRIỂN
Chào bác sĩ! Em và chồng đã lấy nhau được hơn 6 tháng rồi, dù cho việc sinh hoạt của vợ chồng đều diễn ra bình thường nhưng vẫn không t...
Tinh trùng dị dạng có thụ thai được không ?
Xin hỏi: Vợ chồng tôi kết hôn đã hơn 2 năm nay mà chưa có con nên sốt ruột. Cả 2 vợ chồng đều đi khám và bác sĩ cho biết do tôi bị tin...
Bệnh viện 103 chữa vô sinh có hiệu quả không?
Chào mọi người, Em muốn muốn hỏi một chút về việc khám chữa vô sinh ở bệnh viện 103. Em có tìm hiểu khá nhiều về các phương pháp và địa...
Đánh giá bài thuốc chữa yếu sinh lý Mãnh lực trường xuân
Hiệu quả điều trị cao, bền vững, dễ sử dụng và phù hợp với phần đa nam giới ở nhiều lứa tuổi,… là những gì mà các chuyên gia, bác sĩ đầu ng...
Chi phí thụ tinh nhân tạo tốn hết bao nhiêu tiền?
Chào mọi người, Em tên Hoài, em xin lập topic về thụ tinh nhân tạo mong mọi người chia sẻ kỹ hơn tất cả những thông tin và kinh nghiệm ...
Thiên Lực Đơn chữa yếu sinh lý có tốt không giá bao nhiêu?
Dùng Thiên Lực Đơn chữa bệnh yếu sinh lý có tốt không? Tôi thấy hiện nay trên thị trường có rất nhiều sản phẩm cả thuốc và thực phẩ...
Cách nhận biết dấu hiệu tinh trùng yếu
Làm thế nào để nhận biết dấu hiệu tinh trùng yếu ở nam giới. Tinh trùng yếu có thể nhận biết khi quan sát bằng mắt thường được không? Theo ...
Cách lấy mẫu tinh trùng để xét nghiệm ở bệnh viện
Lấy tinh trùng để xét nghiệm là việc làm cần thiết để đánh giá khả năng sinh sản của nam giới cũng như phục vụ cho thực hiện các phương phá...
Tweet
»
ĐIỀU TRỊ VÔ SINH HIẾM MUỘN
»
Thuốc điều trị bệnh vô sinh hiếm muộn
Thuốc điều trị bệnh vô sinh hiếm muộn
Thứ Sáu, 10 tháng 10, 2014
Hiện nay căn bệnh vô sinh hiếm muộn đang cướp đi niềm hạnh phúc được làm cha mẹ của biết bao cặp vợ chồng trên toàn thế giới. Nếu như trước đây vấn đề không sinh được con đều bị quy hết trách nhiệm lên đầu chị em phụ nữ thì ngày nay mọi người đã có nhận thức đúng đắn hơn về căn bệnh này. Không chỉ nữ giới mới bị vô sinh mà nam giới cũng có thể không thực hiện được chức năng sinh sản của mình. Nhờ sự tiến bộ của nền y học hiện đại mà các cặp vợ chồng chưa có con có nhiều hy vọng hơn trong việc điều trị bệnh vô sinh hiếm muộn thành công để hoàn thành ước muốn có con của mình. Trước khi quyết định phương pháp chữa trị cho một ca bệnh thì các bác sĩ phải tìm hiểu thật kỹ nguyên nhân gây bệnh để có biện pháp điều trị nhắm đúng mục đích sẽ mang lại hiệu quả cao hơn. Để hiểu rõ hơn về vấn đề này các bạn hãy tham khảo bài viết dưới đây nhé.
1.Các nguyên nhân gây bệnh vô sinh hiếm muộn
Ở nam giới
Dựa theo các thông số của tinh dịch đồ mà các bác sĩ đã chia vô sinh nam ra thành các nhóm với những nguyên nhân khác nhau, bao gồm:
Nhóm hoàn toàn không có tinh dịch hoặc tinh dịch rất ít
Hiện tượng này xảy ra ở những nam giới bị rối loạn tâm lý; người bị suy tinh hoàn hoàn toàn; nghiện thuốc lá; mắc các bệnh lý đái tháo đường, chấn thương tuỷ sống hay bị tắc ống dẫn tinh. Bên cạnh đó vẫn còn một số trường hợp không thể tìm ra nguyên nhân gây bệnh
Nhóm vô sinh do không có tinh trùng trong tinh dịch
Thường gặp ở nam giới bị suy tuyến sinh dục; mang nhiễm sắc thể bất thường; bị nhiễm các hoá chất độc hại hay mắc các bệnh như giãn tĩnh mạch tinh;viêm tinh hoàn, xoắn tinh hoàn, tắc ống dẫn tinh... đều ảnh hưởng đến quá trình sinh sản tinh trùng trong tinh dịch.
Nhóm vô sinh do tinh trùng ít và yếu
Tinh trùng ít và yếu sẽ làm giảm khả năng di chuyển và giảm cơ hội để tinh trùng bơi vào tử cung thụ tinh với trứng. Nguyên nhân của tình trạng này thường là do nam giới mắc các bệnh nội tiết, tinh hoàn ẩn, tác dụng phụ khi sử dụng một số loại thuốc, ảnh hưởng của nhiệt lên tinh hoàn ; một số trường hợp cũng không tìm ra nguyên nhân
Nhóm có tinh dịch đồ bình thường nhưng vẫn vô sinh
Không kể đến những trục trặc trong chức năng sinh sản của người vợ thì nam giới có thói quen giao hợp bất thường , người vợ hoặc người chồng có kháng thể kháng tinh trùng hay cực đầu của tinh trùng không bình thường ... là những lý do giải thích tại sao tinh dịch đồ của người nam bình thường nhưng vẫn bị vô sinh
Tinh trùng có đủ số lượng nhưng chết hoàn toàn
Tinh trùng bị chết thường là do nó có cấu trúc bất thường ; lâu ngày không quan hệ; nhiễm trùng đường sinh dục; có kháng thể kháng tinh trùng ở người vợ hoặc người chồng; giãn tĩnh mạch tinh hoặc tắc ống dẫn tinh...
Ở nữ giới
Có rất nhiều nguyên nhân gây vô sinh cho nữ giới như:
- Chất nhày ở cổ tử cung ít hoặc cấu trúc cổ tử cung bị tổn thương khiến cho tinh trùng khó sống sót cũng như bơi vào tử cung thụ tinh với trứng. Những phụ nữ từng sinh nở,nạo phá thai, sảy thai, viêm cổ tử cung, đốt lạnh hay đốt điện cổ tử cung thường gặp phải trục trặc này.
- Phụ nữ bị tắc ống dẫn chứng: thường xảy ra ở phụ nữ mắc các bệnh như viêm cổ tử cung, viêm tử cung, viêm ống dẫn trứng, người từng đặt vòng, nạo phá thai , sảy thai hoặc thai ngoài tử cung...Ngoài ra còn có một số nguyên nhân khác như dị dạng tử cung, u xơ tử cung, tiền căn phẫu thuật vùng chậu, viêm vùng chậu…
- Bị rối loạn rụng trứng: nguyên nhân dẫn đến hiện tượng này là do phụ nữ bị rối loạn tâm lý, hoạt động thể thao quá mức, béo phì, buồng trứng đa nang, suy buồng trứng...
- Ngoài ra một số nguyên nhân sau cũng có thể gây vô sinh , hiếm muộn cho nữ giới như lớn tuổi,;uống thuốc tránh thai kéo dài;đặt dụng cụ tử cung gây viêm nhiễm tử cung; mắc các bệnh lý liên quan đến nội tiết như bệnh bướu cổ, bệnh gan, thận, thượng thận
2.Điều trị bệnh vô sinh hiếm muộn
Trước tiên các bác sĩ sẽ tìm hiểu nguyên nhân gây bệnh ở người chồng hoặc người vợ để tìm ra cách điều trị vô sinh hiếm muộn hiệu quả nhất. Đối với một số nguyên nhân gây vô sinh có thể khắc phục được bằng thuốc thì bác sĩ sẽ kê loại thuốc điều trị bệnh cho bệnh nhân uống. Ngược lại với các nguyên nhân mà bác sĩ nhận thấy việc dùng thuốc cũng không giải quyết được vấn đề thì cần thiết phải nhờ đến các biện pháp hỗ trợ sinh sản dưới đây:
1. Thụ tinh nhân tạo (Artificial insemination (IUI))
Tinh trùng sau khi được lọc rửa và lựa chọn sẽ được bơm trực tiếp vào buồng tử cung của người vợ. Ưu điểm của nó là giảm thiểu được các biến chứng như đau, co thắt tử cung, nhiễm trùng... và nó cho tỉ lệ thụ thai cao.
Thụ tinh nhân tạo được chỉ định cho những trường hợp nam giới bị vô sinh, bất thường phóng tinh; nữ giới có vần đề về tử cung,lạc nội mạc tử cung, rối loạn phóng noãn hoặc những trường hợp vô sinh mà không rõ nguyên nhân
2. Chuyển giao tử qua ống dẫn trứng (Gamete intrafallopian transfer (GIFT)
Trứng và tinh trùng sẽ được cho gặp nhau và tạo thành phôi thai ở bên ngoài. Sau đó phôi thai sẽ được cấy vào ống dẫn trứng của bà mẹ và đến thời điểm thích hợp nó sẽ tự động rơi xuống tử cung và làm tổ rồi phát triển thành thai nhi.
Thụ tinh trong ống nghiệm
3. Thụ tinh trong ống nghiệm (In vitro fertilization (IVF)
Các bác sĩ sẽ tiêm thuốc kích thích vào buồng trứng của người vợ để trứng chín và rụng với số lượng nhiều ( thông thường là 12 trứng ) ,những trứng này sẽ được lấy ra ngoài và nuôi trong ống nghiệm . Sau đó trứng và tinh trùng sẽ được trộn lẫn với nhau trên một cái dĩa thuỷ tinh để chúng phối hợp thành phôi bào. Phôi bào được nuôi trong khoảng 5 ngày. Đó là thời gian để các chuyên viên theo dõi để loại bỏ những phôi bào hư khuyết hay có mầm bệnh. Cuối cùng họ chọn một số phôi bào lành mạnh đặt nó trở lại trong tử cung của bà mẹ.
4. Tiêm tinh trùng vào bào tương trứng (Intracytoplasmic sperm injection (ICSI)
Bác sĩ sẽ lấy tinh trùng của người chồng ra và chọn lấy những tinh trùng khoẻ mạnh nhất để tiêm vào bào tương của trứng. Phương pháp này thường được chỉ định cho trường hợp vô sinh không rõ nguyên nhân hay vô sinh ở nam do tình trùng ít, yếu , bị dị dạng hay không có tính trùng do tắc nghẽn ống dẫn tinh
5. Chuyển hợp tử qua ống dẫn trứng (Zygote intrafallopian transfer (ZIFT)
Trong kỹ thuật này thì ngay sau khi tinh trùng kết hợp với trứng ở bên ngoài đến lúc hợp tử tăng trưởng từ 6 - 12 tế bào thì được chuyển ngay vào ống dẫn trứng của bà mẹ. Hợp tử sẽ phát triển thành phôi bào sau đó và di chuyển xuống tử cung của người mẹ để tiếp tục phát triển.
Trên đây là các nguyên nhân cũng như cách điều trị vô sinh hiếm muộn .Mỗi phương pháp điều trị đều có những ưu nhược điểm riêng và nó được chỉ định áp dụng cho từng trường hợp vô sinh cụ thể. Vì vậy mà khi muốn chữa vô sinh thì người bệnh nên đến các chuyên khoa có uy tín để bác sĩ thăm khám cụ thể để chọn ra cách chữa bệnh phù hợp nhất .
Chuyên mục:
ĐIỀU TRỊ VÔ SINH HIẾM MUỘN
Thuốc điều trị bệnh vô sinh hiếm muộn
Nếu bạn thấy hay thì hãy
và
để khích lệ tinh thần chia sẻ của tác giả BV "
Thuốc điều trị bệnh vô sinh hiếm muộn
"
Comments[ 0 ]
Đăng nhận xét
« Bài đăng Mới hơn
Trang chủ
Bài đăng Cũ hơn »
Home
|
Rss
Chữa trị vô sinh hiếm muộn
Thông tin bệnh vô sinh hiếm muộn và những phương pháp điều trị
Ghi rõ nguồn link bài viết khi sử dụng lại thông tin trên Website
chữa vô sinh
|
điều trị hiếm muộn
|
chữa xuất tinh sớm
|
roi loan cuong duong
## Comments[ 0 ]
## Đăng nhận xét


text:
Trang chủ
Giới thiệu
Nguyên nhân
Phòng ngừa
Điều trị
Vô sinh nam
Vô sinh nữ
Hỏi đáp - Chia sẻ
Sơ đồ trang
Xem nhiều trong tuần
Khi tinh trùng gặp trứng có biểu hiện gì ?
Rất nhiều chị em thắc mắc không biết khi trứng gặp tinh trùng có biểu hiện gì đồng nghĩa với những dấu hiệu mang thai sớm nhất gồm những gì...
" Linh Tự Đan" Chữa trị vô sinh tốt không?
Hỏi: Chào bác sĩ! Vợ chồng tôi lấy nhau đã hai năm nay rồi, một năm trước hai vợ chồng có đi khám tại bệnh viện và bác sĩ chuẩn đoán ti...
NGUY CƠ VÔ SINH NỮ TỪ VIỆC TRỨNG KHÔNG PHÁT TRIỂN
Chào bác sĩ! Em và chồng đã lấy nhau được hơn 6 tháng rồi, dù cho việc sinh hoạt của vợ chồng đều diễn ra bình thường nhưng vẫn không t...
Tinh trùng dị dạng có thụ thai được không ?
Xin hỏi: Vợ chồng tôi kết hôn đã hơn 2 năm nay mà chưa có con nên sốt ruột. Cả 2 vợ chồng đều đi khám và bác sĩ cho biết do tôi bị tin...
Bệnh viện 103 chữa vô sinh có hiệu quả không?
Chào mọi người, Em muốn muốn hỏi một chút về việc khám chữa vô sinh ở bệnh viện 103. Em có tìm hiểu khá nhiều về các phương pháp và địa...
Đánh giá bài thuốc chữa yếu sinh lý Mãnh lực trường xuân
Hiệu quả điều trị cao, bền vững, dễ sử dụng và phù hợp với phần đa nam giới ở nhiều lứa tuổi,… là những gì mà các chuyên gia, bác sĩ đầu ng...
Chi phí thụ tinh nhân tạo tốn hết bao nhiêu tiền?
Chào mọi người, Em tên Hoài, em xin lập topic về thụ tinh nhân tạo mong mọi người chia sẻ kỹ hơn tất cả những thông tin và kinh nghiệm ...
Thiên Lực Đơn chữa yếu sinh lý có tốt không giá bao nhiêu?
Dùng Thiên Lực Đơn chữa bệnh yếu sinh lý có tốt không? Tôi thấy hiện nay trên thị trường có rất nhiều sản phẩm cả thuốc và thực phẩ...
Cách nhận biết dấu hiệu tinh trùng yếu
Làm thế nào để nhận biết dấu hiệu tinh trùng yếu ở nam giới. Tinh trùng yếu có thể nhận biết khi quan sát bằng mắt thường được không? Theo ...
Cách lấy mẫu tinh trùng để xét nghiệm ở bệnh viện
Lấy tinh trùng để xét nghiệm là việc làm cần thiết để đánh giá khả năng sinh sản của nam giới cũng như phục vụ cho thực hiện các phương phá...
Tweet
»
Hỏi đáp - Chia sẻ
»
Thuốc tăng chất lượng tinh trùng nào tốt?
Thuốc tăng chất lượng tinh trùng nào tốt?
Thứ Hai, 25 tháng 4, 2016
Có cách nào tăng chất lượng tinh trùng tốt và nhanh nhất, thuốc tăng chất lượng tinh trùng nào tốt và an toàn nhất hiện nay?
Chào tất cả mọi người! Không biết có ai cũng đang quan tâm tới việc cải thiện chất lượng tinh trùng trong điều trị vô sinh hiếm muộn không ạ, cùng lập nhóm chia sẻ và trao đổi kinh nghiệm đi. Em năm nay 28 tuổi, chồng em 32 tuổi. Chúng em cưới nhau đã 2 năm mà chưa có em bé. Mới đây khi thấy sốt ruột quá nên cả 2 bọn em có đi khám và bác sĩ nói sức khỏe sinh sản của em hoàn toàn bình thường nhưng ông xã lại bị tinh trùng yếu nên khó thụ thai.
Theo tư vấn trong chế độ sinh hoạt nhằm tăng chất lượng tinh trùng là nên tăng cường tập thể dục, ăn uống đầy đủ chất dinh dưỡng và ưu tiên các loại thực phẩm có lợi cho cải thiện chất lượng tinh trùng, không uống rượu bia,.... chồng em đều tuân thủ cả. Em cũng thường xuyên tham khảo, tìm kiếm các món ăn bài thuốc giúp anh ấy mau chóng cải thiện chất lượng tinh trùng. Bác sĩ có dặn sau đó 1 tháng thì quay trở lại khám nhưng vẫn chưa nhận được kết quả khả quan và nói cần kiên nhẫn. Thú thực biết là không thể vội vàng muốn nhanh có kết quả là được nhưng cả 2 vợ chồng đều khá sốt ruột và lo lắng về tình trạng hiện tại nên không thể thoải mái được. Nghe mọi người nói nếu muốn làm tăng chất lượng tinh trùng không chỉ dựa vào ăn uống sinh hoạt và cần dùng thuốc bổ trợ. Do vậy em có tìm hiểu thêm về các loại thuốc và cách sử dụng thuốc tăng chất lượng tinh trùng để giúp ông xã.
Hiện tại qua tìm hiểu em thấy có khá nhiều đầu sản phẩm thuốc bổ trợ, cải thiện chất lượng tinh trùng có nguồn gốc khác nhau nhưng không biết đâu là loại thuốc tốt và an toàn. Em đang rất băn khoăn không biết nên chọn loại thuốc nào cho chồng sử dụng để cải thiện tình trạng hiện tại. Mọi người nếu ai có kinh nghiệm và từng sử dụng thuốc tăng chất lượng tinh trùng thì chỉ giùm em với nhé. Đâu là thuốc tốt và an toàn? Mong mọi người giúp đỡ! Em cảm ơn rất nhiều và mong tin mọi người.
Nguyễn Thị Ngọc Anh - Ninh Bình.
Chuyên mục:
Hỏi đáp - Chia sẻ
Thuốc tăng chất lượng tinh trùng nào tốt?
Nếu bạn thấy hay thì hãy
và
để khích lệ tinh thần chia sẻ của tác giả BV "
Thuốc tăng chất lượng tinh trùng nào tốt?
"
Comments[ 0 ]
Đăng nhận xét
« Bài đăng Mới hơn
Trang chủ
Bài đăng Cũ hơn »
Home
|
Rss
Chữa trị vô sinh hiếm muộn
Thông tin bệnh vô sinh hiếm muộn và những phương pháp điều trị
Ghi rõ nguồn link bài viết khi sử dụng lại thông tin trên Website
chữa vô sinh
|
điều trị hiếm muộn
|
chữa xuất tinh sớm
|
roi loan cuong duong
Comments[ 0 ]
Đăng nhận xét

markdown:
Trang chủ
Giới thiệu
Nguyên nhân
Phòng ngừa
Điều trị
Vô sinh nam
Vô sinh nữ
Hỏi đáp - Chia sẻ
Sơ đồ trang
Xem nhiều trong tuần
Khi tinh trùng gặp trứng có biểu hiện gì ?
Rất nhiều chị em thắc mắc không biết khi trứng gặp tinh trùng có biểu hiện gì đồng nghĩa với những dấu hiệu mang thai sớm nhất gồm những gì...
" Linh Tự Đan" Chữa trị vô sinh tốt không?
Hỏi: Chào bác sĩ! Vợ chồng tôi lấy nhau đã hai năm nay rồi, một năm trước hai vợ chồng có đi khám tại bệnh viện và bác sĩ chuẩn đoán ti...
NGUY CƠ VÔ SINH NỮ TỪ VIỆC TRỨNG KHÔNG PHÁT TRIỂN
Chào bác sĩ! Em và chồng đã lấy nhau được hơn 6 tháng rồi, dù cho việc sinh hoạt của vợ chồng đều diễn ra bình thường nhưng vẫn không t...
Tinh trùng dị dạng có thụ thai được không ?
Xin hỏi: Vợ chồng tôi kết hôn đã hơn 2 năm nay mà chưa có con nên sốt ruột. Cả 2 vợ chồng đều đi khám và bác sĩ cho biết do tôi bị tin...
Bệnh viện 103 chữa vô sinh có hiệu quả không?
Chào mọi người, Em muốn muốn hỏi một chút về việc khám chữa vô sinh ở bệnh viện 103. Em có tìm hiểu khá nhiều về các phương pháp và địa...
Đánh giá bài thuốc chữa yếu sinh lý Mãnh lực trường xuân
Hiệu quả điều trị cao, bền vững, dễ sử dụng và phù hợp với phần đa nam giới ở nhiều lứa tuổi,… là những gì mà các chuyên gia, bác sĩ đầu ng...
Chi phí thụ tinh nhân tạo tốn hết bao nhiêu tiền?
Chào mọi người, Em tên Hoài, em xin lập topic về thụ tinh nhân tạo mong mọi người chia sẻ kỹ hơn tất cả những thông tin và kinh nghiệm ...
Thiên Lực Đơn chữa yếu sinh lý có tốt không giá bao nhiêu?
Dùng Thiên Lực Đơn chữa bệnh yếu sinh lý có tốt không? Tôi thấy hiện nay trên thị trường có rất nhiều sản phẩm cả thuốc và thực phẩ...
Cách nhận biết dấu hiệu tinh trùng yếu
Làm thế nào để nhận biết dấu hiệu tinh trùng yếu ở nam giới. Tinh trùng yếu có thể nhận biết khi quan sát bằng mắt thường được không? Theo ...
Cách lấy mẫu tinh trùng để xét nghiệm ở bệnh viện
Lấy tinh trùng để xét nghiệm là việc làm cần thiết để đánh giá khả năng sinh sản của nam giới cũng như phục vụ cho thực hiện các phương phá...
Tweet
»
Hỏi đáp - Chia sẻ
»
Thuốc tăng chất lượng tinh trùng nào tốt?
Thuốc tăng chất lượng tinh trùng nào tốt?
Thứ Hai, 25 tháng 4, 2016
Có cách nào tăng chất lượng tinh trùng tốt và nhanh nhất, thuốc tăng chất lượng tinh trùng nào tốt và an toàn nhất hiện nay?
Chào tất cả mọi người! Không biết có ai cũng đang quan tâm tới việc cải thiện chất lượng tinh trùng trong điều trị vô sinh hiếm muộn không ạ, cùng lập nhóm chia sẻ và trao đổi kinh nghiệm đi. Em năm nay 28 tuổi, chồng em 32 tuổi. Chúng em cưới nhau đã 2 năm mà chưa có em bé. Mới đây khi thấy sốt ruột quá nên cả 2 bọn em có đi khám và bác sĩ nói sức khỏe sinh sản của em hoàn toàn bình thường nhưng ông xã lại bị tinh trùng yếu nên khó thụ thai.
Theo tư vấn trong chế độ sinh hoạt nhằm tăng chất lượng tinh trùng là nên tăng cường tập thể dục, ăn uống đầy đủ chất dinh dưỡng và ưu tiên các loại thực phẩm có lợi cho cải thiện chất lượng tinh trùng, không uống rượu bia,.... chồng em đều tuân thủ cả. Em cũng thường xuyên tham khảo, tìm kiếm các món ăn bài thuốc giúp anh ấy mau chóng cải thiện chất lượng tinh trùng. Bác sĩ có dặn sau đó 1 tháng thì quay trở lại khám nhưng vẫn chưa nhận được kết quả khả quan và nói cần kiên nhẫn. Thú thực biết là không thể vội vàng muốn nhanh có kết quả là được nhưng cả 2 vợ chồng đều khá sốt ruột và lo lắng về tình trạng hiện tại nên không thể thoải mái được. Nghe mọi người nói nếu muốn làm tăng chất lượng tinh trùng không chỉ dựa vào ăn uống sinh hoạt và cần dùng thuốc bổ trợ. Do vậy em có tìm hiểu thêm về các loại thuốc và cách sử dụng thuốc tăng chất lượng tinh trùng để giúp ông xã.
Hiện tại qua tìm hiểu em thấy có khá nhiều đầu sản phẩm thuốc bổ trợ, cải thiện chất lượng tinh trùng có nguồn gốc khác nhau nhưng không biết đâu là loại thuốc tốt và an toàn. Em đang rất băn khoăn không biết nên chọn loại thuốc nào cho chồng sử dụng để cải thiện tình trạng hiện tại. Mọi người nếu ai có kinh nghiệm và từng sử dụng thuốc tăng chất lượng tinh trùng thì chỉ giùm em với nhé. Đâu là thuốc tốt và an toàn? Mong mọi người giúp đỡ! Em cảm ơn rất nhiều và mong tin mọi người.
Nguyễn Thị Ngọc Anh - Ninh Bình.
Chuyên mục:
Hỏi đáp - Chia sẻ
Thuốc tăng chất lượng tinh trùng nào tốt?
Nếu bạn thấy hay thì hãy
và
để khích lệ tinh thần chia sẻ của tác giả BV "
Thuốc tăng chất lượng tinh trùng nào tốt?
"
Comments[ 0 ]
Đăng nhận xét
« Bài đăng Mới hơn
Trang chủ
Bài đăng Cũ hơn »
Home
|
Rss
Chữa trị vô sinh hiếm muộn
Thông tin bệnh vô sinh hiếm muộn và những phương pháp điều trị
Ghi rõ nguồn link bài viết khi sử dụng lại thông tin trên Website
chữa vô sinh
|
điều trị hiếm muộn
|
chữa xuất tinh sớm
|
roi loan cuong duong
## Comments[ 0 ]
## Đăng nhận xét

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: application/xhtml+xml

Server: GSE

X-Content-Type-Options: nosniff

Cache-Control: private, max-age=0

X-XSS-Protection: 1; mode=block

Content-Type: text/html; charset=UTF-8


text:
Ngắt trong 8051
Mục tiêu
Kết thúc bài học này, bạn có thể:
Ø Phân biệt cơ chế ngắt với hỏi vòng
Ø Nắm rõ các loại ngắt trong 8051
· Ngắt timer/counter
· Ngắt ngoài
· Ngắt truyền thông nối tiếp
Ø Lập trình các ngắt
· Trình phục vụ ngắt là gì?
· Cho phép ngắt và cấm ngắt
· Thiết lập mức ưu tiên của các ngắt
Giới thiệu
Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service Routine).
Trong bài này ta tìm hiểu khái niệm ngắt và lập trình các ngắt trong bộ vi điều khiển 8051.
1. Các ngắt của 8051
1.1 Phân biệt cơ chế ngắt với hỏi vòng
Lấy ví dụ: Bộ vi điều khiển đóng vai trò như một vị bác sĩ, các thiết bị kiểm soát bởi vi điều khiển được coi như các bệnh nhân cần được bác sĩ phục vụ.
Bình thường, vị bác sĩ sẽ hỏi thăm lần lượt từng bệnh nhân, đến lượt bệnh nhân nào được hỏi thăm nếu có bệnh thì sẽ được bác sĩ phục vụ, xong lại đến lượt bệnh nhân khác, và tiếp tục đến hết. Điều này tương đương với phương pháp thăm dò - hỏi vòng (Polling) trong vi điều khiển.
Cứ như thế, nếu chúng ta có 10 bệnh nhân, thì bệnh nhân thứ 10 dù muốn hay không cũng phải xếp hàng chờ đợi 09 bệnh nhân trước đó. Giả sử trường hợp bệnh nhân thứ 10 cần cấp cứu thì sao? Anh ta sẽ gặp nguy cấp trước khi đến lượt hỏi thăm của bác sĩ mất! L Nhưng, nếu anh ta sử dụng phương pháp “ngắt” thì mọi chuyện sẽ ổn ngay. Lúc đó vị bác sĩ sẽ ngừng mọi công việc hiện tại của mình, và tiến hành phục vụ trường hợp khẩn cấp này ngay lập tức, xong việc bác sĩ lại trở về tiếp tục công việc đang dở. Điều này tương đương với phương pháp ngắt (Interrupts) trong vi điều khiển.
Trở lại với bộ vi điều khiển của chúng ta: 1 bộ vi điều khiển có thể phục vụ cho nhiều thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các ngắt (Interrupts) và thăm dò (polling):
Ø Trong phương pháp sử dụng ngắt: mỗi khi có một thiết bị bất kỳ cần được phục vụ thì nó báo cho bộ vi điều khiển bằng cách gửi một tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt. Chương trình ngắt được gọi là trình phục vụ ngắt ISR (Interrupt Service Routine) hay còn gọi là trình quản lý ngắt (Interrupt handler). Sau khi phục vụ ngắt xong, bộ vi xử lý lại quay trở lại điểm bị ngắt trước đó và tiếp tục thực hiện công việc.
Ø Trong phương pháp thăm dò: bộ vi điều khiển kiểm tra liên tục tình trạng của tất cả các thiết bị, nếu thiết bị nào có yêu cầu thì nó dừng lại phục vụ thiết bị đó. Sau đó nó tiếp tục kiểm tra tình trạng của thiết bị kế tiếp cho đến hết. Phương pháp thăm dò rất đơn giản, nhưng nó lại rất lãng phí thời gian để kiểm tra các thiết bị kể cả khi thiết bị đó không cần phục vụ. Trong trường hợp có quá nhiều thiết bị thì phương án thăm dò tỏ ra không hiệu quả, gây ra chậm trễ cho các thiết bị cần phục vụ.
Điểm mạnh của phương pháp ngắt là:
Ø Bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng một thời điểm). Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên mức ưu tiên được gán cho nó. Đối với phương pháp thăm dò thì không thể gán mức ưu tiên cho các thiết bị vì nó kiểm tra tất cả mọi thiết bị theo kiểu hỏi vòng.
Ø Quan trọng hơn, trong phương pháp ngắt thì bộ vi điều khiển còn có thể che (làm lơ) một yêu cầu phục vụ của thiết bị. Điều này lại một lần nữa không thể thực hiện được trong phương pháp thăm dò.
Ø Lý do quan trọng nhất mà phương pháp ngắt được ưu chuộng là vì nó không lãng phí thời gian cho các thiết bị không cần phục vụ. Còn phương pháp thăm dò làm lãng phí thời gian của bộ vi điều khiển bằng cách hỏi dò từng thiết bị kể cả khi chúng không cần phục vụ.
Ví dụ trong các bộ định thời được bàn đến ở các bài trước ta đã dùng một vòng lặp kiểm tra và đợi cho đến khi bộ định thời quay trở về 0. Trong ví dụ đó, nếu sử dụng ngắt thì ta không cần bận tâm đến việc kiểm tra cờ bộ định thời, do vậy không lãng phí thời gian để chờ đợi, trong khi đó ta có thể làm việc khác có ích hơn.
1.2 Sáu ngắt trong 8051
Thực tế chỉ có 5 ngắt dành cho người dùng trong 8051 nhưng các nhà sản xuất nói rằng có 6 ngắt vì họ tính cả lệnh RESET. Sáu ngắt của 8051 được phân bố như sau:
1. RESET: Khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về địa chỉ 0000H. Đây là địa chỉ bật lại nguồn.
2. 2 ngắt dành cho các bộ định thời: 1 cho Timer0 và 1 cho Timer1. Địa chỉ tương ứng của các ngắt này là 000BH và 001BH.
3. 2 ngắt dành cho các ngắt phần cứng bên ngoài: chân 12 (P3.2) và 13 (P3.3) của cổng P3 là các ngắt phần cứng bên ngoài INT0 và INT1 tương ứng. Địa chỉ tương ứng của các ngắt ngoài này là 0003H và 0013H.
4. Truyền thông nối tiếp: có 1 ngắt chung cho cả nhận và truyền dữ liệu nối tiếp. Địa chỉ của ngắt này trong bảng vector ngắt là 0023H.
1.3 Trình phục vụ ngắt
Đối với mỗi ngắt thì phải có một trình phục vụ ngắt (ISR) hay trình quản lý ngắt để đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt. Khi một ngắt được gọi thì bộ vi điều khiển sẽ chạy trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị trí cố định trong bộ nhớ để giữ địa chỉ ISR của nó. Nhóm vị trí bộ nhớ được dành riêng để lưu giữ địa chỉ của các ISR được gọi là bảng vector ngắt. Xem Hình 1.
Hình 1: Bảng vector ngắt của 8051.
Trong lập trình C trên Keil c cho 8051, chúng ta khai báo trình phục vụ ngắt theo cấu trúc sau:
Void Name (void) interrupt X //( X: là số thứ tự của ngắt )
{
// chương trình phục vụ ngắt
}
Khi đó địa chỉ ngắt sẽ được tự động tính bằng:
Interrupt Address = (X * 8) + 3
1.4 Quy trình khi thực hiện một ngắt
Khi kích hoạt một ngắt bộ vi điều khiển thực hiện các bước sau:
Ø Nó hoàn thành nốt lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp vào ngăn xếp.
Ø Nó cũng lưu tình trạng hiện tại của tất cả các ngắt.
Ø Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng vector ngắt, nơi lưu giữ địa chỉ của một trình phục vụ ngắt.
Ø Bộ vi điều khiển nhận địa chỉ ISR từ bảng vector ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR và trở về chương trình chính từ ngắt.
Ø Khi bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 02 byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện tiếp các lệnh từ địa chỉ đó.
1.5 Các bước cho phép và cấm ngắt
Khi bật lại nguồn thì tất cả mọi ngắt đều bị cấm (bị che), có nghĩa là không có ngắt nào được bộ vi điều khiển đáp ứng trừ khi chúng được kích hoạt.
Các ngắt phải được kích hoạt bằng phần mềm để bộ vi điều khiển đáp ứng chúng. Có một thanh ghi được gọi là thanh ghi cho phép ngắt IE (Interrupt Enable) – ở địa chỉ A8H chịu trách nhiệm về việc cho phép và cấm các ngắt. Hình 2 trình bày chi tiết về thanh ghi IE.
Hình 2: Thanh ghi cho phép ngắt IE.
Để cho phép một ngắt ta phải thực hiện các bước sau:
Ø Nếu EA = 0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng của nó trong IE có giá trị cao. Bit D7 - EA của thanh ghi IE phải được bật lên cao để cho phép các bit còn lại của thanh ghi hoạt động được.
Ø Nếu EA = 1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit tương ứng của chúng trong IE có mức cao.
Để hiểu rõ điểm quan trọng này ta hãy xét ví dụ 1.
Ví dụ 1:
Hãy lập trình cho 8051:
a) cho phép ngắt nối tiếp, ngắt Timer0 và ngắt phần cứng ngoài 1 (EX1)
b) cấm ngắt Timer0
c) sau đó trình bày cách cấm tất cả mọi ngắt chỉ bằng một lệnh duy nhất.
Lời giải:
#include<at89x51.h>
main()
{
//a)
IE=0x96; //1001 0110: lệnh này tương đương với 4 lệnh phía dưới
EA=1; //Cho phép sử dụng ngắt
ES=1; //Cho phép ngắt cổng nối tiếp
ET0=1; //Cho phép ngắt timer0
EX1=1; //Cho phép ngắt ngoài 1
//b)
ET0=0; //Cấm ngắt timer0
//c)
EA=0; //Cấm tất cả các ngắt
while(1)
{
//Chương trình chính
//…
}
}
2. Lập trình các ngắt bộ định thời
Trong các bài trước ta đã biết cách sử dụng các bộ định thời Timer0 và Timer1 bằng phương pháp thăm dò. Trong phần này ta sẽ sử dụng các ngắt để lập trình cho các bộ định thời của 8051.
2.1 Cờ quay về 0 của bộ định thời và ngắt
Chúng ta đã biết rằng cờ bộ định thời TF được bật lên cao khi bộ định thời đạt giá trị cực đại và quay về 0 (Roll - over). Trong các bài trước chúng ta cũng chỉ ra cách kiểm tra cờ TF bằng một vòng lặp. Trong khi thăm dò cờ TF thì ta phải đợi cho đến khi cờ TF được bật lên. Vấn đề với phương pháp này là bộ vi điều khiển bị trói buộc trong khi chờ cờ TF được bật và không thể làm được bất kỳ việc gì khác.
Sử dụng các ngắt sẽ giải quyết được vấn đề này và tránh được sự trói buộc bộ vi điều khiển. Nếu bộ ngắt định thời trong thanh ghi IE được phép thì mỗi khi nó quay trở về 0 bộ vi điều khiển sẽ bị ngắt, bất chấp nó đang thực hiện việc gì và nhảy tới bảng vector ngắt để phục vụ ISR. Bằng cách này thì bộ vi điều khiển có thể làm những công việc khác cho đến khi nó được thông báo rằng bộ định thời đã quay về 0. Xem hình 3 và ví dụ 2.
Hình 3: Ngắt bộ định thời TF0 và TF1.
Ví dụ 2:
Hãy viết chương trình nhận liên tục dữ liệu 8 Bit ở cổng P0 và gửi nó đến cổng P1 trong khi nó cùng lúc tạo ra một sóng vuông chu kỳ 200ms trên chân P2.1. Hãy sử dụng bộ Timer0 để tạo ra sóng vuông, tần số của 8051 là XTAL = 11.0592MHz.
Lời giải:
Chu kỳ 200ms, vậy nửa chu kỳ là 100ms.
Ta có: 100ms/1,085ms=92.
Suy ra giá trị cần nạp cho timer0 là: -92 <=> A4H. Ta sử dụng timer0 8 bit.
#include<at89x51.h> //khai báo thu viện cho VÐK 89x51
main()
{
TMOD=0x02; //chọn timer0, chế độ 2, 8Bit tự nạp lại
TL0=0xA4; //nạp giá trị cho TL0
TH0=0xA4; //nạp giá trị cho TH0
TR0=1; //khởi động timer0
IE=0x82; //cho phép ngắt timer0
while(1) //vòng lặp vô hạn
{
P1=~P0; //Cập nhật giá trị cho cổng P1 từ P0.
}
}
void songvuong(void) interrupt 1 //Khai báo trình phục vụ ngắt cho timer0
{
TR0=0; //Ngừng timer0
P2_1=~P2_1; //Đảo trạng thái chân P2_1.
TR0=1; //Khởi động timer0
//Không cần xóa cờ TF0, 8051 tự động xóa.
}
Hình 4: Mô phỏng trên proteus: cập nhật liên tục cổng P1 từ P0, trong khi tạo xung ở chân P2.1
Hình 5: Sóng vuông hiển thị trên Oscilloscope
Hãy để ý những điểm dưới đây của chương trình trong ví dụ 2:
1. Chúng ta cho phép ngắt bộ Timer0 với lệnh IE=0x82; trong chương trình chính main().
2. Trong khi dữ liệu ở cổng P0 được nhận vào và chuyển liên tục sang cổng P1 thì mỗi khi bộ Timer0 trở về 0, cờ TF0 được bật lên và bộ vi điều khiển thoát ra khỏi hàm main() và đi đến địa chỉ 000BH để thực hiện ISR gắn liền với bộ Timer0.
3. Trong trình phục vụ ngắt ISR của Timer0 ta thấy rằng không cần đến lệnh xóa cờ TF0 của timer0. Lý do này là vì 8051 đã tự xoá cờ TF0 ngay khi thoát khỏi ISR.
Ví dụ 3:
Hãy viết lại chương trình ở ví dụ 2 để tạo sóng vuông với mức cao kéo dài 1085ms và mức thấp dài 15ms với giả thiết tần số XTAL = 11.0592MHz. Hãy sử dụng bộ định thời Timer1.
Lời giải:
Vì 1085ms/1.085ms=1000 nên ta cần sử dụng chế độ 1 của bộ định thời Timer1.
Các giá trị cần nạp cho timer1 là:
1085/1.085=1000 , -1000óFC18H
15/1.085=14 , -14óFFF2H
#include<at89x51.h>
bit a=0;
main()
{
TMOD=0x10; //chọn timer1, chế độ 1, 16Bit
TL1=0x18; //nạp giá trị cho TL1
TH1=0xFC; //nạp giá trị cho TH1
TR1=1; //khoi dong timer1
IE=0x88; //cho phép ngat timer1
while(1) //vòng lặp vô hạn
{
P1=~P0; //Cập nhật cổng P1
}
}
void songvuong(void) interrupt 3 //Khai báo trình phục vụ ngắt timer1
{
TR1=0; //Dừng timer1
if(a==0) //Nếu Xung vuông đang ở mức thấp
{
P2_1=1; //Bật xung vuông lên cao
a=1; //Đặt lại bit kiểm tra
TL1=0x18; //Nạp lại TL1: Ứng với mức trễ phần cao
TH1=0xFC; //Nạp lại TH1
}
Else //Nếu Xung vuông đang ở mức cao
{
P2_1=0; //Lật xung xuống thấp
a=0; //Đặt lại bit kiểm tra
TL1=0xF2; //Nạp lại TL1: Ứng với mức trễ phần thấp TH1=0xFF; //Nạp lại TH1
}
TR1=1; //Khởi động lại timer1
//Không cần xóa cờ TF1, 8051 tự động xóa
}
Hình 6: Sóng vuông hiển thị trên Oscilloscope
Lưu ý: Các xung được tạo ra ở các ví dụ trên không thật sự chính xác, vì chưa tính đến hao phí của các lệnh cài đặt.
3 Lập trình các ngắt phần cứng bên ngoài
Bộ vi điều khiển 8051 có 2 ngắt phần cứng bên ngoài ở chân 12 (P3.2) và chân 13 (P3.3) gọi là ngắt INT0 và INT1.
Như đã nói ở trên thì chúng được phép và bị cấm bằng việc sử dụng thanh ghi IE. Nhưng cấu hình cho ngắt ngoài có phần phức tạp hơn.Có hai mức kích hoạt cho các ngắt phần cứng ngoài: Ngắt theo mức và ngắt theo sườn.
Hình 7: Ngắt ngoài INT0 và INT1
Dưới đây là mô tả hoạt động của mỗi loại.
3.1 Ngắt theo mức
Ở chế độ ngắt theo mức thì các chân INT0 và INT1 bình thường ở mức cao và nếu một tín hiệu ở mức thấp được cấp tới thì chúng ghi nhãn ngắt. Sau đó bộ vi điều khiển dừng tất cả mọi công việc nó đang thực hiện và nhảy đến bảng vector ngắt để phục vụ ngắt. Đây là chế độ ngắt mặc định khi cấp nguồn cho 8051.
Tín hiệu mức thấp tại chân INTx phải được lấy đi trước khi thực hiện lệnh cuối cùng của trình phục vụ ngắt, nếu không một ngắt khác sẽ lại được tạo ra, và vi điều khiển sẽ thực hiện ngắt liên tục.
Để rõ hơn chúng ta hãy xem ví dụ 4.
Ví dụ 4:
Giả sử chân INT1 được nối đến công tắc bình thường ở mức cao. Mỗi khi nó ấn xuống thấp phải bật một đèn LED ở chân P1.3 (bình thường Led tắt), khi nó được bật lên nó phải sáng vài giây. Chừng nào công tắc được giữ ở trạng thái thấp đèn LED phải sáng liên tục.
Lời giải:
#include<at89x51.h> //Khai báo thư viện cho VĐK 89x51
main() //Chương trình chính
{
IE=0x84; //cho phép ngắt ngoài 1
while(1) //vòng lặp vô hạn
{
//không làm gì
}
}
void nutan(void) interrupt 2 //Khai báo trình phục vụ ngắt ngoài 1
{ //(mặc định là ngắt theo mức)
int a=50000; //Biến đếm trễ
P1_3=0; //Cho Led sáng
while(a--){} //Trễ cho Led sáng vài giây
P1_3=1; //Tắt Led
//Không cần xóa cờ ngắt
}
Hình 8: Ấn công tắc xuống sẽ làm cho đèn LED sáng một thời gian.
Hình 9: Nhưng nếu công tắc được giữ ở trạng thái ấn thì đèn LED sáng liên tục.
Lưu ý:
· Trong chương trình trên bộ vi điều khiển quay vòng liên tục trong vòng lặp while(1) của chương trình chính. Mỗi khi công tắc trên chân P3.3 (INT1) được kích hoạt thì bộ vi điều khiển thoát khỏi vòng lặp và nhảy đến bảng vector ngắt tại địa chỉ 0013H. Trình ISR cho INT1 bật đèn LED lên giữ nó một lúc và tắt nó trước khi trở về. Nếu trong lúc nó thực hiện lệnh cuối cùng để quay trở về từ ISR mà chân INT1 vẫn còn ở mức thấp thì bộ vi điều khiển khởi tạo lại ngắt, ngắt lại xảy ra 1 lần nữa.
· Do vậy, để giải quyết vấn đề này thì chân INT1 phải được đưa lên cao trước thời điểm lệnh cuối cùng của ngắt được thực hiện.
· Có một cách khác để giải quyết triệt để vấn đề trên: đó là sử dụng ngắt theo sườn. Khi đó với mỗi 1 lần ấn phím, dù thế nào ngắt cũng chỉ thực hiện 1 lần.
· Trước khi tìm hiểu ngắt theo sườn là gì? Ta hãy xem qua ngắt theo mức hoạt động như thế nào.
Ø Trích mẫu ngắt theo mức
Các chân P3.2 và P3.3 bình thường được dùng cho vào/ra nếu các Bit INT0 và INT1 trong thanh ghi IE không được kích hoạt. Sau khi các ngắt phần cứng trong thanh gi IE được kích hoạt thì bộ vi điều khiển duy trì trích mẫu trên chân INTx đối với tín hiệu mức thấp 1 lần trong 1 chu trình máy.
Theo bảng dữ liệu từ nhà sản xuất của bộ vi điều khiển thì “chân ngắt phải được giữ ở mức thấp cho đến khi bắt đầu thực hiện trình phục vụ ngắt ISR. Nếu chân INTx được đưa trở lại mức cao trước khi bắt đầu thực hiện ISR thì sẽ chẳng có ngắt nào xảy ra”. Do vậy, để bảo đảm việc kích hoạt ngắt phần cứng tại các chân INTx phải đảm bảo rằng thời gian tồn tại tín hiệu mức thấp là khoảng 4 chu trình máy và không được bé hơn, nếu không đủ lâu thì ngắt không được thực hiện.
Tuy nhiên trong quá trình kích hoạt ngắt theo mức thấp nên nó lại phải đưa lên mức cao trước khi ISR thực hiện lệnh cuối cùng và lại theo bảng dữ liệu từ nhà sản xuất thì “nếu chân INTx vẫn ở mức thấp sau lệnh cuối cùng của trình phục vụ ngắt thì một ngắt khác lại sẽ được kích hoạt”. Điều này do một thực tế là ngắt theo mức không được chốt.
Hình 10: Thời gian tối thiểu của xung ngắt theo mức thấp (XTAL = 11.0592MHz)
3.2 Ngắt theo sườn
Ngắt theo sườn là ngắt sẽ xảy ra khi có một sườn âm xuất hiện trên các chân ngắt của vi điều khiển. Điều này làm cho ngắt theo sườn khắc phục được nhược điểm của ngắt theo mức như ta đã thấy ở trên.
Để kích hoạt chế độ ngắt theo sườn thì chúng ta phải viết chương trình cài đặt cho các bit của thanh ghi TCON:
Hình 11: Thanh ghi TCON.
Ø Các Bit IT0 và IT1
Các bit TCON.0 và TCON.2 được coi như là các bit IT0 và IT1 tương ứng. Đây là các bit xác định kiểu ngắt theo sườn xung hay theo mức xung của các ngắt phần cứng trên chân INT0 và INT1 tương ứng. Khi bật lại nguồn cả 2 bit này đều có mức 0 để biến chúng thành ngắt theo tín hiệu mức thấp. Lập trình viên có thể điều khiển một trong số chúng lên cao để chuyển ngắt phần cứng bên ngoài thành ngắt theo sườn.
Ø Các Bit IE0 và IE1
Các bit TCON.1 và TCON.3 còn được gọi là IE0 và IE1 tương ứng. Các bit này được 8051 dùng để bám kiểu ngắt theo sườn xung, nếu các bit IT0 và IT1 bằng 0 thì có nghĩa là các ngắt phần cứng là ngắt theo mức thấp và các bit IE0 và IE1 sẽ không dùng đến. Các Bit IE0 và IE1 chỉ được 8051 dùng để chốt sườn xung từ cao xuống thấp trên các chân INT0 và INT1. Khi có chuyển dịch sườn xung trên chân INT0 (hay INT1) thì 8051 đánh dấu (bật lên cao) các bit IEx trên thanh ghi TCON và nhảy đến bảng vector ngắt và bắt đầu thực hiện trình phục vụ ngắt ISR. Trong khi 8051 thực hiện ISR thì không có một sườn xung nào được ghi nhận trên chân INT0 (hay INT1) để ngăn mọi ngắt trong ngắt. Chỉ trong khi thực hiện lệnh cuối của trình phục vụ ngắt ISR thì các bit IEx mới được 8051 tự động xóa, và các chân ngắt lại hoạt động bình thường.
Ta thấy rằng các bit IE0 và IE1 được 8051 sử dụng bên trong để báo có một ngắt đang được xử lý hay không. Hay nói cách khác là lập trình viên không phải quan tâm đến các bit này.
Ø Các Bit TR0 và TR1
Đây là những bit D4 và D6 (hay TCON.4 và TCON.6) của thanh ghi TCON. Các bit này đã được giới thiệu ở các bài trước, chúng được dùng để khởi động và dừng các bộ định thời Timer0 và Timer1 tương ứng.
Ø Các Bit TF0 và TF1
Các bit này là D5 (TCON.5) và D7 (TCON.7) của thanh ghi TCON mà đã được giới thiệu ở các bài trước. Chúng được sử dụng bởi các bộ Timer0 và Timer1 tương ứng để báo rằng các bộ định thời bị tràn hay quay về không.
Để hiểu rõ sự khác biệt của ngắt theo sườn âm, ta xét ví dụ 5. Chú ý rằng sự khác nhau duy nhất giữa ví dụ 5 và ví dụ 4 là ở lệnh chuyển ngắt INT1 về kiểu ngắt theo sườn. Khi sườn âm của tín hiệu được cấp đến chân INT1 thì đèn LED sẽ bật lên một lúc. Đèn LED có thời gian sáng phụ thuộc vào độ trễ bên trong ISR của INT1. Trong ví dụ 4 do bản chất ngắt theo mức của ngắt thì đèn LED còn sáng chừng nào tín hiệu ở chân INT1 vẫn còn ở mức thấp. Nhưng trong ví dụ 5 này để bật lại đèn LED thì xung ở chân INT1 phải được đưa lên cao rồi sau đó bị hạ xuống thấp để tạo ra một sườn âm làm kích hoạt ngắt.
Ví dụ 5:
#include<at89x51.h> //Khai báo thư viện cho VĐK 89x51
main() //Chương trình chính
{
IE=0x84; //cho phép ngắt ngoài 1
IT1=1; //Thiết lập ngắt ngoài 1 theo sườn âm
while(1) //vòng lặp vô hạn
{
//không làm gì
}
}
void nutan(void) interrupt 2 //Khai báo trình phục vụ ngắt ngoài 1
{ //(mặc định là ngắt theo mức)
int a=50000; //Biến đếm trễ
P1_3=0; //Cho Led sáng
while(a--){} //Trễ cho Led sáng vài giây
P1_3=1; //Tắt Led
//Không cần xóa cờ ngắt
}
Hình 12:mô phỏng ngắt ngoài 1 theo sườn âm:Dù công tắc được giữ, cũng chỉ có 1 ngắt xảy ra.
Ø Trình mẫu ngắt theo sườn
Trước khi kết thúc phần này ta cần trả lời câu hỏi: vậy thì ngắt theo sườn được trích mẫu thường xuyên như thế nào? Trong các ngắt theo sườn, nguồn xung phải giữ ở mức cao tối thiểu là 1 chu kỳ máy, và xung thấp cũng phải kéo dài 1 chu kỳ máy nữa để đảm bảo bộ vi điều khiển nhìn thấy được sự chuyển dịch từ cao xuống thấp của sườn âm.
Hình 13: Thời hạn xung tối thiểu để phát hiện ra các ngắt theo sườn âm với tần số XTAL = 11.0592MHz
Sườn âm của xung được chốt bởi 8051 và được giữ bởi thanh ghi TCON. Các bit TCON.1 (IE0) và TCON.3 (IE1) giữ các sườn được chốt của chân INT0 và INT1 tương ứng như chỉ ra trên hình 11. Chúng hoạt động như các cờ “ngắt đang được phục vụ” (Interrupt-in-server). Khi một cờ “ngắt đang được phục vụ” bật lên thì nó báo rằng ngắt hiện nay đang được xử lý và trên chân INTx này sẽ không có ngắt nào được đáp ứng chừng nào ngắt này chưa được phục vụ xong. Đây giống như tín hiệu báo bận ở máy điện thoại.
Ngoài ra cần phải nhấn mạnh 2 điểm dưới đây khi quan tâm đến các bit IE0 và IE1 của thanh ghi TCON:
· Khi các trình phục vụ ngắt ISR kết thúc: Các Bit IE0 và IE1 được tự động xoá để báo rằng ngắt được hoàn tất và 8051 sẵn sàng đáp ứng ngắt khác trên chân đó. Để ngắt khác được nhận và thì tín hiệu trên chân đó phải trở lại mức cao và sau đó nhảy xuống thấp để được phát hiện như một ngắt theo sườn âm.
· Trong thời gian trình phục vụ ngắt đang được thực hiện thì chân INTx bị làm ngơ, 8051 không quan tâm đến nó có bao nhiêu lần chuyển dịch từ cao xuống thấp. Trong thực tế điều này có được là do các bit IEx. Vì lý do này mà các bit IEx được gọi là các cờ báo “ngắt đang được phục vụ”, cờ này sẽ lên cao khi 1 sườn âm được phát hiện trên chân INTx và giữ ở mức cao trong toàn bộ quá trình thực hiện ISR. Nó chỉ bị xoá sau lệnh cuối cùng của ISR. Do vậy, ta cũng sẽ không bao giờ cần đến các lệnh xoá cờ này trong trình phục vụ ngắt đối với các ngắt cứng INT0 và INT1.
4 Lập trình ngắt truyền thông nối tiếp
Trong các bài trước chúng ta đã nghiên cứu về truyền thông nối tiếp của 8051. Tất cả các ví dụ trong ấy đều sử dụng phương pháp thăm dò (polling). Ở chương này chúng ta sẽ khám phá phương pháp truyền thông nối tiếp dựa trên ngắt.
4.1 Các cờ RI và TI và các ngắt
Như đã nói ở bài trước thì cờ ngắt truyền TI (Transfer interrupt) được bật lên khi bit cuối cùng của khung dữ liệu - bit stop được truyền đi, báo rằng thanh ghi SBUF sẵn sàng truyền byte kế tiếp. Trong trường hợp cờ RI (Receive Interrupt) thì nó được bật lên khi toàn bộ khung dữ liệu kể cả bit stop đã được nhận.
Chừng nào còn nói về truyền thông nối tiếp thì tất cả mọi khái niệm trên đây đều áp dụng giống như nhau cho dù sử dụng phương pháp thăm dò hay sử dụng phương pháp ngắt. Sự khác nhau duy nhất giữa hai phương pháp này là ở cách phục vụ quá trình truyền thông nối tiếp như thế nào:
Ø Trong phương pháp thăm dò thì chúng ta phải đợi cho cờ (TI hay RI) bật lên và trong lúc chờ đợi thì ta không thể làm gì được cả.
Ø Còn trong phương pháp ngắt thì ta được báo khi 8051 đã nhận được một byte hoặc nó sẵn sàng truyền byte kế tiếp và ta có thể làm các công việc khác trong khi chờ truyền thông nối tiếp được thực hiện.
Trong 8051 chỉ có một ngắt dành riêng cho truyền thông nối tiếp. Ngắt này được dùng cho cả truyền và nhận dữ liệu. Nếu bit ngắt truyền thông ES - IE.4 trong thanh ghi IE được phép, thì khi 1 trong 2 cờ RI hoặc TI bật lên, 8051 sẽ nhận được ngắt và nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H trong bảng vector ngắt để thực hiện nó. Trong trình ISR này chúng ta phải kiểm tra các cờ TI và RI để xem cờ nào gây ra ngắt để đáp ứng một cách phù hợp (xem ví dụ 6).
Hình 14: Ngắt truyền thông có thể do hai cờ TI và RI gọi.
4.2 Sử dụng cổng COM nối tiếp trong 8051
Trong các ứng dụng, ngắt nối tiếp chủ yếu được sử dụng để nhận dữ liệu và không bao giờ được sử dụng để truyền dữ liệu nối tiếp. Điều này giống như việc báo chuông để ta biết và nhận điện thoại vì ta không thể biết trước được lúc nào có điện thoại, còn nếu muốn gọi điện thoại thì ta không cần đổ chuông để báo trước.
Ví dụ 6:
Hãy viết chương trình ngắt để 8051 nhận dữ liệu từ cổng nối tiếp COM và gửi đến cổng P0. Giả thiết tần số XTAL là 11.0592MHz và tốc độ baud 9600.
Lời giải:
#include<at89x51.h> //Khai báo thư viện cho 89c51
main() //Chương trình chính
{
TMOD=0x20; //Chọn Timer1, chế độ 2
TH1=0xFD; //Cài đặt tốc độ baud 9600
SCON=0x50; //0101 0000: Chọn chế độ 1, Cho phép nhận
TR1=1; //Khởi động Timer1
IE=0x90; //cho phép ngắt truyền thông nối tiếp
while(1) //Vòng lặp vô hạn
{
}
}
void nhandulieu(void) interrupt 4 //Khai báo ISR truyền thông nối tiếp
{
if(RI==1) //Kiểm tra có phải là ngắt nhận dữ liệu không
{
P0=SBUF; //Gửi dữ liệu đến cổng P0
RI=0; //Xóa cờ nhận dữ liệu nối tiếp RI
}
}
Hình 15: Mô phỏng nhận các ký tự 0,1,2,3,4, từ máy tính, gửi đến Port0.
Trong ví dụ trên ta chú ý đến vai trò của cờ RI. Trong trình phục vụ ngắt nối tiếp, ta phải kiểm tra cả cờ TI và cờ RI vì cả hai đều có thể gọi ngắt truyền thông nối tiếp, hay nói cách khác là chỉ có một ngắt cho cả truyền và nhận.
4.3 Xoá cờ RI và TI trước khi thoát khỏi ngắt truyền thông nối tiếp
Để ý rằng lệnh cuối cùng trước khi trở về từ ISR là lệnh xoá các cờ RI và TI. Điều này tương phản với ngắt ngoài và ngắt bộ định thời là đều được 8051 xoá các cờ.
5. Các mức ưu tiên ngắt trong 8051
5.1 Các mức ưu tiên trong quá trình bật lại nguồn
Khi 8051 được cấp nguồn thì các mức ưu tiên ngắt được gán theo Hình 16. Từ hình này ta thấy ví dụ nếu các ngắt phần cứng ngoài 0 và 1 được kích hoạt cùng một lúc thì ngắt ngoài 0 sẽ được đáp ứng trước. Chỉ sau khi ngắt INT0 đã được phục vụ xong thì INT1 mới được phục vụ vì INT1 có mức ưu tiên thấp hơn. Trong thực tế sơ đồ mức ưu tiên ngắt trong bảng chỉ là một quy trình thăm dò, trong đó 8051 thăm dò các ngắt theo trình tự cho trong hình 16 và đáp ứng chúng một cách phù hợp.
Hình 17: Thanh ghi mức ưu tiên ngắt IP: Bit ưu tiên = 1 là mức ưu tiên cao, Bit ưu tiên = 0 là mức ưu tiên thấp.
- Bit D7 và D6 -- chưa dùng.
- Bit D5 hay PT2 là Bit ưu tiên ngắt Timer2 (dùng cho 8052)
- Bit D4 hay PS là Bit ưu tiên ngắt cổng nối tiếp
- Bit D3 hay PT1 là Bit ưu tiên ngắt Timer1
- Bit D2 hay PX1 là mức ưu tiên ngắt ngoài 1
- Bit D1 hay PT0 là mức ưu tiên ngắt Timer 0
- Bit D0 hay PX0 là mức ưu tiên ngắt ngoài 0
5.2 Thiết lập mức ưu tiên ngắt với thanh ghi IP
Chúng ta có thể thay đổi trình tự trong hình 16 bằng cách gán mức ưu tiên cao hơn cho bất kỳ ngắt nào. Điều này được thực hiện bằng cách lập trình một thanh ghi gọi là thanh ghi mức ưu tiên ngắt IP (Interrupt Priority). Trên hình 17 là các bit của thanh ghi này. Khi bật lại nguồn thanh thi IP chứa hoàn toàn các số 0 để tạo ra trình tự ưu tiên ngắt theo Hình 16. Để một ngắt nào đó có mức ưu tiên cao hơn ta thực hiện đưa bit tương ứng lên cao.
Một điểm khác nữa cần được làm sáng tỏ là mức ưu tiên ngắt khi 2 hoặc nhiều bit ngắt trong thanh ghi IP được đặt lên cao: Trong trường hợp này thì trong khi các ngắt này có mức ưu tiên cao hơn các ngắt khác, chúng sẽ được phục vụ theo trình tự cho trong Hình 16.
5.3 Ngắt trong ngắt
Điều gì xảy ra nếu 8051 đang thực hiện một trình phục vụ ngắt thuộc một ngắt nào đó thì lại có một ngắt khác được kích hoạt? Trong những trường hợp như vậy thì 1 ngắt có mức ưu tiên cao hơn có thể ngắt 1 ngắt có mức ưu tiên thấp hơn. Đây gọi là ngắt trong ngắt. Trong 8051 một ngắt ưu tiên thấp có thể bị ngắt bởi một ngắt có mức ưu tiên cao hơn chứ không bị ngắt bởi một ngắt có mức ưu tiên thấp hơn. Mặc dù tất cả mọi ngắt đều được chốt và giữ bên trong nhưng không có ngắt mức thấp nào được CPU quan tâm ngay tức khắc, nếu 8051 chưa kết thúc phục vụ các ngắt mức cao.
5.4 Thu chộp ngắt bằng phần mềm (Triggering)
Có nhiều lúc ta cần kiểm tra một trình phục vụ ngắt bằng con đường mô phỏng. Điều này có thể được thực hiện bằng các lệnh đơn giản để thiết lập các ngắt lên cao và bằng cách đó buộc 8051 nhảy đến bảng vector ngắt. Ví dụ, nếu bit cho phép ngắt Timer1 trong thanh ghi IE được bật lên 1 thì một lệnh như TF1=1; sẽ ngắt 8051 ngừng thực hiện công việc đang làm bất kỳ và buộc nó nhảy đến bảng vector ngắt timer1. Hay nói cách khác, ta không cần đợi cho Timer1 quay trở về 0 mới tạo ra ngắt. Chúng ta có thể gây ra một ngắt bằng các lệnh đưa các bit của ngắt tương ứng lên cao.
Như vậy qua bài này chúng ta đã biết ngắt là một sự kiện bên trong hoặc bên ngoài gây ra ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần được phục vụ. Mỗi một ngắt có một chương trình đi kèm với nó được gọi là trình phục vụ ngắt ISR. Bộ vi điều khiển 8051 có 6 ngắt, trong đó có 5 ngắt người dùng có thể truy cập được. Đó là: 2 ngắt cho các thiết bị phần cứng bên ngoài INT0 và INT1, 2 ngắt cho các bộ định thời là TF0 và TF1 và 1 ngắt dành cho truyền thông nối tiếp.
8051 có thể được lập trình cho phép hoặc cấm một ngắt bất kỳ cũng như thiết lập mức ưu tiên cho nó theo yêu cầu của thuật toán ứng dụng.
Thanks!Trả lờiXóa
Đã có thêm bài ngắt.hiTrả lờiXóa
mong bạn viết thêm ngắt trong hệ điều hành rtx51tny thì đầy đủ hơn nữaTrả lờiXóa
Bài viết của bác rất hay, ngắn gọn và đủ hiểu. hiện em cũng làm được một số thứ rồi, nhưng em muốn thêm là khi chương trinh điều khiển từ PC không chạy nữa thì IC sẽ tắt hết những thiết bị nó đang điều khiển. không biết có làm được không, mong các bác tư vấn với.Trả lờiXóa
Chào vannam!Trả lờiXóa
Vậy trước hết bạn phải xác định được:
+ Khi nào thì chương trình trên PC sẽ không chạy nữa?
+ Làm sao để vi điều khiển nhận biết được điều đó?
Bạn có thể lập trình cho chương trình trên PC, sao cho trước khi tắt nó sẽ gửi xuống VĐK 1 tín hiệu thông báo chẳng hạn...
Cảm ơn bác Tjtanja đã cho em ý tưởng, nhưng em nghĩ không phải lúc nào chương trình cũng thoát một cách chính thống bằng cách click Exit hoặc nút [x]. đấy mới là điều em đang phải suy nghĩ. nếu từ chíp để kiểm tra chương trình còn chạy từ VĐK thì tốt nhất. mong các bác có ý tưởng khác gợi ý em với. Em xin chân thành cảm ơn các bác.Trả lờiXóa
Hoặc lúc chương trình đang chạy, thì định kỳ gửi tín hiệu thông báo xuống VĐK, nếu một thời gian dài mất tín hiệu đó thì có thể khẳng định chương trình đã ngừng hoạt động.Trả lờiXóa
Cảm ơn bác Tjtanja, em đang viết ngược lại ý tưởng của bác là gửi định kỳ 1 phút 1 lần từ VSL lên PC, nếu không thấy chương trình phản hồi lại thì sẽ dừng điều khiển thiết bị của VSL. em đang viết khi nào có kết quả sẽ báo cáo anh em sau vây.Trả lờiXóa
em muốn dừng 1 xung đang chạy thì almf cách nào?Trả lờiXóa
cảm ơn bác nhiều lắm !!Trả lờiXóa
hay quá,học phần này bằng ASM thấy khó hiểu nhưng khi lập trình bằng C thì thấy dễ hiểu hơn rôi! thank bác nhiều!Trả lờiXóa
Cho em xin tài liệu về ngắt ngoài.Trả lờiXóa
Thank!Trả lờiXóa
có ai cho mình biết kiến thức này từ quyển sách nào không.ThankTrả lờiXóa
Hay lam.thanksTrả lờiXóa
cám ơn bạn,bài viết rất hữu íchTrả lờiXóa
cám ơn bài viết của bạnTrả lờiXóa

markdown:
**Ngắt trong 8051** **Mục tiêu**
Kết thúc bài học này, bạn có thể:
Ø Phân biệt cơ chế ngắt với hỏi vòng
Ø Nắm rõ các loại ngắt trong 8051
· Ngắt timer/counter
· Ngắt ngoài
· Ngắt truyền thông nối tiếp
Ø Lập trình các ngắt
· Trình phục vụ ngắt là gì?
· Cho phép ngắt và cấm ngắt
· Thiết lập mức ưu tiên của các ngắt
**Giới thiệu** **Ngắt**( **Interrupt**) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt ( **ISR:**Interrupt Service Routine).
Trong bài này ta tìm hiểu khái niệm ngắt và lập trình các ngắt trong bộ vi điều khiển 8051.
**1. Các ngắt của 8051** **1.1** **Phân biệt cơ chế ngắt với hỏi vòng** **Lấy ví dụ:**Bộ vi điều khiển đóng vai trò như một vị bác sĩ, các thiết bị kiểm soát bởi vi điều khiển được coi như các bệnh nhân cần được bác sĩ phục vụ.
Bình thường, vị bác sĩ sẽ hỏi thăm lần lượt từng bệnh nhân, đến lượt bệnh nhân nào được hỏi thăm nếu có bệnh thì sẽ được bác sĩ phục vụ, xong lại đến lượt bệnh nhân khác, và tiếp tục đến hết. Điều này tương đương với phương pháp
**thăm dò**- **hỏi vòng**( **Polling**) trong vi điều khiển.
Cứ như thế, nếu chúng ta có 10 bệnh nhân, thì bệnh nhân thứ 10 dù muốn hay không cũng phải xếp hàng chờ đợi 09 bệnh nhân trước đó. Giả sử trường hợp bệnh nhân thứ 10 cần cấp cứu thì sao? Anh ta sẽ gặp nguy cấp trước khi đến lượt hỏi thăm của bác sĩ mất! L Nhưng, nếu anh ta sử dụng phương pháp “ngắt” thì mọi chuyện sẽ ổn ngay. Lúc đó vị bác sĩ sẽ ngừng mọi công việc hiện tại của mình, và tiến hành phục vụ trường hợp khẩn cấp này ngay lập tức, xong việc bác sĩ lại trở về tiếp tục công việc đang dở. Điều này tương đương với phương pháp
**ngắt**( **Interrupts**) trong vi điều khiển.
Trở lại với bộ vi điều khiển của chúng ta: 1 bộ vi điều khiển có thể phục vụ cho nhiều thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các
**ngắt**(Interrupts) và **thăm dò**(polling):
Ø
**Trong phương pháp sử dụng ngắt**: mỗi khi có một thiết bị bất kỳ cần được phục vụ thì nó báo cho bộ vi điều khiển bằng cách gửi một tín hiệu **ngắt**. Khi nhận được tín hiệu **ngắt**thì bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt. Chương trình ngắt được gọi là trình phục vụ ngắt **ISR**(Interrupt Service Routine) hay còn gọi là trình quản lý ngắt (Interrupt handler). Sau khi phục vụ ngắt xong, bộ vi xử lý lại quay trở lại điểm bị ngắt trước đó và tiếp tục thực hiện công việc.
Ø
**Trong phương pháp thăm dò**: bộ vi điều khiển kiểm tra liên tục tình trạng của tất cả các thiết bị, nếu thiết bị nào có yêu cầu thì nó dừng lại phục vụ thiết bị đó. Sau đó nó tiếp tục kiểm tra tình trạng của thiết bị kế tiếp cho đến hết. Phương pháp thăm dò rất đơn giản, nhưng nó lại rất lãng phí thời gian để kiểm tra các thiết bị **kể cả khi thiết bị đó không cần phục vụ**. Trong trường hợp có quá nhiều thiết bị thì phương án thăm dò tỏ ra không hiệu quả, gây ra chậm trễ cho các thiết bị cần phục vụ. **Điểm mạnh của phương pháp ngắt là:**
Ø Bộ vi điều khiển có thể phục vụ được rất
**nhiều thiết bị**(tất nhiên là không tại cùng một thời điểm). Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên **mức ưu tiên**được gán cho nó. Đối với phương pháp thăm dò thì không thể gán mức ưu tiên cho các thiết bị vì nó kiểm tra tất cả mọi thiết bị theo kiểu hỏi vòng.
Ø Quan trọng hơn, trong phương pháp ngắt thì bộ vi điều khiển còn có thể
**che**(làm lơ) một yêu cầu phục vụ của thiết bị. Điều này lại một lần nữa không thể thực hiện được trong phương pháp thăm dò.
Ø Lý do quan trọng nhất mà phương pháp ngắt được ưu chuộng là vì nó không lãng phí thời gian cho các thiết bị không cần phục vụ. Còn phương pháp thăm dò làm lãng phí thời gian của bộ vi điều khiển bằng cách hỏi dò từng thiết bị kể cả khi chúng không cần phục vụ.
Ví dụ trong các bộ định thời được bàn đến ở các bài trước ta đã dùng một vòng lặp kiểm tra và đợi cho đến khi bộ định thời quay trở về 0. Trong ví dụ đó, nếu sử dụng ngắt thì ta không cần bận tâm đến việc kiểm tra cờ bộ định thời, do vậy không lãng phí thời gian để chờ đợi, trong khi đó ta có thể làm việc khác có ích hơn.
**1.2 Sáu ngắt trong 8051**
Thực tế chỉ có
**5**ngắt dành cho người dùng trong 8051 nhưng các nhà sản xuất nói rằng có 6 ngắt vì họ tính cả lệnh RESET. Sáu ngắt của 8051 được phân bố như sau:
1.
**RESET**: Khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về địa chỉ **0000H**. Đây là địa chỉ bật lại nguồn.
2.
**2 ngắt dành cho các bộ định thời**: 1 cho **Timer0**và 1 cho **Timer1**. Địa chỉ tương ứng của các ngắt này là **000BH**và **001BH**.
3.
**2 ngắt dành cho các ngắt phần cứng bên ngoài:**chân 12 (P3.2) và 13 (P3.3) của cổng P3 là các ngắt phần cứng bên ngoài **INT0**và **INT1**tương ứng. Địa chỉ tương ứng của các ngắt ngoài này là **0003H**và **0013H**.
4.
**Truyền thông nối tiếp:**có 1 ngắt chung cho cả nhận và truyền dữ liệu nối tiếp. Địa chỉ của ngắt này trong bảng vector ngắt là **0023H**. **1.3 Trình phục vụ ngắt**
Đối với mỗi ngắt thì phải có một
**trình phục vụ ngắt**( **ISR**) hay trình quản lý ngắt để đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt. Khi một ngắt được gọi thì bộ vi điều khiển sẽ chạy trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị trí cố định trong bộ nhớ để giữ địa chỉ **ISR**của nó. Nhóm vị trí bộ nhớ được dành riêng để lưu giữ địa chỉ của các **ISR**được gọi là **bảng** **vector ngắt**. Xem **Hình 1**. **Hình 1:**Bảng vector ngắt của 8051.
Trong lập trình
**C**trên **Keil c**cho 8051, chúng ta khai báo **trình phục vụ ngắt**theo cấu trúc sau: **Void**Name **(** **void**) **interrupt**X //( **X**: là **số thứ tự của ngắt**)
{
// chương trình phục vụ ngắt
}
Khi đó địa chỉ ngắt sẽ được tự động tính bằng:
Interrupt Address = (X * 8) + 3
**1.4 Quy trình khi thực hiện một ngắt**
Khi kích hoạt một ngắt bộ vi điều khiển thực hiện các bước sau:
Ø Nó hoàn thành nốt lệnh đang thực hiện và lưu địa chỉ của
**lệnh kế tiếp**vào ngăn xếp.
Ø Nó cũng
**lưu tình trạng hiện tại**của tất cả các ngắt.
Ø Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là
**bảng** **vector ngắt**, nơi lưu giữ địa chỉ của một **trình phục vụ ngắt**.
Ø Bộ vi điều khiển nhận địa chỉ
**ISR**từ bảng vector ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của **ISR**và trở về chương trình chính từ ngắt.
Ø Khi bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 02 byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện tiếp các lệnh từ địa chỉ đó.
**1.5 Các bước cho phép và cấm ngắt** **Khi bật lại nguồn thì tất cả mọi ngắt đều bị cấm**(bị che), có nghĩa là không có ngắt nào được bộ vi điều khiển đáp ứng trừ khi chúng được kích hoạt.
Các ngắt phải được kích hoạt bằng phần mềm để bộ vi điều khiển đáp ứng chúng. Có một thanh ghi được gọi là thanh ghi cho phép ngắt
**IE**(Interrupt Enable) – ở địa chỉ A8H chịu trách nhiệm về việc cho phép và cấm các ngắt. **Hình 2**trình bày chi tiết về thanh ghi **IE**. **Hình 2:**Thanh ghi cho phép ngắt **IE**.
Để cho phép một ngắt ta phải thực hiện các bước sau:
Ø Nếu
**EA = 0**thì **không**có ngắt nào được đáp ứng cho dù bit tương ứng của nó trong **IE**có giá trị cao. **Bit D7** **- EA**của thanh ghi **IE**phải được bật lên cao để cho phép các bit còn lại của thanh ghi hoạt động được.
Ø Nếu
**EA = 1**thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit tương ứng của chúng trong **IE**có **mức cao**.
Để hiểu rõ điểm quan trọng này ta hãy xét
**ví dụ 1.** **Ví dụ 1:**
Hãy lập trình cho 8051:
a) cho phép
**ngắt nối tiếp**, **ngắt Timer0**và **ngắt phần cứng ngoài 1**(EX1)
b) cấm
**ngắt Timer0**
c) sau đó trình bày cách
**cấm tất cả mọi ngắt**chỉ bằng một lệnh duy nhất. **Lời giải:**
#include<at89x51.h>
main()
{
//a)
IE=0x96; //1001 0110: lệnh này tương đương với 4 lệnh phía dưới
EA=1; //Cho phép sử dụng ngắt
ES=1; //Cho phép ngắt cổng nối tiếp
ET0=1; //Cho phép ngắt timer0
EX1=1; //Cho phép ngắt ngoài 1
//b)
ET0=0; //Cấm ngắt timer0
//c)
EA=0; //Cấm tất cả các ngắt
while(1)
{
//Chương trình chính
//…
}
}
**2. Lập trình các ngắt bộ định thời**
Trong các bài trước ta đã biết cách sử dụng các bộ định thời
**Timer0**và **Timer1**bằng phương pháp **thăm dò**. Trong phần này ta sẽ sử dụng các **ngắt**để lập trình cho các bộ định thời của 8051. **2.1 Cờ quay về 0 của bộ định thời và ngắt**
Chúng ta đã biết rằng cờ bộ định thời
**TF**được bật lên cao khi bộ định thời đạt giá trị cực đại và quay về **0**(Roll - over). Trong các bài trước chúng ta cũng chỉ ra cách kiểm tra cờ **TF**bằng một vòng lặp. Trong khi thăm dò cờ **TF**thì ta phải đợi cho đến khi cờ **TF**được bật lên. Vấn đề với phương pháp này là bộ vi điều khiển bị trói buộc trong khi chờ cờ **TF**được bật và không thể làm được bất kỳ việc gì khác.
Sử dụng các
**ngắt**sẽ giải quyết được vấn đề này và tránh được sự trói buộc bộ vi điều khiển. Nếu bộ ngắt định thời trong thanh ghi **IE**được phép thì mỗi khi nó quay trở về 0 bộ vi điều khiển sẽ bị ngắt, bất chấp nó đang thực hiện việc gì và nhảy tới bảng vector ngắt để phục vụ **ISR**. Bằng cách này thì bộ vi điều khiển có thể làm những công việc khác cho đến khi nó được thông báo rằng bộ định thời đã quay về 0. Xem **hình 3**và **ví dụ 2**. **Hình 3:**Ngắt bộ định thời **TF0**và **TF1**. **Ví dụ 2:**
Hãy viết chương trình nhận liên tục dữ liệu 8 Bit ở cổng P0 và gửi nó đến cổng P1 trong khi nó cùng lúc tạo ra một sóng vuông chu kỳ 200ms trên chân P2.1. Hãy sử dụng bộ
**Timer0**để tạo ra sóng vuông, tần số của 8051 là XTAL = 11.0592MHz. **Lời giải:**
Chu kỳ 200ms, vậy nửa chu kỳ là 100ms.
Ta có:
**100** **m** **s/1,085** **m** **s=92**.
Suy ra giá trị cần nạp cho timer0 là:
**-92**<=> **A4H**. Ta sử dụng timer0 8 bit.
#include<at89x51.h> //khai báo thu viện cho VÐK 89x51
main()
{
TMOD=0x02; //chọn timer0, chế độ 2, 8Bit tự nạp lại
TL0=0xA4; //nạp giá trị cho TL0
TH0=0xA4; //nạp giá trị cho TH0
TR0=1; //khởi động timer0
IE=0x82; //cho phép ngắt timer0
while(1) //vòng lặp vô hạn
{
P1=~P0; //Cập nhật giá trị cho cổng P1 từ P0.
}
}
void songvuong(void) interrupt 1 //Khai báo trình phục vụ ngắt cho timer0
{
TR0=0; //Ngừng timer0
P2_1=~P2_1; //Đảo trạng thái chân P2_1.
TR0=1; //Khởi động timer0
//Không cần xóa cờ
**TF0**, 8051 tự động xóa.
}
**Hình 4:**Mô phỏng trên proteus: cập nhật liên tục cổng P1 từ P0, trong khi tạo xung ở chân P2.1 **Hình 5:**Sóng vuông hiển thị trên Oscilloscope
Hãy để ý những điểm dưới đây của chương trình trong
**ví dụ 2**:
1. Chúng ta cho phép ngắt bộ
**Timer0**với lệnh IE=0x82; trong chương trình chính main().
2. Trong khi dữ liệu ở cổng
**P0**được nhận vào và chuyển liên tục sang cổng **P1**thì mỗi khi bộ **Timer0**trở về 0, cờ **TF0**được bật lên và bộ vi điều khiển thoát ra khỏi hàm main() và đi đến địa chỉ **000BH**để thực hiện **ISR**gắn liền với bộ **Timer0**.
3. Trong trình phục vụ ngắt
**ISR**của **Timer0**ta thấy rằng không cần đến lệnh xóa cờ **TF0**của **timer0**. Lý do này là vì **8051 đã tự xoá cờ TF0 ngay khi thoát khỏi ISR.** **Ví dụ 3:**
Hãy viết lại chương trình ở
**ví dụ 2**để tạo sóng vuông với mức cao kéo dài 1085ms và mức thấp dài 15ms với giả thiết tần số XTAL = 11.0592MHz. Hãy sử dụng bộ định thời **Timer1**. **Lời giải:**
Vì 1085ms/1.085ms=1000 nên ta cần sử dụng chế độ 1 của bộ định thời Timer1.
Các giá trị cần nạp cho timer1 là:
1085/1.085=1000 ,
**-1000** **ó** **FC18H**
15/1.085=14 ,
**-14** **ó** **FFF2H**
#include<at89x51.h>
bit a=0;
main()
{
TMOD=0x10; //chọn timer1, chế độ 1, 16Bit
TL1=0x18; //nạp giá trị cho TL1
TH1=0xFC; //nạp giá trị cho TH1
TR1=1; //khoi dong timer1
IE=0x88; //cho phép ngat timer1
while(1) //vòng lặp vô hạn
{
P1=~P0; //Cập nhật cổng P1
}
}
void songvuong(void) interrupt 3 //Khai báo trình phục vụ ngắt timer1
{
TR1=0; //Dừng timer1
if(a==0) //Nếu Xung vuông đang ở mức thấp
{
P2_1=1; //Bật xung vuông lên cao
a=1; //Đặt lại bit kiểm tra
TL1=0x18; //Nạp lại TL1: Ứng với mức trễ phần cao
TH1=0xFC; //Nạp lại TH1
}
Else //Nếu Xung vuông đang ở mức cao
{
P2_1=0; //Lật xung xuống thấp
a=0; //Đặt lại bit kiểm tra
TL1=0xF2; //Nạp lại TL1: Ứng với mức trễ phần thấp TH1=0xFF; //Nạp lại TH1
}
TR1=1; //Khởi động lại timer1
//Không cần xóa cờ
**TF1**, 8051 tự động xóa
}
**Hình 6:**Sóng vuông hiển thị trên Oscilloscope **Lưu ý:**Các xung được tạo ra ở các ví dụ trên không thật sự chính xác, vì chưa tính đến hao phí của các lệnh cài đặt. **3 Lập trình các ngắt phần cứng bên ngoài**
Bộ vi điều khiển 8051 có 2 ngắt phần cứng bên ngoài ở chân 12 (
**P3.2**) và chân 13 ( **P3.3**) gọi là ngắt **INT0**và **INT1**.
Như đã nói ở trên thì chúng được phép và bị cấm bằng việc sử dụng thanh ghi
**IE**. Nhưng cấu hình cho ngắt ngoài có phần phức tạp hơn.Có hai mức kích hoạt cho các ngắt phần cứng ngoài: **Ngắt theo mức**và **ngắt theo sườn**. **Hình 7:**Ngắt ngoài **INT0**và **INT1**
Dưới đây là mô tả hoạt động của mỗi loại.
**3.1 Ngắt theo mức**
Ở chế độ ngắt theo mức thì các chân
**INT0**và **INT1**bình thường ở **mức cao**và nếu một tín hiệu ở **mức thấp**được cấp tới thì chúng ghi nhãn ngắt. Sau đó bộ vi điều khiển dừng tất cả mọi công việc nó đang thực hiện và nhảy đến bảng vector ngắt để phục vụ ngắt. Đây là chế độ ngắt **mặc định**khi cấp nguồn cho 8051. **Tín hiệu mức thấp tại chân INTx phải được lấy đi trước khi thực hiện lệnh cuối cùng của trình phục vụ ngắt, nếu không một ngắt khác sẽ lại được tạo ra, và vi điều khiển sẽ thực hiện ngắt liên tục.**
Để rõ hơn chúng ta hãy xem
**ví dụ 4**. **Ví dụ 4:**
Giả sử chân
**INT1**được nối đến công tắc bình thường ở mức cao. Mỗi khi nó **ấn xuống thấp**phải bật một đèn **LED**ở chân P1.3 (bình thường Led tắt), khi nó được bật lên nó phải sáng vài giây. Chừng nào công tắc được **giữ ở trạng thái thấp**đèn LED phải sáng liên tục. **Lời giải:**
#include<at89x51.h> //Khai báo thư viện cho VĐK 89x51
main() //Chương trình chính
{
IE=0x84; //cho phép ngắt ngoài 1
while(1) //vòng lặp vô hạn
{
//không làm gì
}
}
void nutan(void) interrupt 2 //Khai báo trình phục vụ ngắt ngoài 1
{ //(mặc định là ngắt theo mức)
int a=50000; //Biến đếm trễ
P1_3=0; //Cho Led sáng
while(a--){} //Trễ cho Led sáng vài giây
P1_3=1; //Tắt Led
//Không cần xóa cờ ngắt
}
**Hình 8:**Ấn công tắc xuống sẽ làm cho đèn LED sáng một thời gian. **Hình 9:**Nhưng nếu công tắc được giữ ở trạng thái ấn thì đèn LED sáng liên tục. **Lưu ý:**
· Trong chương trình trên bộ vi điều khiển quay vòng liên tục trong vòng lặp while(1) của chương trình chính. Mỗi khi công tắc trên chân
**P3.3**( **INT1**) được kích hoạt thì bộ vi điều khiển thoát khỏi vòng lặp và nhảy đến bảng vector ngắt tại địa chỉ 0013H. Trình **ISR**cho **INT1**bật đèn LED lên giữ nó một lúc và tắt nó trước khi trở về. Nếu trong lúc nó thực hiện lệnh cuối cùng để quay trở về từ **ISR**mà chân **INT1**vẫn còn ở **mức thấp**thì bộ vi điều khiển khởi tạo lại ngắt, ngắt lại xảy ra 1 lần nữa.
· Do vậy, để giải quyết vấn đề này thì chân
**INT1**phải được đưa lên cao trước thời điểm lệnh cuối cùng của ngắt được thực hiện.
· Có một cách khác để giải quyết triệt để vấn đề trên: đó là sử dụng
**ngắt theo sườn.**Khi đó với mỗi 1 lần ấn phím, dù thế nào ngắt cũng chỉ thực hiện 1 lần.
· Trước khi tìm hiểu
**ngắt theo sườn**là gì? Ta hãy xem qua **ngắt theo mức**hoạt động như thế nào.
Ø
**Trích mẫu ngắt theo mức**
Các chân
**P3.2**và **P3.3**bình thường được dùng cho **vào/ra**nếu các Bit **INT0**và **INT1**trong thanh ghi **IE**không được kích hoạt. Sau khi các ngắt phần cứng trong thanh gi **IE**được kích hoạt thì bộ vi điều khiển **duy trì trích mẫu**trên chân **INTx**đối với tín hiệu mức thấp **1 lần trong 1 chu trình máy**.
Theo bảng dữ liệu từ nhà sản xuất của bộ vi điều khiển thì “
**chân ngắt phải được giữ ở mức thấp cho đến khi bắt đầu thực hiện trình phục vụ ngắt ISR. Nếu chân INTx được đưa trở lại mức cao trước khi bắt đầu thực hiện ISR thì sẽ chẳng có ngắt nào xảy ra**”. Do vậy, để bảo đảm việc kích hoạt ngắt phần cứng tại các chân **INTx**phải đảm bảo rằng thời gian tồn tại tín hiệu **mức thấp**là khoảng **4 chu trình máy**và không được bé hơn, nếu không đủ lâu thì ngắt không được thực hiện.
Tuy nhiên trong quá trình kích hoạt
**ngắt theo mức thấp**nên nó lại phải đưa lên **mức cao**trước khi **ISR**thực hiện lệnh cuối cùng và lại theo bảng dữ liệu từ nhà sản xuất thì “ **nếu chân INTx vẫn ở mức thấp sau lệnh cuối cùng của trình phục vụ ngắt thì một ngắt khác lại sẽ được kích hoạt**”. Điều này do một thực tế là **ngắt theo mức** **không được chốt**. **Hình 10:**Thời gian tối thiểu của xung ngắt theo mức thấp (XTAL = 11.0592MHz) **3.2 Ngắt theo sườn** **Ngắt theo sườn**là ngắt sẽ xảy ra khi có một **sườn âm**xuất hiện trên các chân ngắt của vi điều khiển. Điều này làm cho ngắt theo sườn khắc phục được nhược điểm của **ngắt theo mức**như ta đã thấy ở trên.
Để kích hoạt chế độ
**ngắt theo sườn**thì chúng ta phải viết chương trình cài đặt cho các bit của thanh ghi **TCON**: **Hình 11:**Thanh ghi **TCON**.
Ø
**Các Bit IT0 và IT1**
Các bit
**TCON.0**và **TCON.2**được coi như là các bit **IT0**và **IT1**tương ứng. Đây là các bit xác định kiểu ngắt theo sườn xung hay theo mức xung của các ngắt phần cứng trên chân **INT0**và **INT1**tương ứng. Khi bật lại nguồn cả 2 bit này đều có mức **0**để biến chúng thành ngắt theo tín hiệu **mức thấp**. Lập trình viên có thể điều khiển một trong số chúng lên cao để chuyển ngắt phần cứng bên ngoài thành **ngắt theo sườn**.
Ø
**Các Bit IE0 và IE1**
Các bit
**TCON.1**và **TCON.3**còn được gọi là **IE0**và **IE1**tương ứng. Các bit này được 8051 dùng để bám kiểu ngắt theo sườn xung, nếu các bit **IT0**và **IT1**bằng **0**thì có nghĩa là các ngắt phần cứng là ngắt theo **mức thấp**và các bit **IE0**và **IE1**sẽ không dùng đến. Các Bit **IE0**và **IE1**chỉ được 8051 dùng để **chốt sườn xung**từ cao xuống thấp trên các chân **INT0**và **INT1**. Khi có chuyển dịch sườn xung trên chân **INT0**(hay **INT1**) thì 8051 đánh dấu (bật lên cao) các bit **IEx**trên thanh ghi **TCON**và nhảy đến bảng vector ngắt và bắt đầu thực hiện trình phục vụ ngắt **ISR**. Trong khi 8051 thực hiện **ISR**thì không có một sườn xung nào được ghi nhận trên chân **INT0**(hay **INT1**) để ngăn mọi ngắt trong ngắt. Chỉ trong khi thực hiện lệnh cuối của trình phục vụ ngắt **ISR**thì các bit **IEx**mới được 8051 tự động xóa, và các chân ngắt lại hoạt động bình thường.
Ta thấy rằng các bit
**IE0**và **IE1**được 8051 sử dụng bên trong để báo có một ngắt đang được xử lý hay không. Hay nói cách khác là lập trình viên không phải quan tâm đến các bit này.
Ø
**Các Bit TR0 và TR1**
Đây là những bit D4 và D6 (hay TCON.4 và TCON.6) của thanh ghi TCON. Các bit này đã được giới thiệu ở các bài trước, chúng được dùng để khởi động và dừng các bộ định thời Timer0 và Timer1 tương ứng.
Ø
**Các Bit TF0 và TF1**
Các bit này là D5 (TCON.5) và D7 (TCON.7) của thanh ghi TCON mà đã được giới thiệu ở các bài trước. Chúng được sử dụng bởi các bộ Timer0 và Timer1 tương ứng để báo rằng các bộ định thời bị tràn hay quay về không.
Để hiểu rõ sự khác biệt của ngắt theo sườn âm, ta xét
**ví dụ 5**. Chú ý rằng sự khác nhau duy nhất giữa **ví dụ 5**và **ví dụ 4**là ở lệnh chuyển ngắt **INT1**về kiểu **ngắt theo sườn**. Khi **sườn âm**của tín hiệu được cấp đến chân **INT1**thì đèn LED sẽ bật lên một lúc. Đèn LED có thời gian sáng phụ thuộc vào độ trễ bên trong **ISR**của **INT1**. Trong **ví dụ 4**do bản chất **ngắt theo mức**của ngắt thì đèn LED còn sáng chừng nào tín hiệu ở chân **INT1**vẫn còn ở **mức thấp**. Nhưng trong **ví dụ 5**này để bật lại đèn LED thì xung ở chân **INT1**phải được đưa lên cao rồi sau đó bị hạ xuống thấp để tạo ra một **sườn âm**làm kích hoạt ngắt. **Ví dụ 5:**
#include<at89x51.h> //Khai báo thư viện cho VĐK 89x51
main() //Chương trình chính
{
IE=0x84; //cho phép ngắt ngoài 1
IT1=1; //Thiết lập ngắt ngoài 1 theo sườn âm
while(1) //vòng lặp vô hạn
{
//không làm gì
}
}
void nutan(void) interrupt 2 //Khai báo trình phục vụ ngắt ngoài 1
{ //(mặc định là ngắt theo mức)
int a=50000; //Biến đếm trễ
P1_3=0; //Cho Led sáng
while(a--){} //Trễ cho Led sáng vài giây
P1_3=1; //Tắt Led
//Không cần xóa cờ ngắt
}
**Hình 12:**mô phỏng ngắt ngoài 1 theo **sườn âm:**Dù công tắc được giữ, cũng chỉ có 1 ngắt xảy ra.
Ø
**Trình mẫu ngắt theo sườn**
Trước khi kết thúc phần này ta cần trả lời câu hỏi: vậy thì ngắt theo sườn được trích mẫu thường xuyên như thế nào? Trong các ngắt theo sườn
**, nguồn xung phải giữ ở mức cao tối thiểu là 1 chu kỳ máy, và xung thấp cũng phải kéo dài 1 chu kỳ máy nữa**để đảm bảo bộ vi điều khiển nhìn thấy được sự chuyển dịch từ cao xuống thấp của **sườn âm**. **Hình 13:**Thời hạn xung tối thiểu để phát hiện ra các ngắt theo sườn âm với tần số XTAL = 11.0592MHz **Sườn âm**của xung được chốt bởi 8051 và được giữ bởi thanh ghi **TCON**. Các bit **TCON.1 (IE0)**và **TCON.3 (IE1)**giữ các sườn được chốt của chân **INT0**và **INT1**tương ứng như chỉ ra trên **hình 11**. Chúng hoạt động như các cờ “ **ngắt đang được phục vụ**” (Interrupt-in-server). Khi một cờ “ **ngắt đang được phục vụ**” bật lên thì nó báo rằng ngắt hiện nay đang được xử lý và trên chân **INTx**này sẽ không có ngắt nào được đáp ứng chừng nào ngắt này chưa được phục vụ xong. Đây giống như tín hiệu báo bận ở máy điện thoại.
Ngoài ra cần phải nhấn mạnh 2 điểm dưới đây khi quan tâm đến các bit
**IE0**và **IE1**của thanh ghi **TCON**:
· Khi các trình phục vụ ngắt
**ISR**kết thúc: Các Bit **IE0**và **IE1**được tự động xoá để báo rằng ngắt được hoàn tất và 8051 sẵn sàng đáp ứng ngắt khác trên chân đó. Để ngắt khác được nhận và thì tín hiệu trên chân đó phải trở lại mức cao và sau đó nhảy xuống thấp để được phát hiện như một ngắt theo sườn âm.
· Trong thời gian trình phục vụ ngắt đang được thực hiện thì chân
**INTx**bị làm ngơ, 8051 không quan tâm đến nó có bao nhiêu lần chuyển dịch từ cao xuống thấp. Trong thực tế điều này có được là do các bit **IEx**. Vì lý do này mà các bit **IEx**được gọi là các cờ báo “ **ngắt đang được phục vụ**”, cờ này sẽ lên cao khi 1 **sườn âm**được phát hiện trên chân **INTx**và **giữ ở mức cao**trong toàn bộ quá trình thực hiện **ISR**. Nó chỉ bị xoá sau lệnh cuối cùng của **ISR**. **Do vậy, ta cũng sẽ không bao giờ cần đến các lệnh xoá cờ này trong trình phục vụ ngắt đối với các ngắt cứng INT0 và INT1.** **4 Lập trình ngắt truyền thông nối tiếp**
Trong các bài trước chúng ta đã nghiên cứu về truyền thông nối tiếp của 8051. Tất cả các ví dụ trong ấy đều sử dụng phương pháp thăm dò (polling). Ở chương này chúng ta sẽ khám phá phương pháp truyền thông nối tiếp dựa trên ngắt.
**4.1 Các cờ RI và TI và các ngắt**
Như đã nói ở bài trước thì cờ ngắt truyền
**TI**(Transfer interrupt) được bật lên khi bit cuối cùng của khung dữ liệu - **bit stop**được truyền đi, báo rằng thanh ghi **SBUF**sẵn sàng truyền byte kế tiếp. Trong trường hợp cờ **RI**(Receive Interrupt) thì nó được bật lên khi toàn bộ khung dữ liệu kể cả **bit stop**đã được nhận.
Chừng nào còn nói về truyền thông nối tiếp thì tất cả mọi khái niệm trên đây đều áp dụng giống như nhau cho dù sử dụng phương pháp thăm dò hay sử dụng phương pháp ngắt. Sự khác nhau duy nhất giữa hai phương pháp này là ở cách phục vụ quá trình truyền thông nối tiếp như thế nào:
Ø Trong phương pháp thăm dò thì chúng ta phải đợi cho cờ (
**TI**hay **RI**) bật lên và trong lúc chờ đợi thì ta không thể làm gì được cả.
Ø Còn trong phương pháp ngắt thì ta được báo khi 8051 đã nhận được một byte hoặc nó sẵn sàng truyền byte kế tiếp và ta có thể làm các công việc khác trong khi chờ truyền thông nối tiếp được thực hiện.
Trong 8051 chỉ có
**một ngắt dành riêng cho truyền thông nối tiếp**. Ngắt này được dùng cho **cả truyền và nhận dữ liệu**. Nếu bit ngắt truyền thông **ES**- **IE.4**trong thanh ghi **IE**được phép, thì khi 1 trong 2 cờ **RI**hoặc **TI**bật lên, 8051 sẽ nhận được ngắt và nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H trong bảng vector ngắt để thực hiện nó. Trong trình **ISR**này chúng ta phải kiểm tra các cờ **TI**và **RI**để xem cờ nào gây ra ngắt để đáp ứng một cách phù hợp (xem **ví dụ 6**). **Hình 14:**Ngắt truyền thông có thể do hai cờ TI và RI gọi. **4.2 Sử dụng cổng COM nối tiếp trong 8051** **Trong các ứng dụng, ngắt nối tiếp chủ yếu được sử dụng để nhận dữ liệu và không bao giờ được sử dụng để truyền dữ liệu nối tiếp.**Điều này giống như việc báo chuông để ta biết và nhận điện thoại vì ta không thể biết trước được lúc nào có điện thoại, còn nếu muốn gọi điện thoại thì ta không cần đổ chuông để báo trước. **Ví dụ 6:**
Hãy viết chương trình ngắt để 8051 nhận dữ liệu từ cổng nối tiếp
**COM**và gửi đến cổng **P0**. Giả thiết tần số XTAL là 11.0592MHz và tốc độ baud 9600. **Lời giải:**
#include<at89x51.h> //Khai báo thư viện cho 89c51
main() //Chương trình chính
{
TMOD=0x20; //Chọn Timer1, chế độ 2
TH1=0xFD; //Cài đặt tốc độ baud 9600
SCON=0x50; //0101 0000: Chọn chế độ 1, Cho phép nhận
TR1=1; //Khởi động Timer1
IE=0x90; //cho phép ngắt truyền thông nối tiếp
while(1) //Vòng lặp vô hạn
{
}
}
void nhandulieu(void) interrupt 4 //Khai báo ISR truyền thông nối tiếp
{
if(RI==1) //Kiểm tra có phải là ngắt nhận dữ liệu không
{
P0=SBUF; //Gửi dữ liệu đến cổng P0
RI=0; //Xóa cờ nhận dữ liệu nối tiếp
**RI**
}
}
**Hình 15:**Mô phỏng nhận các ký tự **0**, **1**, **2**, **3**, **4**, từ máy tính, gửi đến **Port0**. ****
Trong ví dụ trên ta chú ý đến vai trò của cờ
**RI**. Trong trình phục vụ ngắt nối tiếp, ta phải kiểm tra cả cờ **TI**và cờ **RI**vì cả hai đều có thể gọi ngắt truyền thông nối tiếp, hay nói cách khác là chỉ có một ngắt cho cả truyền và nhận. **4.3 Xoá cờ RI và TI trước khi thoát khỏi ngắt truyền thông nối tiếp**
Để ý rằng lệnh cuối cùng trước khi trở về từ
**ISR**là lệnh xoá các cờ **RI**và **TI**. **Điều này tương phản với ngắt ngoài và ngắt bộ định thời là đều được 8051 xoá các cờ**. **5. Các mức ưu tiên ngắt trong 8051** **5.1 Các mức ưu tiên trong quá trình bật lại nguồn**
Khi 8051 được cấp nguồn thì các mức ưu tiên ngắt được gán theo
**Hình 16**. Từ hình này ta thấy ví dụ nếu các ngắt phần cứng ngoài 0 và 1 được kích hoạt cùng một lúc thì ngắt ngoài 0 sẽ được đáp ứng trước. Chỉ sau khi ngắt INT0 đã được phục vụ xong thì INT1 mới được phục vụ vì INT1 có mức ưu tiên thấp hơn. Trong thực tế sơ đồ mức ưu tiên ngắt trong bảng chỉ là một quy trình thăm dò, trong đó 8051 thăm dò các ngắt theo trình tự cho trong **hình 16**và đáp ứng chúng một cách phù hợp. **Hình 17:**Thanh ghi mức ưu tiên ngắt **IP**: Bit ưu tiên = 1 là mức ưu tiên cao, Bit ưu tiên = 0 là mức ưu tiên thấp.
- Bit D7 và D6 -- chưa dùng.
- Bit D5 hay
**PT2**là Bit ưu tiên ngắt Timer2 (dùng cho 8052)
- Bit D4 hay
**PS**là Bit ưu tiên ngắt cổng nối tiếp
- Bit D3 hay
**PT1**là Bit ưu tiên ngắt Timer1
- Bit D2 hay
**PX1**là mức ưu tiên ngắt ngoài 1
- Bit D1 hay
**PT0**là mức ưu tiên ngắt Timer 0
- Bit D0 hay
**PX0**là mức ưu tiên ngắt ngoài 0 **5.2 Thiết lập mức ưu tiên ngắt với thanh ghi IP**
Chúng ta có thể thay đổi trình tự trong
**hình 16**bằng cách gán mức ưu tiên cao hơn cho bất kỳ ngắt nào. Điều này được thực hiện bằng cách lập trình một thanh ghi gọi là thanh ghi mức ưu tiên ngắt **IP**( **Interrupt Priority**). Trên **hình 17**là các bit của thanh ghi này. Khi bật lại nguồn thanh thi **IP**chứa hoàn toàn các số **0**để tạo ra trình tự ưu tiên ngắt theo **Hình 16**. Để một ngắt nào đó có mức ưu tiên cao hơn ta thực hiện đưa bit tương ứng lên cao.
Một điểm khác nữa cần được làm sáng tỏ là mức ưu tiên ngắt
**khi 2 hoặc nhiều bit ngắt trong thanh ghi IP được đặt lên cao**: Trong trường hợp này thì trong khi các ngắt này có mức ưu tiên cao hơn các ngắt khác, chúng sẽ được phục vụ theo trình tự cho trong **Hình 16**. **5.3 Ngắt trong ngắt**
Điều gì xảy ra nếu 8051 đang thực hiện một trình phục vụ ngắt thuộc một ngắt nào đó thì lại có một ngắt khác được kích hoạt? Trong những trường hợp như vậy thì
**1 ngắt có mức ưu tiên cao hơn có thể ngắt 1 ngắt có mức ưu tiên thấp hơn**. Đây gọi là ngắt trong ngắt. Trong 8051 một ngắt ưu tiên thấp có thể bị ngắt bởi một ngắt có mức ưu tiên cao hơn chứ không bị ngắt bởi một ngắt có mức ưu tiên thấp hơn. Mặc dù tất cả mọi ngắt đều được chốt và giữ bên trong nhưng không có ngắt mức thấp nào được CPU quan tâm ngay tức khắc, nếu 8051 chưa kết thúc phục vụ các ngắt mức cao. **5.4 Thu chộp ngắt bằng phần mềm (Triggering)**
Có nhiều lúc ta cần kiểm tra một trình phục vụ ngắt bằng con đường mô phỏng. Điều này có thể được thực hiện bằng các lệnh đơn giản để thiết lập các ngắt lên cao và bằng cách đó buộc 8051 nhảy đến bảng vector ngắt. Ví dụ, nếu bit cho phép ngắt
**Timer1**trong thanh ghi **IE**được bật lên 1 thì một lệnh như **TF1=1;**sẽ ngắt 8051 ngừng thực hiện công việc đang làm bất kỳ và buộc nó nhảy đến bảng vector ngắt timer1. Hay nói cách khác, ta không cần đợi cho Timer1 quay trở về 0 mới tạo ra ngắt. Chúng ta có thể gây ra một ngắt bằng các lệnh đưa các bit của ngắt tương ứng lên cao.
Như vậy qua bài này chúng ta đã biết ngắt là một sự kiện bên trong hoặc bên ngoài gây ra ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần được phục vụ. Mỗi một ngắt có một chương trình đi kèm với nó được gọi là trình phục vụ ngắt
**ISR**. Bộ vi điều khiển 8051 có 6 ngắt, trong đó có **5 ngắt**người dùng có thể truy cập được. Đó là: 2 ngắt cho các thiết bị phần cứng bên ngoài **INT0**và **INT1**, 2 ngắt cho các bộ định thời là **TF0**và **TF1**và 1 ngắt dành cho **truyền thông nối tiếp**.
8051 có thể được lập trình cho phép hoặc cấm một ngắt bất kỳ cũng như thiết lập mức ưu tiên cho nó theo yêu cầu của thuật toán ứng dụng.
Thanks!Trả lờiXóa
Đã có thêm bài ngắt.hiTrả lờiXóa
mong bạn viết thêm ngắt trong hệ điều hành rtx51tny thì đầy đủ hơn nữaTrả lờiXóa
Bài viết của bác rất hay, ngắn gọn và đủ hiểu. hiện em cũng làm được một số thứ rồi, nhưng em muốn thêm là khi chương trinh điều khiển từ PC không chạy nữa thì IC sẽ tắt hết những thiết bị nó đang điều khiển. không biết có làm được không, mong các bác tư vấn với.Trả lờiXóa
Chào vannam!Trả lờiXóa
Vậy trước hết bạn phải xác định được:
+ Khi nào thì chương trình trên PC sẽ không chạy nữa?
+ Làm sao để vi điều khiển nhận biết được điều đó?
Bạn có thể lập trình cho chương trình trên PC, sao cho trước khi tắt nó sẽ gửi xuống VĐK 1 tín hiệu thông báo chẳng hạn...
Cảm ơn bác Tjtanja đã cho em ý tưởng, nhưng em nghĩ không phải lúc nào chương trình cũng thoát một cách chính thống bằng cách click Exit hoặc nút [x]. đấy mới là điều em đang phải suy nghĩ. nếu từ chíp để kiểm tra chương trình còn chạy từ VĐK thì tốt nhất. mong các bác có ý tưởng khác gợi ý em với. Em xin chân thành cảm ơn các bác.Trả lờiXóa
Hoặc lúc chương trình đang chạy, thì định kỳ gửi tín hiệu thông báo xuống VĐK, nếu một thời gian dài mất tín hiệu đó thì có thể khẳng định chương trình đã ngừng hoạt động.Trả lờiXóa
Cảm ơn bác Tjtanja, em đang viết ngược lại ý tưởng của bác là gửi định kỳ 1 phút 1 lần từ VSL lên PC, nếu không thấy chương trình phản hồi lại thì sẽ dừng điều khiển thiết bị của VSL. em đang viết khi nào có kết quả sẽ báo cáo anh em sau vây.Trả lờiXóa
em muốn dừng 1 xung đang chạy thì almf cách nào?Trả lờiXóa
cảm ơn bác nhiều lắm !!Trả lờiXóa
hay quá,học phần này bằng ASM thấy khó hiểu nhưng khi lập trình bằng C thì thấy dễ hiểu hơn rôi! thank bác nhiều!Trả lờiXóa
Cho em xin tài liệu về ngắt ngoài.Trả lờiXóa
Thank!Trả lờiXóa
có ai cho mình biết kiến thức này từ quyển sách nào không.ThankTrả lờiXóa
Hay lam.thanksTrả lờiXóa
cám ơn bạn,bài viết rất hữu íchTrả lờiXóa
cám ơn bài viết của bạnTrả lờiXóa


text:
Bán nhanh 0988651984 ….gia…. 2500000
Tìm sim đẹp dễ nhớ đã và đang là nhu cầu của rất nhiều người sử dụng điện thoại di động, Nó sẽ phục vụ tốt cho công việc kinh doanh, quan hệ bạn bè, xã hội hàng ngày. Người làm ăn có sim số đẹp sẽ có được nhiều lợi thế hơn so với đối thủ, nếu quý vị đang có nhu cầu mua sim số đẹp giá rẻ để phục vụ mục đích nào đó hãy nhanh chóng chọn cho mình một sim số đẹp giá tốt vừa ý. Dưới đây là một ít sim số đẹp giá tốt để các bạn lựa chọn.
0975221998 ….gia…. 2600000
0949781998 ….gia…. 1300000
0916172009 ….gia…. 1450000
0945971975 ….gia…. 1000000
0946352009 ….gia…. 1200000
0949512006 ….gia…. 520000
0943141976 ….gia…. 1200000
0915611992 ….gia…. 3700000
0961961985 ….gia…. 2900000
0945271984 ….gia…. 1200000
0963211997 ….gia…. 2300000
0937851974 ….gia…. 1000000
0923451983 ….gia…. 3500000
0934572003 ….gia…. 1000000
0923551979 ….gia…. 1300000
0969901979 ….gia…. 2500000
0973211984 ….gia…. 2500000
0947911996 ….gia…. 2300000
0965852013 ….gia…. 900000
0962751986 ….gia…. 4750000
01648302004 ….gia…. 540000
01276451990 ….gia…. 620000
0993731987 ….gia…. 1150000
01256751986 ….gia…. 720000
01257901986 ….gia…. 720000
01275391996 ….gia…. 600000
01245112014 ….gia…. 1000000
0993301996 ….gia…. 1000000
01284821986 ….gia…. 600000
01254421999 ….gia…. 1000000
01289301991 ….gia…. 360000
01235942008 ….gia…. 580000
01207841998 ….gia…. 360000
01232102014 ….gia…. 590000
01212042011 ….gia…. 1500000
01632461973 ….gia…. 600000
01642641969 ….gia…. 650000
01268261979 ….gia…. 800000
01295932000 ….gia…. 1600000
01286561984 ….gia…. 600000
Ngay bây giờ, quý khách đã có thể mua. Cho dù quý khách hàng ở đâu và bất cứ lúc nào trên mọi miền tổ quốc cũng đừng ngần ngại, vì chỉ với 1 cú lick chuột bạn cũng đã đặt mua ngay được 1 chiếc sim số đẹp giá tốt nhất. Nếu như quý khách hàng tạm ưng ý 1 sim đẹp giá mềm ở đây đừng ngần ngại hãy liên hệ với đơn vị chúng tôi theo số điện thoại 0917021455-0977805354 - 0835899999 - sau 16/7/2017 may ban la 028358.99999 để biết sim còn hay đã bán.
01689131996 ….gia…. 850000
0977842014 ….gia…. 1000000
01687222003 ….gia…. 1000000
0949731970 ….gia…. 800000
0961772009 ….gia…. 1200000
0975072008 ….gia…. 900000
0941881970 ….gia…. 800000
01685941970 ….gia…. 800000
01207051990 ….gia…. 1500000
0948181971 ….gia…. 1000000
01219932000 ….gia…. 1300000
0934222015 ….gia…. 1000000
0888351993 ….gia…. 1050000
0922731994 ….gia…. 900000
0888731969 ….gia…. 3500000
01292791994 ….gia…. 480000
01654941997 ….gia…. 580000
0967322008 ….gia…. 1000000
01252342000 ….gia…. 1200000
01217031980 ….gia…. 1300000
0975221998 ….gia…. 2600000
0949781998 ….gia…. 1300000
0916172009 ….gia…. 1450000
0945971975 ….gia…. 1000000
0946352009 ….gia…. 1200000
0949512006 ….gia…. 520000
0943141976 ….gia…. 1200000
0915611992 ….gia…. 3700000
0961961985 ….gia…. 2900000
0945271984 ….gia…. 1200000
0963211997 ….gia…. 2300000
0937851974 ….gia…. 1000000
0923451983 ….gia…. 3500000
0934572003 ….gia…. 1000000
0923551979 ….gia…. 1300000
0969901979 ….gia…. 2500000
0973211984 ….gia…. 2500000
0947911996 ….gia…. 2300000
0965852013 ….gia…. 900000
0962751986 ….gia…. 4750000
01648302004 ….gia…. 540000
01276451990 ….gia…. 620000
0993731987 ….gia…. 1150000
01256751986 ….gia…. 720000
01257901986 ….gia…. 720000
01275391996 ….gia…. 600000
01245112014 ….gia…. 1000000
0993301996 ….gia…. 1000000
01284821986 ….gia…. 600000
01254421999 ….gia…. 1000000
01289301991 ….gia…. 360000
01235942008 ….gia…. 580000
01207841998 ….gia…. 360000
01232102014 ….gia…. 590000
01212042011 ….gia…. 1500000
01632461973 ….gia…. 600000
01642641969 ….gia…. 650000
01268261979 ….gia…. 800000
01295932000 ….gia…. 1600000
01286561984 ….gia…. 600000
Ngay bây giờ, quý khách đã có thể mua. Cho dù quý khách hàng ở đâu và bất cứ lúc nào trên mọi miền tổ quốc cũng đừng ngần ngại, vì chỉ với 1 cú lick chuột bạn cũng đã đặt mua ngay được 1 chiếc sim số đẹp giá tốt nhất. Nếu như quý khách hàng tạm ưng ý 1 sim đẹp giá mềm ở đây đừng ngần ngại hãy liên hệ với đơn vị chúng tôi theo số điện thoại 0917021455-0977805354 - 0835899999 - sau 16/7/2017 may ban la 028358.99999 để biết sim còn hay đã bán.
01689131996 ….gia…. 850000
0977842014 ….gia…. 1000000
01687222003 ….gia…. 1000000
0949731970 ….gia…. 800000
0961772009 ….gia…. 1200000
0975072008 ….gia…. 900000
0941881970 ….gia…. 800000
01685941970 ….gia…. 800000
01207051990 ….gia…. 1500000
0948181971 ….gia…. 1000000
01219932000 ….gia…. 1300000
0934222015 ….gia…. 1000000
0888351993 ….gia…. 1050000
0922731994 ….gia…. 900000
0888731969 ….gia…. 3500000
01292791994 ….gia…. 480000
01654941997 ….gia…. 580000
0967322008 ….gia…. 1000000
01252342000 ….gia…. 1200000
01217031980 ….gia…. 1300000
0 nhận xét:
Đăng nhận xét

markdown:
##
[Bán nhanh 0988651984 ….gia…. 2500000 ](http://www.electroniccigarettemart.com/2017/03/ban-nhanh-0988651984-gia-2500000.html)
Tìm sim đẹp dễ nhớ đã và đang là nhu cầu của rất nhiều người sử dụng điện thoại di động, Nó sẽ phục vụ tốt cho công việc kinh doanh, quan hệ bạn bè, xã hội hàng ngày. Người làm ăn có sim số đẹp sẽ có được nhiều lợi thế hơn so với đối thủ, nếu quý vị đang có nhu cầu mua sim số đẹp giá rẻ để phục vụ mục đích nào đó hãy nhanh chóng chọn cho mình một sim số đẹp giá tốt vừa ý. Dưới đây là một ít sim số đẹp giá tốt để các bạn lựa chọn.
0975221998 ….gia…. 2600000
0949781998 ….gia…. 1300000
0916172009 ….gia…. 1450000
0945971975 ….gia…. 1000000
0946352009 ….gia…. 1200000
0949512006 ….gia…. 520000
0943141976 ….gia…. 1200000
0915611992 ….gia…. 3700000
0961961985 ….gia…. 2900000
0945271984 ….gia…. 1200000
0963211997 ….gia…. 2300000
0937851974 ….gia…. 1000000
0923451983 ….gia…. 3500000
0934572003 ….gia…. 1000000
0923551979 ….gia…. 1300000
0969901979 ….gia…. 2500000
0973211984 ….gia…. 2500000
0947911996 ….gia…. 2300000
0965852013 ….gia…. 900000
0962751986 ….gia…. 4750000
01648302004 ….gia…. 540000
01276451990 ….gia…. 620000
0993731987 ….gia…. 1150000
01256751986 ….gia…. 720000
01257901986 ….gia…. 720000
01275391996 ….gia…. 600000
01245112014 ….gia…. 1000000
0993301996 ….gia…. 1000000
01284821986 ….gia…. 600000
01254421999 ….gia…. 1000000
01289301991 ….gia…. 360000
01235942008 ….gia…. 580000
01207841998 ….gia…. 360000
01232102014 ….gia…. 590000
01212042011 ….gia…. 1500000
01632461973 ….gia…. 600000
01642641969 ….gia…. 650000
01268261979 ….gia…. 800000
01295932000 ….gia…. 1600000
01286561984 ….gia…. 600000
Ngay bây giờ, quý khách đã có thể mua. Cho dù quý khách hàng ở đâu và bất cứ lúc nào trên mọi miền tổ quốc cũng đừng ngần ngại, vì chỉ với 1 cú lick chuột bạn cũng đã đặt mua ngay được 1 chiếc sim số đẹp giá tốt nhất. Nếu như quý khách hàng tạm ưng ý 1 sim đẹp giá mềm ở đây đừng ngần ngại hãy liên hệ với đơn vị chúng tôi theo số điện thoại 0917021455-0977805354 - 0835899999 - sau 16/7/2017 may ban la 028358.99999 để biết sim còn hay đã bán.
01689131996 ….gia…. 850000
0977842014 ….gia…. 1000000
01687222003 ….gia…. 1000000
0949731970 ….gia…. 800000
0961772009 ….gia…. 1200000
0975072008 ….gia…. 900000
0941881970 ….gia…. 800000
01685941970 ….gia…. 800000
01207051990 ….gia…. 1500000
0948181971 ….gia…. 1000000
01219932000 ….gia…. 1300000
0934222015 ….gia…. 1000000
0888351993 ….gia…. 1050000
0922731994 ….gia…. 900000
0888731969 ….gia…. 3500000
01292791994 ….gia…. 480000
01654941997 ….gia…. 580000
0967322008 ….gia…. 1000000
01252342000 ….gia…. 1200000
01217031980 ….gia…. 1300000
0975221998 ….gia…. 2600000
0949781998 ….gia…. 1300000
0916172009 ….gia…. 1450000
0945971975 ….gia…. 1000000
0946352009 ….gia…. 1200000
0949512006 ….gia…. 520000
0943141976 ….gia…. 1200000
0915611992 ….gia…. 3700000
0961961985 ….gia…. 2900000
0945271984 ….gia…. 1200000
0963211997 ….gia…. 2300000
0937851974 ….gia…. 1000000
0923451983 ….gia…. 3500000
0934572003 ….gia…. 1000000
0923551979 ….gia…. 1300000
0969901979 ….gia…. 2500000
0973211984 ….gia…. 2500000
0947911996 ….gia…. 2300000
0965852013 ….gia…. 900000
0962751986 ….gia…. 4750000
01648302004 ….gia…. 540000
01276451990 ….gia…. 620000
0993731987 ….gia…. 1150000
01256751986 ….gia…. 720000
01257901986 ….gia…. 720000
01275391996 ….gia…. 600000
01245112014 ….gia…. 1000000
0993301996 ….gia…. 1000000
01284821986 ….gia…. 600000
01254421999 ….gia…. 1000000
01289301991 ….gia…. 360000
01235942008 ….gia…. 580000
01207841998 ….gia…. 360000
01232102014 ….gia…. 590000
01212042011 ….gia…. 1500000
01632461973 ….gia…. 600000
01642641969 ….gia…. 650000
01268261979 ….gia…. 800000
01295932000 ….gia…. 1600000
01286561984 ….gia…. 600000
Ngay bây giờ, quý khách đã có thể mua. Cho dù quý khách hàng ở đâu và bất cứ lúc nào trên mọi miền tổ quốc cũng đừng ngần ngại, vì chỉ với 1 cú lick chuột bạn cũng đã đặt mua ngay được 1 chiếc sim số đẹp giá tốt nhất. Nếu như quý khách hàng tạm ưng ý 1 sim đẹp giá mềm ở đây đừng ngần ngại hãy liên hệ với đơn vị chúng tôi theo số điện thoại 0917021455-0977805354 - 0835899999 - sau 16/7/2017 may ban la 028358.99999 để biết sim còn hay đã bán.
01689131996 ….gia…. 850000
0977842014 ….gia…. 1000000
01687222003 ….gia…. 1000000
0949731970 ….gia…. 800000
0961772009 ….gia…. 1200000
0975072008 ….gia…. 900000
0941881970 ….gia…. 800000
01685941970 ….gia…. 800000
01207051990 ….gia…. 1500000
0948181971 ….gia…. 1000000
01219932000 ….gia…. 1300000
0934222015 ….gia…. 1000000
0888351993 ….gia…. 1050000
0922731994 ….gia…. 900000
0888731969 ….gia…. 3500000
01292791994 ….gia…. 480000
01654941997 ….gia…. 580000
0967322008 ….gia…. 1000000
01252342000 ….gia…. 1200000
01217031980 ….gia…. 1300000
## 0 nhận xét:
## Đăng nhận xét