![]() |
|
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 |
|
![]() |
#1 |
Đệ tử 9 túi
|
Code:
;======================================== ;Author: NHH ;Date: 18/03/06 ;Hardware: PIC16F877A ; QUARTZ 10MHz ;======================================== PROCESSOR PIC16f877A INCLUDE<P16f877A.inc> __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _CPD_OFF &_LVP_OFF ;======================================== COUNT1 EQU 0x20 COUNT2 EQU 0x21 COUNT3 EQU 0x22 w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving pclath_temp EQU 0x73 ; variable used for context saving ;===============MAIN PROGRAM=========== ORG 0x000 GOTO MAIN ORG 0004h GOTO INTERRUPT ;============INTERRUPT PROGRAM========= INTERRUPT movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ;**************************************** BCF INTCON,TMR0IF DECFSZ COUNT1,F RETFIE MOVLW d'154' MOVWF COUNT1 INCF COUNT2,F MOVF COUNT2,W CALL TABLE MOVWF PORTB CALL CHECK_YELLOW CALL CHECK_GREEN CALL CHECK_RED MOVLW d'10' SUBWF COUNT2,W BTFSS STATUS,0 RETFIE CLRF COUNT2 INCF COUNT3,F MOVF COUNT3,W CALL TABLE MOVWF PORTC RETFIE ;**************************************** movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;............................................................................................. MAIN BCF STATUS,RP1 BSF STATUS,RP0 ; select BANK 1 CLRF TRISB ; PORTB,C,D output CLRF TRISC CLRF TRISD BSF OPTION_REG,PS0 ;TMR0 rate 1: 64 BCF OPTION_REG,PS1 BSF OPTION_REG,PS2 BCF OPTION_REG,PSA ;Prescaler is assigned to the Timer0 module BCF OPTION_REG,T0CS ;enable TMR0 BCF STATUS,RP0 ;select BANK 0 BSF INTCON,GIE BSF INTCON,TMR0IE BCF INTCON,TMR0IF MOVLW d'154' MOVWF COUNT1 MOVLW d'1' MOVWF COUNT2 CLRF COUNT3 MOVLW b'00000110' MOVWF PORTB MOVLW b'00111111' MOVWF PORTC MOVLW b'00000100' MOVWF PORTD GOTO $ ;======================================== CHECK_YELLOW BTFSS PORTD,0 GOTO $+2 RETURN MOVLW d'2' SUBWF COUNT3,W BTFSS STATUS,0 RETURN MOVLW b'00000110' MOVWF PORTD RETURN CHECK_GREEN BTFSC PORTD,0 GOTO $+2 RETURN MOVLW d'2' SUBWF COUNT3,W BTFSS STATUS,0 RETURN GOTO MAIN RETURN CHECK_RED MOVLW d'3' SUBWF COUNT3,W BTFSS STATUS,0 RETFIE MOVLW d'1' MOVWF COUNT2 CLRF COUNT3 MOVLW b'00000110' MOVWF PORTB MOVLW b'00111111' MOVWF PORTC MOVLW b'00000001' MOVWF PORTD RETURN ;----------------------------------------------------------------------- ; Bang tra ve Digital tu 0 den 9 ; Chi so dau truy cap la 0 ; Bang o PAGE 0 ORG 0x90 TABLE ;----------------------------------------------------------------------- ADDWF PCL, F ; bat dau tai 0x80 RETLW b'11111111' ; NO DISPLAY RETLW b'00000110' ; 1 RETLW b'01011011' ; 2 RETLW b'01001111' ; 3 RETLW b'01100110' ; 4 RETLW b'01101101' ; 5 RETLW b'01111101' ; 6 RETLW b'00000111' ; 7 RETLW b'01111111' ; 8 RETLW b'01101111' ; 9 RETLW b'00111111' ; 0 END ![]()
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
![]() |
![]() |
![]() |
#2 |
Đệ tử 6 túi
|
gop y ve ct den GT
#include<16f877a.h>
#fuses nowdt,noprotect,nolvp,xt,put #use delay(clock=4000000) #use fast_io(a) #use fast_io(b) #use fast_io(d) #byte portd=0x8 #byte portb=0x6 #byte porta=0x5 #bit a0=porta.0 #bit a1=porta.1 void main() {signed int x,y,i,chuc,dv; int a[10]={192,249,164,176,153,146,130,248,128,144}; set_tris_a(0b00); set_tris_b(0); set_tris_d(0b000); denxanh: x=5; portd=0b110; goto loop; denvang: x=3; portd=0b101; goto loop; dendo: x=6; portd=0b011; goto loop; loop: while(1) {chuc=x/10; dv=x%10; for(i=0;i<50;i++) {portb=a[chuc]; a0=0; a1=1; delay_ms(10); portb=a[dv]; a1=0; a0=1; delay_ms(10); }x--; if(x>=0) goto loop; else y=portd; switch(y) {case 6: {goto denvang; break;} case 5: {goto dendo; break;} case 3: {goto denxanh; break;}}}} |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |