Thuật toán thu và giải mã căn cứ vào khung data frame thu đợc của điều khiển từ mắt thu đa tới chân p3.3 :
Vấn đề là cần phải nhận biết đợc khi nào thì khung dữ liệu bắt đầu và đâu là bit 1 , đâu là bit 0 , và thu lại các bít nối tiếp nhau đi vao thanh ghi A.
- Để nhận biết khi nào khung data bắt đầu ta dựa vào bit Start . Đầu tiên ta mặc định cho chân thu p3.3 lên mức 1 , sau đó chờ đến khi bit start chuyển chân p3.3 xuống mức 0, tức là đã thu xong bit start , tức là đã bắt đầu thì lập tức thực hiện việc thu các bit (dùng 1 vòng lặp để chờ , chỉ khi bit start xuống mức 0 thi mới chuyển sang lệnh khác) . Sở dĩ ta cần phải mặc định ban đầu cho bit p3.3 = 1 là vì nếu nh ban đầu Vi điều khiển làm cho nó bằng 0 thì khi bit start bắt đầu từ mức 1 cũng sẽ không kéo đợc p3.3 lên mức 1 vì cha chắc mức 1 của bit start đã thắng đợc mức 0 của vi điều khiển , nhng mức 0 của bit start thì chắc chắn kéo đợc mức 1 của VĐK xuống mức 0 .
- Để thu các bit dữ liệu ta cần phân biệt các bit 0 và 1 nhờ vào khoảng thời gian mức 0 của bit 0 và bit 1 là khác nhau , với bit 0 là 700 us còn với bit 1 là 1300 us . Sau khi thu xong bit start thì p3.3 đang ở mức 0. Để thu tiếp các bit dữ liệu thì ta lại chờ nó lên mức 1 rồi lại chờ nó xuống 0 vậy là thu xong nửa bit đầu tiên ,bây giờ đã đến thời gian tồn tại của mức 0 , ta chỉ cần kiểm tra xem thời gian này kéo dài 700 us hay là 1300 us . Ta dùng 1 hàm trễ khoảng 900 us để so sánh , nếu sau thời gian trễ này mà p3.3 vẫn bằng 0 thì chứng tỏ thời gian mức 0 kéo dài 1300 us và bit vừa thu đợc là bit 1 còn nếu sau thời gian trễ này mà p3.3 đã lên mức 1 thì chứng tỏ mức 0 chỉ kéo dài 700 us và đã kết thúc và bit vừa thu là bit 0 . Thực hiện ghi bit này vào thanh ghi A bằng cách thiết lập
tơng tự nh vậy. Các bit nối tiếp nhau đi vào thanh ghi A tạo lên tổ hợp mã thu đ- ợc , khi đó báo ra cờ C là đã thu xong .
- So sánh tổ hợp mã thu đợc với mã của các phím trên ĐKTX để kiểm tra xem ngời sử dụng đã nhấn phím nào rồi thực hiện xuất tín hiệu điều điều khiển ra chân tơng ứng ở cổng P2