![]() |
|
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ử 1 túi
Tham gia ngày: Apr 2011
Bài gửi: 18
: |
mình thử viết code dùng CCS điều khiển mấy chân IO của PIC16f877A. mô phỏng thì chạy ngon lành nhưng khi nạp vào chip thì không chạy. mình có POST code lên. ai biết chỉ giúp với. thanks.
Code:
#include<16F877A.h> #fuses NOWDT,PUT,HS,NOPROTECT #define BUTTON_THUAN pin_B5 #define BUTTON_NGHICH pin_B4 #define BUTTON_TANG pin_B3 #define BUTTON_GIAM pin_B2 #define LED_THUAN pin_B1 #define LED_NGUOC pin_B0 #define DIEU_KHIEN_QUAY_THUAN pin_B7 #define DIEU_KHIEN_QUAY_NGUOC pin_B6 #define NGUOC 1 #define THUAN 2 #define DUNG 3 #define TAN_SO_BAM 30 #use delay (clock = 4000000 ) //dung thach anh 20Mhz #use rs232 (baud=9600 , parity=n , xmit=pin_C6 , rcv=pin_C7 ) #byte OPTION_REG=0x81 int8 chieu_quay; int16 van_toc=15,van_toc_max=30; int16 milisec; #int_TIMER0 void TIMER0_isr(void) { set_timer0(0xD9) ; // Initial Value for 1ms Interrupt clear_interrupt(int_timer0); // Clear TIMER0 interrupt flag milisec++; if(milisec>1000) milisec=0; if(input(BUTTON_THUAN)==0) { chieu_quay=THUAN; output_bit(LED_THUAN,1); output_bit(LED_NGUOC,0); output_bit(DIEU_KHIEN_QUAY_NGUOC,0);//tat quay nguoc if(milisec<van_toc) { output_bit(DIEU_KHIEN_QUAY_THUAN,1); output_bit(DIEU_KHIEN_QUAY_NGUOC,0); } else if(milisec<TAN_SO_BAM) { output_bit(DIEU_KHIEN_QUAY_THUAN,0); output_bit(DIEU_KHIEN_QUAY_NGUOC,0); } else milisec=0; } else if(input(BUTTON_NGHICH)==0) { chieu_quay=NGUOC; output_bit(LED_THUAN,0); output_bit(LED_NGUOC,1); if(milisec<van_toc) { output_bit(DIEU_KHIEN_QUAY_THUAN,0); output_bit(DIEU_KHIEN_QUAY_NGUOC,1); } else if(milisec<TAN_SO_BAM) { output_bit(DIEU_KHIEN_QUAY_THUAN,0); output_bit(DIEU_KHIEN_QUAY_NGUOC,0); } else milisec=0; } else { output_bit(LED_THUAN,0); output_bit(LED_NGUOC,0); } } void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_1,0,1); enable_interrupts (int_timer0);//ngat timer 0 enable_interrupts ( global ); //cho phep ngat toan cuc OPTION_REG=0x07; while(1) { output_high(pin_D0); output_high(pin_D1); output_high(pin_D2); output_high(pin_D3); output_high(pin_D4); output_high(pin_D5); output_high(pin_D6); output_high(pin_D7); output_B(0x00); output_A(0x00); output_C(0x00); Delay_ms(500) ; Output_low (pin_D0); Output_low (pin_D1); Output_low (pin_D2); Output_low (pin_D3); Output_low (pin_D4); Output_low (pin_D5); Output_low (pin_D6); Output_low (pin_D7); output_B(0xFF); output_A(0xFF); output_C(0xFF); Delay_ms (500 ); } // TODO: USER CODE!! while(1) { if(input(BUTTON_TANG)==0) { Delay_ms(100); van_toc++; if(van_toc>van_toc_max) van_toc=van_toc_max; } else if(input(BUTTON_GIAM)==0) { Delay_ms(100); van_toc--; if(van_toc<=0) van_toc=0; } } } thay đổi nội dung bởi: hatuan296, 17-12-2012 lúc 08:06 AM. |
![]() |
![]() |
![]() |
#2 | |
Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
: |
Trích:
1/Phần config của thạch anh , mình thấy bạn set là HS trong khi clock lại là 4000000 . 2/Trên mạch thật của bạn có điện trở kéo lên cho MCLR chưa . Các chân nối với phím BUTTON của bạn có các điện trở kéo lên chứ ? HY vọng giúp được bạn . |
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 1 túi
Tham gia ngày: Apr 2011
Bài gửi: 18
: |
Trích:
|
|
![]() |
![]() |
![]() |
|
|