![]() |
tiny bootloader for 16f887
Xin giúp em với.
Em đang làm một mạch ứng dụng sử dụng con pic 16f887, mạch thì đã xong rồi nhưng nạp bằng tinybootloader hoài mà vẫn ko được, mỗi lần nạp đều báo là ko tìm thấy pic, có ai gặp lỗi này chưa vậy? giúp em khắc phục với. Em sử dụng trình biên dịch CCS 4.0.. mạch tiny bootloader giống như sơ đồ của anh F , em đã kiển tra nhiều lần nhưng vẩn ko nạp được mong các huynh giúp đỡ giùm.. Thanks for all ... |
Bạn thiết lập phần mềm giao tiếp trên host PC ra sao (nên chụp hình và post lên)? Firmware do bạn tự viết hay lấy ở đâu? Nếu firmware do bạn tự viết thì phần code thiết lập cho USART ra sao? Nếu bạn lấy từ chỗ khác thì cho biết link để chúng tôi xem lại cấu hình.
Bạn phải kiểm tra các tham số của cả hai bên (host PC và firmware) cho tương thích. Thân, |
Trích:
Thân. |
Trích:
Thân, |
Trích:
Em đã nạp firmware rồi ,firmware co sẵng trong phần tinybootloader mà em dow về. Em viết bằng trình dịch CCS kô biết ai có thể chỉ dẩn viết firmware bằng C ko ? ASM thi em pó tay ,khi nạp firmware vào pic em ko biết có đúng nữa ko? Đành phải về tự mò thêm nữa , có gì mong anh em chỉ giúp em thêm. Cho em hỏi một câu hơi chuối nữa nha ,mỗi lần muốn nạp pic bằng tiny bootloader ta đều phải nạp firmware hết phải ko? giống như AVR vậy phải ko? THANKS ALL.... |
Trích:
Chương trình ứng dụng của bạn có thể viết trong C hay hợp ngữ, còn firmware cho PIC thì nên viết bằng hợp ngữ cho nhỏ gọn. Đề nghị bạn đọc thêm về bootloader cho PIC, vì có vẻ như bạn chưa hiểu rõ về nó. Nếu dùng bootloader thì firmware cho bootloader chỉ cần nạp vào PIC lần đầu tiên, sau đó bootloader sẽ chịu trách nhiệm nạp chương trình ứng dụng mới vào PIC mỗi khi cần thay đổi chương trình ứng dụng. Thân, |
Bootloader for 16f887
Chao anh NAM
em tim tren mang duoc chuong trinh bootloader cho pic 16f887 nhung em muon cau hinh cho cac thong so sau thach anh 20MHZ baudrate 9600 anh co the chinh sua giup em cam on anh day la chuong trinh radix DEC LIST P=16F887, F=INHX8M ; change also: Configure->SelectDevice from Mplab ; auto-start at 4MHz internal osc xtal EQU 4000000 ; you may also want to change: _HS_OSC _XT_OSC baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200 ;xtal EQU 4000000 ; you may also want to change: _HS_OSC _XT_OSC ;baud EQU 19200 ; standard TinyBld baud rates: 115200 or 19200 ; The above 3 lines can be changed and buid a bootloader for the desired frequency (and PIC type) ;************************************************* ******************* ; Tiny Bootloader 16FxxxA series Size=100words ; claudiu.chiculita@ugal.ro ; http://www.etc.ugal.ro/cchiculita/so...bootloader.htm ;************************************************* ******************* #include "../icdpictypes.inc" ;takes care of: #include "p16fxxxA.inc", max_flash, IdTypePIC #include "../spbrgselect.inc" #include "../bankswitch.inc" #define first_address max_flash-100 ; 100 word in size __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V errorlevel 1, -305 ; suppress warning msg that takes f as default cblock 0x20 buffer:80 endc cblock 0x78 crc contor i cnt1 cnt2 cnt3 flag endc SendL macro car movlw car movwf TXREG endm ;0000000000000000000000000 RESET 00000000000000000000000000 ORG 0x0000 PAGESEL IntrareBootloader GOTO IntrareBootloader ;view with TabSize=4 ;&&&&&&&&&&&&&&&&&&&&&&& START &&&&&&&&&&&&&&&&& ;---------------------- Bootloader ---------------------- ; ;PC_flash: C1h AddrH AddrL nr ...(DataLo DataHi)... crc ;PIC_response: id K K ORG first_address nop nop nop nop org first_address+4 IntrareBootloader ;init serial port clrf STATUS bsf STATUS,RP0 ;BANK1_ movlw b'00100100' movwf TXSTA movlw spbrg_value movwf SPBRG BANK0_ movlw b'10010000' movwf RCSTA ;wait for computer call Receive sublw 0xC1 ;Expect C1 skpz goto way_to_exit SendL IdTypePIC ;PIC type ;SendL IdSoftVer ;firmware ver x MainLoop clrf STATUS ;bank0 SendL 'K' mainl clrf crc call Receive ;H bsf STATUS,RP1 ;bank2 movwf EEADRH movwf flag ;used to detect if is eeprom call Receive ;L bsf STATUS,RP1 ;bank2 movwf EEADR call Receive ;count movwf contor movwf i incf i movlw buffer-1 movwf FSR rcvoct call Receive incf FSR movwf INDF decfsz i goto rcvoct movf crc,f ;check checksum skpz goto ziieroare ;write bsf STATUS,RP1 ;bank switch 0->2 movlw buffer movwf FSR writeloop ; write 2 bytes = 1 instruction clrwdt movf INDF,w movwf EEDATA incf FSR movf INDF,w movwf EEDATH incf FSR BANK3_ ;bank 2->3 bcf EECON1,EEPGD btfss flag,6 ;is eeprom (or flash) bsf EECON1,EEPGD bsf EECON1,WREN movlw 0x55 movwf EECON2 movlw 0xaa movwf EECON2 bsf EECON1,WR nop nop waitwre ; btfsc EECON1,WR ;for eeprom writes (wait to finish write) ; goto waitwre bcf EECON1,WREN BANK2_ ;bank2 incf EEADR ;does not cross zones btfss flag,6 ; if writing to EEPROM, skip first counter dec. decf contor decfsz contor goto writeloop goto MainLoop ziieroare SendL 'N' goto mainl Receive clrf STATUS movlw xtal/2000000+1 ; for 20MHz => 11 => 1second movwf cnt1 rpt2 clrf cnt2 rpt3 clrf cnt3 rptc btfss PIR1,RCIF ;test RX goto $+4 movf RCREG,w ;return in W addwf crc,f ;compute checksum return clrwdt decfsz cnt3 goto rptc decfsz cnt2 goto rpt3 decfsz cnt1 goto rpt2 ;timeout: way_to_exit ;exit in all other cases; must be BANK0/1 ;BANK0_ bcf RCSTA, SPEN ; deactivate UART goto first_address ;************************************************* ************ ; After reset ; Do not expect the memory to be zero, ; Do not expect registers to be initialised like in catalog. END |
Trích:
Code:
xtal EQU 20000000 Code:
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC Thân, |
Trích:
Thân, |
em mới học VDK thôi , các bác cho em hỏi cái firmware là cái gì của pic? . Tại sao mình phải nạp vào con pic để làm gì ạ . Con về cái Bootlootder là gì ? , mong các bác chi giáo cho đệ tử ngu muội này.
|
Trích:
Bạn xem luồng này về các khái niệm liên quan đến bootloader: http://www.picvietnam.com/forum/showthread.php?t=130 Thân, |
Cho e hỏi tiếp vậy Firmware có phải là mình lập trình rồi nó sẽ được ghi vào VDK không ?
Cảm ơn bác namqn . e cũng được biết nếu mình dùng Bootloader thì mình dùng con Max232 nạp thẳng trực tiếp vào vi điều khiển không cần nạp qua mạch nạp đúng ko ạ !. cho e hỏi nếu mà mình dùng con Max232 thì dùng con RS232 để làm chi ? . E đọc Datasheet thấy nó giống cổng COM , vậy chắc là mình nạp qua cống USB được không hả bác?. Mong bác chỉ giáo cho e .Cảm ơn bác. |
Trích:
Con MAX232 và con RS232 của bạn khác nhau ra sao? Tại sao nó giống cổng COM thì lại nạp qua cổng USB được? Bootloader dùng một phương pháp truyền thông nào đó (RS-232, I2C, SPI, USB, ...) để gửi firmware của chương trình ứng dụng từ host đến PIC. Sau đó PIC sẽ tự ghi firmware này vào bộ nhớ chương trình và thực thi firmware mới (điều kiện tiên quyết để sử dụng bootloader là PIC phải có khả năng tự ghi vào bộ nhớ chương trình, không phải PIC nào cũng có khả năng này). Thân, |
Em hiểu rồi . Vậy Pic 16F877A có thể tự ghi vào bộ nhớ chương trình không hả bác ? Em mới tìm hiểu con này à.mới tìm hiểu con này à.
|
Đây là chương trình dùng ngắt Timer0 định thì 1s.
Đầu tiên led ở chân RB0 sáng, sau 1s sẽ dịch sang trái, nghĩa là led 1 trên chân RB1 sáng , lần lượt như vậy cho các led trên portB và lặp lại mãi mãi. Em có đoạn code sau: Code:
#include <16F877A.h> int16 count; int8 a; có ý nghĩa là gì? còn set_timer0(6); là gì ? Đáng lẽ ra là phải set_timer0(8); chứ , do set_timer0(value); là xác định giá trị ban đầu (8bit) cho timer0. |
Múi giờ GMT. Hiện tại là 06:40 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam