PDA

View Full Version : Help IO pic12f1822


qloi
17-05-2014, 10:32 AM
mình mới chuyển qua htpic sài thử và gặp vấn đề này cao thủ nào rõ chỉ dùm mình gấp nhé:

#include <htc.h>

__CONFIG(WDTE_OFF & FOSC_INTOSC & MCLRE_ON & PWRTE_OFF & BOREN_OFF & CP_OFF & IESO_OFF & FCMEN_OFF);
__CONFIG(WRT_OFF & PLLEN_OFF & LVP_OFF );

#define _XTAL_FREQ 8000000

#define BUTTON RA2
bit i=0;

main(void)
{

OSCCON = 0x72;//internal osc 8M
TRISA = 255;
TRISA1 = 0;
i=0;
for(;;) {

while(BUTTON == 0)
{ RA1 = 1;
__delay_ms(100);
}
RA1 = 0;
__delay_ms(100);
}
}

Vấn đề gặp phải là button đã định nghĩa là đầu vào nhưng dùng hàm như trên khi bấm giữ button thì đèn sáng ,thả ra thì tắt nhưng có vẽ là button ở đây ko thay đổi trạng thái(không đổi mức và lun = 0) nên nó chỉ chạy trong while và đèn sáng liên tục. không hiểu khai báo của mình có sai j không hay trình dịch bị lỗi hoặc không hỗ trọ nhỉ?..mình đã sữ dụng các trình dịc khác và không bị hiện tượng như vậy???

qloi
17-05-2014, 06:11 PM
Tình hình là đã phát hiện ra chỗ sai .Do khai báo thiếu thanh ghi ANSELA và tình cờ xem cơ chế sinh mã của htpic mình phát hiện ra nó sinh mã sai các bác à. ví dụ:

while(rfin)
{
__delay_us(5);
i++;
}

theo trình tụ thì nó sẽ kiểm tra bít rfin nếu = 1 thì delay 5us và tăng i rồi quay lại kiểm tra bit rfin nếu =0 thì thoát .nhưng nó lại sinh code như thế này:

while(rfin)
670 1A0C BTFSS 0xc, 0x4
671 2E7B GOTO 0x67b
67A 2E70 GOTO 0x670
74: {
75: __delay_us(5);
672 3003 MOVLW 0x3
673 00F6 MOVWF 0x76
674 0BF6 DECFSZ 0x76, F
675 2E74 GOTO 0x674
76: i++;
676 0020 MOVLB 0
677 0AA4 INCF 0x24, F
678 1903 BTFSC 0x3, 0x2
679 0AA5 INCF 0x25, F
77: }
78:
79:
67B 0823 MOVF 0x23, W


mấu chốt là ở chổ hàm GOTO 0x67b GOTO 0x670.có vẻ như GOTO 0x670 đặt sai chổ(ở line 77 mới đúng). Mình không nghĩ một trình dịch chuyên nghiệp vậy mà bị lỗi này, các bác ai phát hiện ra lý do k.