17-12-2012, 08:13 AM
|
#52
|
Làm quen với PIC
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
:
|
Trích:
Nguyên văn bởi nhquangdt3
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;
}
}
}
|
Theo bạn mô tả , mô phỏng ok nhưng mạch thật không chạy vậy bạn hãy kiểm tra lại kĩ 2 phần sau .
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 .
|
|
|