Trích:
Nguyên văn bởi TANDEM
Trước hết, em xin chân thành cám ơn anh Nam đã bớt chút thời gian chỉ giáo!
Vì em mô phỏng bởi Proteus nên em dùng phần mềm "Virtual Serial Port Driver" để nối 2 cổng ảo, một COM5 trên PC và một COM4 trên COMPIM. Có lẽ em phải tiến hành từng phần nhỏ một (trước hết là qua cổng COM) chính vì thế mà em muốn nói là chưa giả lập được cổng COM!!?
Trích:
"Bạn đang thao tác trực tiếp trên các bit của thanh ghi PORTD, điều này có thể dẫn đến hiện tượng như bạn đã thấy, do hiệu ứng read-modify-write của các lệnh thao tác bit trong PIC.
Bạn nên dùng một thanh ghi đệm, khởi tạo giá trị của nó bởi giá trị của PORTD, sau đó cập nhật các bit của thanh ghi đệm này và ghi vào PORTD, mỗi khi bạn muốn cập nhật 1 bit nào đó của PORTD."
Việc này em chưa biết cách thực hiện trong CCS, anh có thể tỷ mỷ cho em một chút được không?
Anh thông cảm, em sẽ học cách cho vào Tag sau.
|
Nếu đã dùng COMPIM của Proteus, bạn hoàn toàn có thể dùng Virtual Terminal của Proteus để mô phỏng luôn terminal, hoặc dùng một phần mềm giả lập terminal trên máy tính (như HyperTerminal chẳng hạn) để kết nối với cổng nối tiếp đã được COMPIM giả lập. Khi đó bạn thiết lập địa chỉ COMx bằng bao nhiêu cho COMPIM thì sẽ dùng đúng địa chỉ đó trong Virtual Terminal của Proteus hay phần mềm giả lập terminal.
Về phần thao tác trực tiếp trên thanh ghi PORTD, cụ thể hơn một chút nữa là như sau:
- Bạn khai báo thêm biến PORTD_img, và sửa chương trình xử lý ngắt như dưới đây:
Code:
char ch, PORTD_img;
#INT_RDA
Receive_isr()
{
if (kbhit())
{
ch = getc();
if (ch=='a') PORTD_img |= 0x01; //Bat bit RD0
if (ch=='b') PORTD_img |= 0x02; //Bat bit RD1
if (ch=='c') PORTD_img |= 0x04; //Bat bit RD2
if (ch=='d') PORTD_img |= 0x08; //Bat bit RD3
if (ch=='e') PORTD_img |= 0x10; //Bat bit RD4
if (ch=='f') PORTD_img &= 0xFE; //Tat bit RD0
if (ch=='g') PORTD_img &= 0xFD; //Tat bit RD1
if (ch=='h') PORTD_img &= 0xFB; //Tat bit RD2
if (ch=='i') PORTD_img &= 0xF7; //Tat bit RD3
if (ch=='j') PORTD_img &= 0xEF; //Tat bit RD4
PORTD = PORTD_img;
}
}
- Trong main(), bạn khởi tạo PORTD_img = 0 cùng với PORTD = 0.
- Bạn không cần dùng mấy dòng #define may1 RD0 ... #define may5 RD4
Thân,