PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Help IO pic12f1822 (http://www.picvietnam.com/forum/showthread.php?t=33504)

qloi 17-05-2014 10:32 AM

Help IO pic12f1822
 
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é:
Code:

#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ụ:
Code:

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:
Code:

                        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.


Múi giờ GMT. Hiện tại là 12:40 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam