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;
}
}
}