|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
09-05-2007, 02:15 PM | #10 |
Nhập môn đệ tử
Tham gia ngày: Mar 2007
Bài gửi: 5
: |
Mình dùng Pic 18f4580 để lập trình với ứng dựng đơn giản để thử thì gặp lỗi mà không khắc phục được
Ứng dụng của mình chỉ hiển thị ra led 7 đoạn và tăng giá trị sau mỗi phím bấm Tuy nhiên , quá trình chạy thử thì có vấn đề như sau: vấn đề : khi bộ đếm đến 4 thì reset trở về lại đầu chương trình lúc đó , - khi thực hiện lệnh MOVF COUNT,W,0 thì thanh ghi PCL có giá trị là 0x0000CC h ,Status : 0x01 h, STKPTR : 0x01 , thanh ghi W có giá trị là 0x0A , biến COUNT có giá trị là 0x0A h - khi thực hiện lệnh CALL TABLE thì nhảy đến vị trí có nhãn là TABLE , thanh ghi PCL có giá trị là 0x000F4 h , Status : 0x01 h , STKPTR : 0x02 dỉnh ngăn xếp TOS là : 0x0000D0 - khi thực hiện lệnh ADDWF PCL ,f,1 thì PCL có giá trị là 0x00000 và reset lại tại vị trí ban đầu (không phải reset chưong trình vì tất cả các giá trị khác vẫn không bị reset như thanh ghi STKPTR vẫn còn giá trị là 0x02) và thực hiện từ đầu chương trình Tại sao trong những lần thực hiện lệnh ADDWF PCL,f,1 không xảy ra reset mà chỉ khi biến COUNT có giá trị là0x0A . Mình cũng có một số thay đổi khác thì cũng xảy ra trường hợp giống như vậy khi biến COUNT có giá trị là 0x006 Như vậy nguyên nhân do đâu mà xảy ra reset như trên, cách khắc phục. Mình cũng đã thử viết chương trình với những ứng dụng khác đơn giản hơn như nháy led hay chạy led lan dần thì không gặp vấn đề gì cả , chứng tỏ là config cho PIC là đúng Sau đây là mã viết bằng ASM Code:
LIST P=18F4580 ;CHON PIC HOAT DONG #include <P18F4580.INC> ;CAC DINH NGHIA CAC THANH GHI CHO PIC ;************************************************* **************************** ; CAU HINH CHO PIC __CONFIG _CONFIG1H, _OSC_HS_1H & _FCMENB_OFF_1H __CONFIG _CONFIG2L, _PWRT_OFF_2L & _BOR_OFF_2L & _BORV_20_2L __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_32768_2H __CONFIG _CONFIG3H, _MCLRE_ON_3H & _PBADEN_OFF_3H __CONFIG _CONFIG4L, _DEBUG_OFF_4L & _XINST_OFF_4L & _BBSIZ_2048_4L & _LVP_OFF_4L & _STVREN_OFF_4L __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L __CONFIG _CONFIG7H, _EBTRB_OFF_7H & _DEVID1 & _IDLOC0 ;************************************************* **************************** ;KHAI BAO BIEN CBLOCK 0x080 WREG_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI W STATUS_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI STATUS BSR_TEMP ;BIEN TAM DE LUU GIA TRI THANH GHI BSR ENDC CBLOCK 0x120 COUNT ;example of a variable in access RAM COUNT1 COUNT2 COUNT3 ENDC ;************************************************* **************************** ORG 0X0000 ;Reset vector GOTO MAIN ;************************************************* **************************** ;CHUONG TRINH CHINH BAT DAU TU DAY ;PORT B LA OUT PUT XUAT TIN HIEU DE LED NHAY ;RC0 KICH LED 7 DOAN DE HIEN THI ;RC7 LA INPUT DE TANG GIA TRI CUA LED 7 DOAN ;************************************************* **************************** ORG 0x0080 ;go to start of main code MAIN MOVLB 0X0F ;CHON BANK15 SETF LATB,1 CLRF LATD,1 CLRF LATC,1 MOVLW 0X07 MOVWF ADCON1,1 CONFIG_B ;THIET LAP CAU HINH CHO PORTB MOVLW 0X00 MOVWF TRISB,1 CONFIG_D ;THIET LAP CAU HINH CHO PORTD MOVWF TRISD,1 CONFIG_E ;THIET LAP CAU HINH CHO PORTC MOVLW 0XF0 MOVWF TRISC,1 WAIT MOVLW 0X00 MOVWF COUNT,0 NEXT CALL DATA_DISPLAY BTFSC PORTC,7,1 ;kiem tra nut duoc bam hay chua GOTO NEXT ;neu ko thi tro lai CHK CALL DELAY ;tre mot luc BTFSC PORTC,7,1 ;kiem tra nut dc nha ra chua GOTO INC ;nhay den tang bien dem CALL DATA_DISPLAY ;neu khong thi hien thi led GOTO CHK ;nhay den CHK va den khi nut duoc nha ra INC INCF COUNT,F,0 INCF COUNT,F,0 ;tang bien dem moi lan 2 don vi MOVF COUNT,W,0 MOVWF LATD,0 SUBLW 0X20 ;kiem tra da hien thi xong mot vong (hien thi chu F) BTFSC STATUS,Z,1 GOTO WAIT ;nhay noi bat dau va tro lai mot vong moi GOTO NEXT ;con khong thi tiep tuc tang cho den F DATA_DISPLAY ;bieu dien hien thi LED MOVF COUNT,W,0 CALL TABLE ;goi bang lay du lieu hien thi MOVWF LATB,1 CALL DELAY RETURN DELAY CLRF COUNT1,0 CLRF COUNT2,0 MOVLW D'13' MOVWF COUNT3,0 LOOP DECFSZ COUNT1,f,0 GOTO LOOP DECFSZ COUNT2,f,0 GOTO LOOP DECFSZ COUNT3,f,0 GOTO LOOP RETURN TABLE ADDWF PCL,F,1 RETLW 0XC0 ;SO 0 RETLW 0XF9 ;SO 1 RETLW 0XA4 ;SO 2 RETLW 0XB0 ;SO 3 RETLW 0X99 ;SO 4 RETLW 0X92 ;SO 5 RETLW 0X82 ;SO 6 RETLW 0XF8 ;SO 7 RETLW 0X80 ;SO 8 RETLW 0X90 ;SO 9 RETLW 0X88 ;chu A RETLW 0X83 ;chu B RETLW 0XC6 ;chu C RETLW 0XA1 ;chu D RETLW 0X86 ;chu E RETLW 0X8E ;chu F RETLW 0XFF ;OFF ;************************************************* **************************** ;End of program END |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Pic18 voi USB | Khanhnghia | Cơ bản về vi điều khiển và PIC | 2 | 24-02-2009 11:41 PM |
interrupt in pic18 | littlephoc | Cơ bản về vi điều khiển và PIC | 9 | 18-04-2007 01:27 AM |
Bac falleaf co the viet tourial Pic bang C duoc ko | namezero | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 2 | 21-10-2005 02:39 PM |