Thật là gian khổ với PIC quá.
Em làm xong board mạch test PIC16F877A, nạp source qua Tiny bootloader đã OK. Làm cái file hex đơn giản nhất trên đời là test port B bằng CCS. Mô phỏng proteus OK. Đổ vào mạch qua TinyBL OK. Nhưng triệu chứng như sau :
- Nếu test đơn giản là cho port B = 0x00 hoặc 0xFF hoặc từng bit riêng thì PIC chạy đúng, Led sáng hoặc tắt đúng. Nhưng mà thêm phần lặp delay để nó nháy led thì PIC chạy nửa chừng rồi treo. Đo áp port B cũng bằng 0V k thay đổi gì cả.
- Nạp hex trực tiếp bằng mạch nạp ngoài (đã nạp firmware bootloader tốt) thì nó vẫn không chạy đúng (nhấp nháy Led).
- Dùng MPLAB biên dịch thử đoạn asm nháy led (của bác ntc), proteus vẫn chạy tốt, nhưng qua mạch thật Led vẫn k chịu nháy.
- Tình hình là cứ đến delay_ms là nó đứng.
Suy luận của em : đã nạp fw bootloader cho PIC và chạy tốt, bật/tắt vài con Led PIC chạy đúng. Vậy chứng tỏ mạch nạp đúng, mạch test đúng, mạch Bootloader đúng.
Vậy hà cớ gì nhấp nháy không được ?
Em đã thử trên 2 con, và phản ứng là như nhau. Sure là PIC không điên.
Thạch anh 20MHz, tụ 33p (chắc k quan trọng).
Mấy bác gỡ dùm em với. Hiện tượng hiếm có
#include <16F877A.h>
#include "def_877A.h"
#device *=16
#device adc=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
trisb = 0x00;
trisc = 0x00;
portc = 0x00;
portb = 0xff;
While(1)
{
portb = 0x00; // <-- nếu thay bằng 0xFF thì Port B sáng, 0x00 là Led tắt luôn.
delay_ms(250); //<-- dừng ở đây thì phải (?)
portb = 0xff;
delay_ms(250);
}
}
proteus và hex nằm trong rar bên dưới. Chú thích nhỏ là em lười cắm mass rời cho Led nên cắm nguyên bus vào 1 port c và dập nó xuống đất.