Chào các bạn, mình lập trình cho PIC16F887 bằng MPLAB 8.56 + Hitech C 9.71. Tuy nhiên không hiểu sao khi viết lệnh gộp như Kiểu viết 2 thì chương trình chạy sai. (Mình không nghĩ là Kiểu viết 2 có gì sai <-- nhờ các b check lại xem). Cụ thể hàm này có chức năng quét từng phần tử của gcan, dịch trái 1 bit, sau đó gán bit LSB (bit bìa bên phải) thành 1. Tuy nhiên nếu viết gộp như Kiểu viết 2 thì chương trình chỉ dịch trái chứ không gán bit LSB lên 1??? Xem mã assembly nó dịch ra thì kiểu viết 2 không thấy nó dịch ra dòng nào??!! Mong được các bạn debug giúp! Thanks rất nhiều!
p/s: Mình debug bằng cách mô phỏng trên MPLAB + mạch thật. Cái position đó là mình để lại cho giống cái code gốc. Mình sẽ đính kèm project để các bạn tiện mô phỏng xem Watch thử.
View attachment TestHitechC_err.zip
View attachment main.c.txt
Code:
unsigned char gcan[5] = { 0b01110010,0b11011000,0b00011011,0b10010010,0b01101100};
void countdown()
{
const unsigned char position = 0;
unsigned char i, j;
for (i = 0; i <= 7; i++)
{
for (j = 0; j <= 4; j++)
{
//*Kieu viet 1
//gcan[position + j] = ((gcan[position + j] << 1));
//gcan[position + j] |= 0x01;
//*Kieu viet 2
gcan[position + j] = ((gcan[position + j]) << 1) | 0x01;
}
}
}
View attachment TestHitechC_err.zip
View attachment main.c.txt