This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

my reset function

/*hi all..
who can tell me my code right or have any bug? and anyone have better than the function ,but no assembler.*/
main()
{
/*reset function*/
unsigned char code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // reset code.

(*((void (*)())(rst)))(); // call and run the reset code.

}


jane

Parents
  • thanks russell...
    i think of the reset function like the "goto" sentence.it can reset anyway.the keil faq said:You should note that the software reset sequence above does not clear the 8051 interrupt system or reset any 8051 peripherals. When the above code is executed inside an interrupt routine, the 8051 blocks subsequent interrupts. Therefore, this sequence cannot be used in interrupt service routines.
    and learn the function,you can using like that:
    ;-------------------------------------
    main
    .....
    ;------------
    ;any address you want to go to the tab address.
    tab:
    mov sp,#0xxh
    ...
    ret
    ;--------------
    ;in you want to reset segment add like the code
    mov dptr,#tab
    push dpl
    push dph
    reti
    ;--------------
    ...
    end

Reply
  • thanks russell...
    i think of the reset function like the "goto" sentence.it can reset anyway.the keil faq said:You should note that the software reset sequence above does not clear the 8051 interrupt system or reset any 8051 peripherals. When the above code is executed inside an interrupt routine, the 8051 blocks subsequent interrupts. Therefore, this sequence cannot be used in interrupt service routines.
    and learn the function,you can using like that:
    ;-------------------------------------
    main
    .....
    ;------------
    ;any address you want to go to the tab address.
    tab:
    mov sp,#0xxh
    ...
    ret
    ;--------------
    ;in you want to reset segment add like the code
    mov dptr,#tab
    push dpl
    push dph
    reti
    ;--------------
    ...
    end

Children
  • I understand the underlying method. But the question remains: why would you want to do this??

    Your method of embedding machine code is fine as long as the byte array is a const and stored in code space. The more accepted method would be to write an assembler file and call that from the 'c' code. At least you could read the instructions rather than a table of bytes that just happens to be machine code.

  • thanks russell...
    i know your means.and u method is better than me...
    but i feel my method is easily,look like the assembler. because i using assembler ever.
    in the end ,i'm sorry to my poor english and in trouble u.
    sincerely jane:)