View previous topic :: View next topic |
Author |
Message |
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
the bootloader looks ok but the code doesn't run |
Posted: Tue Sep 01, 2020 7:41 am |
|
|
hi i have a board with pic18f45k50 (led on C0 and C2, button on RE3 crystal 8MHz clock 32MHz USB ). The board is ok, the led blinks. Now i wish to use a bootloader by USB HID. I try MLA bootloader PIC18 Non-J C18 (the flasher is USB HID v2.90a). When i plug the board (without button pressed) the flasher recognizes the board, the led blinks. I use the flasher but my application doesn't run.
The bootloader is from 0x00 to 0xFFF.
I use CCS C compiler rev 5.015 on MPLAB X IDE.
In the firmware i insert:
Code: | #define LOADER_SIZE (0xFFF)
#define LOADER_START (0)
#define LOADER_END (LOADER_SIZE)
#define APPLICATION_START (LOADER_SIZE+1)
#define APPLICATION_END (getenv("PROGRAM_MEMORY")-1)
#define APPLICATION_ISR (APPLICATION_START+8)
#ifndef _bootloader
//in the application, this moves the reset and isr vector out of the bootload
//space. it then reserves the loader space from being used by the application.
#BUILD(RESET=APPLICATION_START, INTERRUPT=APPLICATION_ISR)
#org 0, LOADER_END {}
#endif |
Where am i wrong? |
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Tue Sep 01, 2020 10:12 am |
|
|
i think the problem should be in the fuses
in my firmware is:
Code: |
#FUSES MCLR
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES ICSP1
#FUSES NOPROTECT //Code not protected from reading
//#FUSES CPB
//#FUSES CPD
#FUSES BROWNOUT //No brownout reset
#FUSES BORV22 //Brownout reset at 2.0V
#FUSES CCP2C1 //ccp pwm su c1
#FUSES PLLEN
#FUSES PLL4X
#FUSES NOCPUDIV
#FUSES HSH
#use delay(clock=32000000,crystal=8000000)
|
In the bootloader is:
Code: |
#pragma config PLLSEL = PLL3X // PLL Selection (3x clock multiplier)
#pragma config CFGPLLEN = OFF // PLL Enable Configuration bit (PLL Disabled (firmware controlled))
#pragma config CPUDIV = NOCLKDIV // CPU System Clock Postscaler (CPU uses system clock (no divide))
#pragma config LS48MHZ = SYS48X8 // Low Speed USB mode with 48 MHz system clock (System clock at 48 MHz, USB clock divider is set to 8)
#pragma config FOSC = INTOSCIO // Oscillator Selection (Internal oscillator)
#pragma config PCLKEN = OFF // Primary Oscillator Shutdown (Primary oscillator shutdown firmware controlled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF // Internal/External Oscillator Switchover (Oscillator Switchover mode disabled)
#pragma config nPWRTEN = OFF // Power-up Timer Enable (Power up timer disabled)
#pragma config BOREN = SBORDIS // Brown-out Reset Enable (BOR enabled in hardware (SBOREN is ignored))
#pragma config BORV = 190 // Brown-out Reset Voltage (BOR set to 1.9V nominal)
#pragma config nLPBOR = ON // Low-Power Brown-out Reset (Low-Power Brown-out Reset enabled)
#pragma config WDTEN = SWON // Watchdog Timer Enable bits (WDT controlled by firmware (SWDTEN enabled))
#pragma config WDTPS = 32768 // Watchdog Timer Postscaler (1:32768)
#pragma config CCP2MX = RC1 // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<5:0> pins are configured as digital I/O on Reset)
#pragma config T3CMX = RC0 // Timer3 Clock Input MUX bit (T3CKI function is on RC0)
#pragma config SDOMX = RC7 // SDO Output MUX bit (SDO function is on RC7)
#pragma config MCLRE = ON // Master Clear Reset Pin Enable (MCLR pin enabled; RE3 input disabled)
#pragma config STVREN = ON // Stack Full/Underflow Reset (Stack full/underflow will cause Reset)
#pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming Port Enable (ICPORT disabled)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled)
#pragma config CP0 = OFF // Block 0 Code Protect (Block 0 is not code-protected)
#pragma config CP1 = OFF // Block 1 Code Protect (Block 1 is not code-protected)
#pragma config CP2 = OFF // Block 2 Code Protect (Block 2 is not code-protected)
#pragma config CP3 = OFF // Block 3 Code Protect (Block 3 is not code-protected)
#pragma config CPB = OFF // Boot Block Code Protect (Boot block is not code-protected)
#pragma config CPD = OFF // Data EEPROM Code Protect (Data EEPROM is not code-protected)
#pragma config WRT0 = OFF // Block 0 Write Protect (Block 0 (0800-1FFFh) is not write-protected)
#pragma config WRT1 = OFF // Block 1 Write Protect (Block 1 (2000-3FFFh) is not write-protected)
#pragma config WRT2 = OFF // Block 2 Write Protect (Block 2 (04000-5FFFh) is not write-protected)
#pragma config WRT3 = OFF // Block 3 Write Protect (Block 3 (06000-7FFFh) is not write-protected)
#pragma config WRTC = OFF // Configuration Registers Write Protect (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protect (Boot block (0000-7FFh) is not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protect (Data EEPROM is not write-protected)
#pragma config EBTR0 = OFF // Block 0 Table Read Protect (Block 0 is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF // Block 1 Table Read Protect (Block 1 is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF // Block 2 Table Read Protect (Block 2 is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF // Block 3 Table Read Protect (Block 3 is not protected from table reads executed in other blocks)
#pragma config EBTRB = OFF // Boot Block Table Read Protect (Boot block is not protected from table reads executed in other blocks)
|
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Tue Sep 01, 2020 10:50 am |
|
|
I don't use that PIC or bootloader but from past posts, the fuses for BOTH your program and bootloader should be the same..
hopefully someone using your PIC/bootloader will reply soon..... |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Tue Sep 01, 2020 11:19 am |
|
|
Yes. The correct setting for the application is always:
#FUSES NONE
The bootloader fuses have to be correct for the final application. The
bootloader cannot change the programmed fuses. |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1345
|
|
Posted: Tue Sep 01, 2020 8:41 pm |
|
|
In addition, you only want
Code: |
#use delay(clock=32000000)
|
As adding the other parameter can generate fuses. So combination of:
Code: |
#fuses NONE
#use delay(clock=32000000)
|
After that, if you still have problems, try using your programmer to read the hex off the chip after you program it and see if the hex matches what you expect. |
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Wed Sep 02, 2020 7:28 am |
|
|
Thank you very much for your kind replies.
I did the tests you say.
I copied the fuses settings from the c18 bootloader to CCS and the led blinks (the configuration is ok). Then I used the bootloader settings but the program doesn't work.
This is my fw:
Code: | #include <18F45K50.h>
//how big is the bootloader?
//the bootloader will reside from address 0x0000 to this location. the
//application will then sit at this location+1 to the end of program memory.
#define LOADER_SIZE (0xFFF)
#define LOADER_START (0)
#define LOADER_END (LOADER_SIZE)
#define APPLICATION_START (LOADER_SIZE+1)
#define APPLICATION_END (getenv("PROGRAM_MEMORY")-1)
#define APPLICATION_ISR (APPLICATION_START+8)
#define _bootloader
#ifndef _bootloader
//in the application, this moves the reset and isr vector out of the bootload
//space. it then reserves the loader space from being used by the application.
#BUILD(RESET=APPLICATION_START, INTERRUPT=APPLICATION_ISR)
#org 0, LOADER_END {}
#fuses NONE
#use delay(clock=32000000)
#else
#FUSES NOPLLEN
#FUSES PLL3X
#FUSES NOCPUDIV
#FUSES LS48MHZ
#FUSES INTRC_IO//HSH
#FUSES PRIMARY_SW
#FUSES NOFCMEN
#FUSES NOIESO
#FUSES NOPUT
#FUSES BROWNOUT //No brownout reset
#FUSES BORV25 //Brownout reset at 1.9V
#FUSES LPBOR
#FUSES WDT_SW
#FUSES WDT32768
#FUSES CCP2C1 //ccp pwm su c1
#FUSES NOPBADEN
#FUSES T3CKC0
#FUSES SDOC7//cambiare con SDOB3
#FUSES NOMCLR
#FUSES STVREN
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES ICSP2
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPB
#FUSES NOCPD
#use delay(clock=32000000)
#endif
/* This is C18 Bootloader fuses
* #pragma config PLLSEL = PLL3X // PLL Selection (3x clock multiplier)
#pragma config CFGPLLEN = OFF // PLL Enable Configuration bit (PLL Disabled (firmware controlled))
#pragma config CPUDIV = NOCLKDIV // CPU System Clock Postscaler (CPU uses system clock (no divide))
#pragma config LS48MHZ = SYS48X8 // Low Speed USB mode with 48 MHz system clock (System clock at 48 MHz, USB clock divider is set to 8)
#pragma config FOSC = INTOSCIO // Oscillator Selection (Internal oscillator)
#pragma config PCLKEN = OFF // Primary Oscillator Shutdown (Primary oscillator shutdown firmware controlled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF // Internal/External Oscillator Switchover (Oscillator Switchover mode disabled)
#pragma config nPWRTEN = OFF // Power-up Timer Enable (Power up timer disabled)
#pragma config BOREN = SBORDIS // Brown-out Reset Enable (BOR enabled in hardware (SBOREN is ignored))
#pragma config BORV = 190 // Brown-out Reset Voltage (BOR set to 1.9V nominal)
#pragma config nLPBOR = ON // Low-Power Brown-out Reset (Low-Power Brown-out Reset enabled)
#pragma config WDTEN = SWON // Watchdog Timer Enable bits (WDT controlled by firmware (SWDTEN enabled))
#pragma config WDTPS = 32768 // Watchdog Timer Postscaler (1:32768)
#pragma config CCP2MX = RC1 // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF // PORTB A/D Enable bit (PORTB<5:0> pins are configured as digital I/O on Reset)
#pragma config T3CMX = RC0 // Timer3 Clock Input MUX bit (T3CKI function is on RC0)
#pragma config SDOMX = RC7 // SDO Output MUX bit (SDO function is on RC7)
#pragma config MCLRE = OFF // Master Clear Reset Pin Enable (MCLR pin enabled; RE3 input disabled)
#pragma config STVREN = ON // Stack Full/Underflow Reset (Stack full/underflow will cause Reset)
#pragma config LVP = OFF // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)
#pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming Port Enable (ICPORT disabled)
#pragma config XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled)
#pragma config CP0 = OFF // Block 0 Code Protect (Block 0 is not code-protected)
#pragma config CP1 = OFF // Block 1 Code Protect (Block 1 is not code-protected)
#pragma config CP2 = OFF // Block 2 Code Protect (Block 2 is not code-protected)
#pragma config CP3 = OFF // Block 3 Code Protect (Block 3 is not code-protected)
#pragma config CPB = OFF // Boot Block Code Protect (Boot block is not code-protected)
#pragma config CPD = OFF // Data EEPROM Code Protect (Data EEPROM is not code-protected)
#pragma config WRT0 = OFF // Block 0 Write Protect (Block 0 (0800-1FFFh) is not write-protected)
#pragma config WRT1 = OFF // Block 1 Write Protect (Block 1 (2000-3FFFh) is not write-protected)
#pragma config WRT2 = OFF // Block 2 Write Protect (Block 2 (04000-5FFFh) is not write-protected)
#pragma config WRT3 = OFF // Block 3 Write Protect (Block 3 (06000-7FFFh) is not write-protected)
#pragma config WRTC = OFF // Configuration Registers Write Protect (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF // Boot Block Write Protect (Boot block (0000-7FFh) is not write-protected)
#pragma config WRTD = OFF // Data EEPROM Write Protect (Data EEPROM is not write-protected)
#pragma config EBTR0 = OFF // Block 0 Table Read Protect (Block 0 is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF // Block 1 Table Read Protect (Block 1 is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF // Block 2 Table Read Protect (Block 2 is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF // Block 3 Table Read Protect (Block 3 is not protected from table reads executed in other blocks)
#pragma config EBTRB = OFF // Boot Block Table Read Protect (Boot block is not protected from table reads executed in other blocks)
*/
#include <stdio.h>
#include <stdlib.h>
#define sw1 PIN_E3
#define LED3 PIN_C0
#define LED4 PIN_C2
void main() {
disable_interrupts (GLOBAL) ;
OUTPUT_A(0);
set_tris_a (0b00101011);
OUTPUT_B(0);
set_tris_b (0b01111100);
OUTPUT_C(0);
set_tris_c (0b10000000);
OUTPUT_D(0);
set_tris_d (0);
OUTPUT_E(0);
set_tris_e (0b1011);
while (1) {
output_toggle (LED4) ;
delay_ms(500);
}
}
|
The fuses settings is: 0X0821, 0X3E1F, 0X1100, 0X0081 then all to "1". |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Wed Sep 02, 2020 7:59 am |
|
|
The program actually 'running', is dependant of the bootloader code
correctly deciding you don't want to bootload, and jumping to
the actual application. In the examples. this is:
Code: |
//This tells the loader where the application should be
#org LOADER_END+1,LOADER_END+3
void application(void) {
while(TRUE);
}
void main(void) {
if(!input(PUSH_BUTTON))
{
printf("\r\nBootloader Version 1.0\r\n");
// Let the user know it is ready to accept a download
printf("\r\nWaiting for download...");
load_program();
}
application(); //This is what actually executes the application....
}
|
Your size is wrong. The USB bootloader for a PCH chip (PIC18), is
0x2000 long, not 0x1000........
Look at usb_bootloader.h
Quote: |
#if defined(__PCM__)
#define LOADER_SIZE (0x1000)
#elif defined(__PCH__)
#define LOADER_SIZE (0x2000) //note this......
#elif defined(__PCD__)
#define LOADER_SIZE (0x2000)
#else
#error not supported
#endif
|
|
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Wed Sep 02, 2020 8:22 am |
|
|
Quote: |
The program actually 'running', is dependant of the bootloader code
|
yes i now. I meant "the led don't blinks"
Quote: | Your size is wrong. The USB bootloader for a PCH chip (PIC18), is
0x2000 long, not 0x1000........ |
?? i don't understand. In bootloader source i read:
Code: |
//Constants
#define REMAPPED_APPLICATION_RESET_VECTOR 0x1000
#define REMAPPED_APPLICATION_HIGH_ISR_VECTOR 0x1008
#define REMAPPED_APPLICATION_LOW_ISR_VECTOR 0x1018
#define BOOTLOADER_ABSOLUTE_ENTRY_ADDRESS 0x001C //Execute a "_asm goto 0x001C _endasm" instruction, if you want to enter the bootloader mode from the application via software
|
and with Pickit2 i read the bootloader .hex and he is long 0xFFF
i tried Code: | #define LOADER_SIZE (0x1FFF) |
but the led don't blinks |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1345
|
|
Posted: Wed Sep 02, 2020 9:15 am |
|
|
In the example you posted, you still have #define _bootloader so your application will be in the same address space as your bootloader. Comment that out so that your application is in the correct memory location.
Long term side note: Your define
Code: |
#define APPLICATION_END (getenv("PROGRAM_MEMORY")-1)
|
is wrong. That will allow you to place code on the same memory PAGE as the FUSES/config bits, essentially erasing them. You'll need to stop on the previous memory PAGE. This is not a problem right now, but if you get a nearly full application, you'll run into problems later. |
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Wed Sep 02, 2020 9:26 am |
|
|
thanks for reply
Quote: | In the example you posted, you still have #define _bootloader |
yes I know I do a lot of tests. I comment this line to use the bootloader but I leave it to see if the program works[/quote] |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Wed Sep 02, 2020 9:37 am |
|
|
The point is that a USB bootloader is too larger to fit in a 0x1000 space
on a PIC18. The sizes need to be 0x2000, and the bootloader has to
be recompiled with this size, and then reloaded. Then the main code has
to be recompiled with this size, and loaded with the bootloader.
The 0x1000 size is probably for the PIC16 version, which does fit in this
space. |
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Wed Sep 02, 2020 10:02 am |
|
|
sorry if I allow myself to insist but at the beginning of the main I read:
Code: | NOTE FOR BUILDING WITH C18 COMPILER:
-------------------------------------------------------------------
This project needs to be built with the full compiler optimizations
enabled, and using the Default storage class "Static" or the total
code size will be too large to fit within the program memory
range 0x000-0xFFF. |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19499
|
|
Posted: Wed Sep 02, 2020 10:11 am |
|
|
So you are not using the CCS USB bootloader.
You need to actually verify how large the bootloader is building as (look at
.lst file). Problem is that this bootloader may have built in the past to
fit in the 0x1000 space, but with modern compilers may no longer do so.
It's quite common to find code changes in size with different compiler versions
and code that would fit with a V4 compiler no longer will with a V5 compiler....
This will then prevent it from working.
You may well only have to expand the memory a little. It'll need to be a
'page' larger, but I suspect your bootloader is not fitting. |
|
|
jeremiah
Joined: 20 Jul 2010 Posts: 1345
|
|
Posted: Wed Sep 02, 2020 10:12 am |
|
|
can you post the individual hex files for both the bootloader and the application (compiled to be placed by the bootloader)? Post it using the code tags so it is formatted in a readable matter. |
|
|
ciccioc74
Joined: 23 Mar 2010 Posts: 30
|
|
Posted: Wed Sep 02, 2020 10:38 am |
|
|
bootloader
Code: | :020000040000FA
:060000000DEF07F01200F5
:020006000000F8
:0600080004EF08F01200F5
:080018000CEF08F02EEF07F0D9
:020020001200CC
:0E002200010006000000F904000002000000CA
:100030000001E46BE869E969EA69E76B010EEB6FBF
:1000400012000001E4511EE1040108BF93D1000138
:10005000400EFD6F0001600EFB6F000EFC6F2FEC79
:1000600006F00001010EE46FEC6B400EEC5D01E365
:1000700081D1EC51EA6AA00FE96E040EEA22EF6A20
:10008000EC2BF3D700016051080A01E170D1040A9A
:1000900001E131D1050A01E12CD10E0A01E1F5D0CF
:1000A000010A01E1ECD0030A01E194D0010A4CE01D
:1000B000070A40E0010A01E05BD10401020EA06FD3
:1000C0003A0EA16F010EA26FA36FA46B100EA56F65
:1000D000A66BA76BA86B700EA96FAA6BAB6B030E18
:1000E000AC6FAD6BAE6B300EAF6FB06B0E0EB16F11
:1000F000B26BB36BB46B040EB56FB66BB76B200EFF
:10010000B86FB96B080EBA6FBB6BBC6BBD6B020EE0
:10011000BE6FBF6BC06BF00EC16FC26BC36B010EC5
:10012000C46FC56BC66BC769A50ED96F04010CBF40
:1001300021D1DCD00001010EEB6F0001615101E023
:1001400013D10001EB6B10D1400E0001E56FE66B9F
:10015000000EE55D020EE6591FE22FDAE5C000F061
:10016000E6C001F0026A060E1F0BE5C0F6FFE6C00E
:10017000F7FF02C0F8FF06E0D890F636F736F836FB
:10018000E806FAE1940EA66E24DA74EC06F000019B
:10019000E52B000EE623DCD7EC6BECC0A9FFA868CA
:1001A000040EA66E74EC06F014DA0001EC51EC2B90
:1001B000006E016A026AFF0E005C000E0158000E1C
:1001C0000258EBE3F66AF76A200EF86E940EA66EFC
:1001D00000DACAD0300E635D06E10001EB5101E0A8
:1001E000C3D092D9C1D0F00E635D02E1B3D9BCD0C7
:1001F000E8680001E8190CE1E868E91909E1E86834
:10020000EA1906E161C0E8F062C0E9F063C0EAF013
:10021000E80EE96E000EEA6EEE500001611901E091
:10022000A3D0EE50621901E09FD0EE50631901E0B7
:100230009BD001E099D00001EC6B000165510001F9
:10024000EC5D01E391D0BDD9660FE96E000EEA22A4
:10025000EF50E66EE751EA6AA10FE96E000EEA225E
:10026000E552E750EF6EE72BE82B000EE923EA2377
:10027000200EE75D01E1E4D80001EC2BDED7E0D8E9
:100280000001E869E969EA6970D00401070EA06F0E
:1002900061C0A1F462C0A2F463C0A3F464C0A4F47A
:1002A00065C0A5F461C0F6FF62C0F7FF63C0F8FF48
:1002B0000001EC6B000165510001EC5D14E2F00EF1
:1002C0000001635D0AE161510001EC25A96EA66A97
:1002D000A68084D9A8CFEFFF04D071D97FD9F5CFFC
:1002E000EFFFEC2BE7D704010CBF44D00001400E18
:1002F00033D041D839D004010C0EA06F010EA16F8C
:10030000A26F160EF66E100EF76E0900F5CFA3F46D
:100310000A00F5CFA4F4060EA56F100EA66FA76B0A
:10032000A86B0D0EA96F600EAA6F400EAB6FAC6B81
:10033000AD6BAE6BAF69B069B169B269B36BB469EB
:10034000B569B66BB769B869B969BA69BB69BC699F
:1003500004010CBF0FD00001F96F0001A00EF76F70
:10036000040EF86F09EC06F00001E46B120050D89F
:100370000001E46B1200F66A100EF76EF86A0001D5
:10038000ED6B400E0001ED5D0DE209000001ED5145
:10039000EA6AA10FE96E000EEA22F5CFEFFF000135
:1003A000ED2BEFD700010D0EA76F0001600EA86FB7
:1003B000F66A100EF76EF86A940EA66E0001B50E7E
:1003C000F36FE8D83F0EF66E100EF76EF86A000174
:1003D0003F0EED6F0001ED51EA6AA10FE96E000ECC
:1003E000EA22EF50F56E0C000001ED511F0B07E102
:1003F000E4D8A40EA66E0001B50EF36FCBD80A00A8
:100400000001ED5101E103D00001ED07E3D7120037
:1004100004D8FF000000000012000001FE69FF691F
:100420000001FEC000F0FFC001F0FE07000EFF5B00
:100430000050011004E06092606ABFD8F1D712004A
:100440000001EF6BE7C000F0016A026A0050000192
:10045000E85DF66E01500001E959F76E02500001A7
:10046000EA59F86E1F0EF6140001F06FE00EF61652
:100470000001EE6B200E0001EE5D1FE20001F05165
:1004800015E10001E7510FE00001EF51EA6AA10F09
:10049000E96E000EEA22EF50F56E0D000001EF2B21
:1004A0000001E70702D0F5680D0004D0F5680D00E3
:1004B0000001F0070001EE2BDDD70A00A40EA66EA6
:1004C0000001B50EF36F66D80001EE6B0001E75135
:1004D0000001EE5D18E20001EF510001EE25EA6A2D
:1004E000A10FE96E000EEA22EF50E66E0001EE5118
:1004F000EA6AA10FE96E000EEA22E552E750EF6EBC
:100500000001EE2BE3D7120061C0F6FF62C0F7FFD7
:1005100063C0F8FF0001F16B000165510001F15D5E
:1005200018E23A0E0001D88065550001F125EA6A0B
:10053000660FE96E000EEA22EF50F56E0C00C40E55
:10054000A66E0001B50EF36F25D809000001F12B4E
:10055000E3D712000001F26B000165510001F25D6A
:1005600018E2000161510001F225A96E3A0E000166
:10057000D88065550001F225EA6A660FE96E000E23
:10058000EA22EF50A86E040EA66E23D80001F22BCB
:10059000E3D71200F29EB50E0001F35D05E0030EF5
:1005A000D36E0300FED7FF00550EA76EAA0EA76EEE
:1005B000A682A6B2FED7A69412000400120009007B
:1005C00012003A0E0001D88065550001EC25EA6A58
:1005D00012000001B50EF36FCAEF02F0F2DFA60FB2
:0805E000E96E040EEA2212008C
:0805E800615033E16596040146
:1005F00000513C0BE842E8420D0829E1180E0219AF
:1006000024E1040E031921E1100E026F040E036FA2
:100610000401EA6BEA51006E016A080E005C000EEC
:10062000015813E2EA51EA6A180FE96E040EEA2251
:10063000EF50E66EEA51EA6A100FE96E040EEA2204
:10064000E552E750EF6EEA2BE5D70AD8010C3AD80D
:10065000010C040E615C03E165964BD8010C000CA3
:10066000040104BF046B0401E96BE16BE26BE76B0F
:10067000E86B50EC04F00401EB6BEB51006E016A87
:10068000010E005C000E01581BE2E25119E1EB5132
:10069000F66EF76AD890F636F736AC0EF6260F0EE1
:1006A000F7220900F5CF00F00800F5CF01F004D0E3
:1006B00001C0FAFF0050F96EFBDF0401EB2BDDD720
:1006C000F8EF03F0020E0401E15D0EE178D80401B9
:1006D000180E026F040E036F080E016F00BD02D0EA
:1006E000C80E05D0880E03D0BCD8CBD88C0E006FB6
:1006F0001200040E0401F55D09E112C463FF6350AA
:10070000000802E2050E01D0030EF56F0401E105B9
:1007100010E111D8020E0401E95D03E10401840E29
:1007200006D0040104BD02D0C80E01D0880E046FAB
:10073000120031EF04F00401080EE75D000EE859E5
:100740000DE2E7C4ECF4E8C4EDF4E95102E1010E76
:1007500003D0E90506E1020EE96F03D0080EEC6F45
:10076000ED6B0401049304910401ED5104010413A1
:10077000ECC405F40401EC51E75DE76FED51E85975
:10078000E86F180EE56F040EE66F0401F6A30ED0B5
:100790000401EC51ED1112E0E3C4F6FFE4C4F7FFED
:1007A0000800F55063D8EC07ED5BF2D70401EC517B
:1007B000ED1104E06ED8EC07ED5BF8D71200030EE4
:1007C000040100150401EF6F01C4EEF4E751EE25BA
:1007D000E76FE851EF21E86F180EE36F040EE46F46
:1007E000EE51EF1104E055D8EE07EF5BF9D7120098
:1007F00060980401E25105E144D8840E006F0401C1
:100800001DD0040110AF1CD00401E7510401165D96
:100810000401E8510401175904E216C4E7F417C4AF
:10082000E8F489DF0401010EE16F2BD8800E006F20
:100830000401180E066F040E076FC80E046F120035
:100840000401020EE16F0401056BC80E046F040180
:10085000080E016F180E026F040E036FC80E006FB2
:1008600012000401E16B0401046B1200E5C4E9FF0E
:10087000E6C4EAFFEF6EE52B000EE623E32BE4234C
:1008800012000401080E016F100E026F040E036FB8
:100890001200E3C4E9FFE4C4EAFFEF5036EF04F0CE
:1008A00004011051600BE842E842E842E842E842A5
:1008B000000901E012001151070A44E00B0A42E06E
:1008C000070A35E0010A23E00B0A1FE0020A1DE0D7
:1008D000030A19E0080A10E0010A0CE00F0A08E018
:1008E000030A01E0120013D90401040EF56F12008F
:1008F000A3EF04F0DAEF04F00AD90401F70EE36F76
:10090000040EE46F0ED0F9EF04F029EF05F0FFD8E4
:10091000040114510401E36FE46BF80EE327040EA5
:10092000E4230401F6930401010EE76F1200EFD8EF
:1009300004011451EA6AF80FE96E040EEA2212C4A7
:10094000EFFF12001200800E0401105D32E113511E
:10095000030A1FE0010A0AE0030A29E1D8D80401CA
:10096000EC0EE36F0E0EE46F120E1ED0B6D8A20E80
:10097000F6260F0EC4D8020E0401F76AE325F66EC0
:10098000E451F7220900F5CFE7F40A00F5CFE8F4C7
:100990000ED0A3D8A60EF6260F0EB1D8E3C4F6FFEC
:1009A000E4C4F7FF0800F5500401E76FE86B0401A9
:1009B000F6831200ACD86B6A6C6A6D6A6E6A6F6AF5
:1009C000706A716A0401F46F0401F80EF26F040E8C
:1009D000F36F01EC07F012C4F7F40401125104E1C3
:1009E0000401050EF56F12000401060EF56FF4EF19
:1009F00005F00401186B196B040110511F0B020A5A
:100A00000DE0030A09E0010A16E181D80401F6A10C
:100A100012D0040118830FD07AD80DD050D801E03D
:100A2000010E64D8E5C4E9FFEA6EEF50040B03E061
:100A30000401010E186F0401E2050AE10401180E19
:100A4000E36F040EE46F0401F6930401020EE76FF6
:100A50001200040112050EE110511F0B00090AE1FA
:100A600056D8030E0401115D03E10401F68102D0A2
:100A70000401F6910401125121E110511F0B0208EB
:100A80001DE114510F0B000919E019D801E0010E06
:100A90002DD8030E0401115D02E1840E03D014AFC2
:100AA00007D0400EE5C4E9FFE6C4EAFFEF6E12008E
:100AB000880EE5C4E9FFE6C4EAFFEF6E120027D80E
:100AC000040114510F0B080DF350016A000F006E62
:100AD000040E01221451800B120019D80401125186
:100AE000F66EF76AD890F636F7361200040DF3501A
:100AF00004010024E56F000E0120E66F1200F722CA
:100B00000900F5CFE3F40A00F5CFE4F41200040184
:060B1000010EE26F12006D
:0A0B1600040110511F0B010801E05B
:100B20001200145101E01200060E115D24E1135170
:100B3000230A1FE0010A0DE0030A1BE1BDD80401EE
:100B4000F70505E10401100EE36F0F0EE46F090EC7
:100B50000DD0B2D80401F70505E10401850EE36F5D
:100B60000F0EE46F0401F70504E11D0E0401E76FA9
:100B7000E86B0401F68304011051600BE842E8427F
:100B8000E842E842E842010801E0120011510B0A74
:100B900025E0080A17E0090A11E0080A09E00B0A33
:100BA00005E0080A01E01200F2EF05F0F3EF05F0AE
:100BB00083D80401F40EE36F000E09D07DD813C46E
:100BC000F4F0120079D80401F50EE36F000EE46F23
:100BD0000401F6930401010EE76F12006DD812C4F0
:100BE000F5F01200120012000001F66B1E0E6B6E83
:100BF0000401400E096F200E0A6F040E0B6F880E61
:100C0000086F0401600E0E6F040E0F6F400E0C6F24
:100C100012000001F951400802E2400EF96FFA6B30
:100C2000F951FA5D13E2FA51EA6AF725E96EF851D3
:100C3000EA22EF50E66EFA51EA6A600FE96E040E9E
:100C4000EA22E552E750EF6EFA2BEAD7F9C00DF42D
:100C5000400E04010C170C7D880E0C1312000001CD
:100C6000F66B040108BF25D009510001D880FD555D
:100C700002E209C4FDF0F66BFD51F65D13E2F65198
:100C8000EA6A200FE96E040EEA22EF50E66EF65192
:100C9000EA6AFB25E96EFC51EA22E552E750EF6E65
:100CA000F62BEAD70401400E096F0817087D880E5D
:100CB00008130001F65112000401020EE26F120047
:100CC00060B606D0606A646A60860401010EF56F42
:100CD0000401F50508E160BA06D0656A646A6480BB
:100CE0006488020EF56F12000401F55101E1120053
:100CF00065B446D860B2120065B059D865B817D847
:100D000065BA45D8030E0401F55D01E21200040145
:100D1000F06B040EF05D0AE265A608D0F4EC02F078
:100D2000000901E165960401F02BF3D7120064CFAE
:100D3000F1F4040E646E659860828B90A494A38491
:100D40000300A450040B05E1D050080B02E103009E
:100D5000F8D7A3940401F15164120001D50EFE6F7F
:100D6000020EFF6F0001FEC000F0FFC001F0FE07A1
:100D7000000EFF5B0050011002E00400F3D71200E8
:100D80006092649465A402D06594FCD712006AA0B6
:100D90000CD0800E0401005D07E1840E0401045DA7
:100DA00003E104018C0E006F6A90659A1200676A75
:100DB000656A9F0E666E7B0E646E636A6B6A6C6A10
:100DC0006D6A6E6A6F6A706A716A160E6A6E65A6DF
:100DD00004D06596DDEC02F0FAD7609831EC04F0AF
:100DE0000401080E016F100E026F040E036F8C0ECB
:100DF000006F0401F6910401F76B0401030EF56F17
:100E00001200F2C4E9FFF3C4EAFF0401F45104E064
:0A0E1000EE6A0401F407F9D712009E
:060E1A000F0EC16E93886B
:100E200081B804D00F015C8904D003D08B842EEFED
:100E300007F0060EF66E100EF76E0900F5CF00F003
:100E40000800F5CF01F00D0E001802E1600E011848
:100E500002E100EF08F02EEF07F01200F26A13EE45
:100E600000F023EE00F0F86AFC6A60A602D00DECF8
:100E700002F012D8040060EC06F074EC06F024D8FE
:100E800022D8060E0401F55D05E16050020B02E177
:100E900021EC00F0EFD71200800E9B6E700ED36E27
:100EA000100ED26ED2AEFED7900EB56E140E626EDC
:100EB0000401F56B0401F66B0401F76B18EC00F00C
:100EC0008B6A946A120012000401F907000EFA5BA3
:100ED000F951FA110AE1F96B4E0EFA6F060E040190
:0C0EE000F55D02E28B8012008B701200A6
:040EEC0012010002ED
:100EF00000000008D8043C000101010200010902C1
:100F00002900010100C032090400000203000000B2
:100F1000092111010001221D000705810340000184
:100F2000070501034000010403090434034D00696F
:100F300000630072006F00630068006900700020A9
:100F40000054006500630068006E006F006C006F65
:100F50000067007900200049006E0063002E002623
:100F6000034800490044002000550053004200207F
:100F70000042006F006F0074006C006F006100643D
:100F800000650072000600FF0901A1011901294056
:100F9000150026FF00750895408100190129409130
:0E0FA00000C0FE0EFE0E270F2B0F5F0F160B6C
:020FAE00000E33
:100FB000F36E00EE00F0080E01D81200EA6002D0D5
:0E0FC000EE6AFCD7F350E9601200EE6AFCD72F
:061000000EEF00F01200EB
:020000040030CA
:0100000021DE
:0100010008F6
:010002001FDE
:010003003EBE
:0100050011E9
:010006008178
:010008000FE8
:01000900C036
:01000A000FE6
:01000B00E014
:01000C000FE4
:01000D0040B2
:00000001FF
|
blinking RC2
Code: |
:0410000018EF08F0ED
:08100800EA6A0B0EE96EEF50DD
:101010000DE00A0E016E006A002EFED7012EFBD7EE
:101020005F0E006E002EFED7EF2EF3D750EF08F0C4
:10103000F86AD09EC150F00BC16E000E0F015B6FBD
:101040005F6F5C6F5D6F5E6F0101886B9A6A996A72
:10105000986A046A056AF29CF29EF2BEFDD7926A13
:10106000896A2B0E926E936A8A6A7C0E936E946ADA
:101070008B6A800E946E956A8C6A000E956E9690BF
:101080009692969496968D6A968096829694968677
:1010900094948B74020E0A6EFA0E0B6E0001B4D794
:1010A0000A2E01D002D00101F7D70101F1D70300C8
:00000001FF
;PIC18F45K50
;CRC=16E6 CREATED="02-set-20 18:35"
|
|
|
|
|