Hỏi: Các chân riêng lẻ của các cổng khác nhau của bộ điều khiển vi mô có thể được ánh xạ tới một thanh ghi và giá trị của chúng có thể bị thay đổi khi thay đổi giá trị thanh ghi không?
Kịch bản: Tôi đã sử dụng hết một số chân từ mỗi cổng (8 bit) của bộ điều khiển vi mô. Bây giờ tôi muốn giao diện một thiết bị cần bus 8 bit (giả sử D0 đến D7 IN SEQUENCE) nghĩa là tôi cần 8 chân từ bộ điều khiển để tôi có thể kết nối chúng theo kiểu một-một
portx0 -> D0 // x is the name of port followed by bit location on that port
portx1 -> D1
...
portx7 -> D7
nhưng tôi không có toàn bộ cổng gồm 8 chân mà tôi có thể kết nối với thiết bị này, thay vào đó tôi có một số chân từ portx, một số từ porty và một số chân từ portz. Kịch bản kết nối mới là (kết nối từ bộ điều khiển vi đến thiết bị tương ứng)
portx0 -> D0
portx1 -> D1
portx2 -> D2
porty4 -> D3
porty5 -> D4
porty6 -> D5
porty7 -> D6
portz1 -> D7
Trong điều kiện này nếu tôi muốn gửi một giá trị nói
unsigned char dataReg = 0xFA;
đến thiết bị của tôi từ bộ điều khiển, tôi phải thực hiện các thao tác bit khôn ngoan trên giá trị được gửi và đặt từng pin theo giá trị trong thanh ghi riêng lẻ. Ví dụ
portx0 = ((dataReg & 0x01) >> 0 ); // Masking and shifting as bit position
portx1 = ((dataReg & 0x02) >> 1 );
portx2 = ((dataReg & 0x04) >> 2 );
porty4 = ((dataReg & 0x08) >> 3 );
porty5 = ((dataReg & 0x10) >> 4 );
porty6 = ((dataReg & 0x20) >> 5 );
porty7 = ((dataReg & 0x40) >> 6 );
portz1 = ((dataReg & 0x80) >> 7 );
Bây giờ, đến câu hỏi chính, để tránh các tính toán riêng lẻ này trên mỗi bit trên các cổng khác nhau, các chân riêng lẻ của các cổng khác nhau của bộ điều khiển vi mô có thể được ánh xạ tới một thanh ghi và thay đổi giá trị của chúng khi thay đổi giá trị thanh ghi không?