导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→TO:老古  有没用过IAP

* 48943: TO:老古 有没用过IAP

   linkaimu 
linkaimu发表的帖子 

 TO:老古  有没用过IAP
我现在 用P89C668的芯片,IAP功能,发现总是重启。查不到原因,改了很久也没改好。怀疑是看门狗的问题,但是我用的是硬狗,不是软狗,应该没有影响才对啊。请赐教。付程序。
void ERASE_FLASH(unsigned char block)
{
    switch(block)
    { 
  case 0:{
        #pragma asm
        MOV AUXR1,#20H file://AUXR1 的位ENBOOT=1 寻址到固件
        MOV R0,#18 file://晶振为11.O592M 取11
        MOV R1,#01H file://R1=01H 块擦除
        MOV DPTR,#0 file://擦除BLOCK4
        LCALL 0fff0H file://调用无返回参数
        MOV AUXR1,#0
  #pragma endasm
            }
  case 1:{
        #pragma asm
        MOV AUXR1,#20H file://AUXR1 的位ENBOOT=1 寻址到固件
        MOV R0,#18 file://晶振为11.O592M 取11
        MOV R1,#01H file://R1=01H 块擦除
        MOV DPTR,#2000H file://擦除BLOCK4
        LCALL 0fff0H file://调用无返回参数
        MOV AUXR1,#0
  #pragma endasm
            }  
 case 2:{
        #pragma asm
        MOV AUXR1,#20H file://AUXR1 的位ENBOOT=1 寻址到固件
        MOV R0,#18 file://晶振为11.O592M 取11
        MOV R1,#01H file://R1=01H 块擦除
        MOV DPTR,#4000H file://擦除BLOCK4
        LCALL 0fff0H file://调用无返回参数
        MOV AUXR1,#0
  #pragma endasm
            }
    case 3:{
        #pragma asm
        MOV AUXR1,#20H file://AUXR1 的位ENBOOT=1 寻址到固件
        MOV R0,#18 file://晶振为11.O592M 取11
        MOV R1,#01H file://R1=01H 块擦除
        MOV DPTR,#8000H file://擦除BLOCK4
        LCALL 0fff0H file://调用无返回参数
        MOV AUXR1,#0
        #pragma endasm
            }  
    case 4:{
        #pragma asm
        MOV AUXR1,#20H 
        MOV R0,#18 file://晶振为11.O592M 取11
        MOV R1,#01H file://R1=01H 块擦除
        MOV DPTR,#0c000H file://擦除BLOCK4
        LCALL 0fff0H file://调用无返回参数
        MOV AUXR1,#0
        #pragma endasm
            }
 }
}
 
unsigned char WRITE_FLASH(unsigned char ch)
{
    #pragma asm
 CLR C
    MOV AUXR1,#20H file://AUXR1 的位ENBOOT=1 寻址到固件
    MOV R0,#18     file://晶振为18.432,取18
    MOV R1,#02H    file://R1=02H 字节编程功能
    #pragma endasm
    DPH=0x0c1;
 DPL=0;
    ACC=ch;
    #pragma asm 
    LCALL 0fff0H  INC   DPTR
    #pragma endasm 
 return ACC;
}
bit FLASH_SAVE()
{
    unsigned char i;
    unsigned char ch;
    unsigned char *p;
    p=¶_buf.com_id;
      EA=0;
      ERASE_FLASH(4);
        EA=1;
    for(i=0; i  <10; i++)//写10个字节的数据
    {
 
     ch=*(p+i);
 
     EA=0;
     if( WRITE_FLASH(ch) != 0 )
     {
         EA=1;
         return 0;
     }
     EA=1;
     return;
 }

发表时间:2004年2月19日11:11:36

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:为什么在串行通信中断中开其它中断系统就不行了以中断方式编写RS232通讯程序,但在此中断中开其它中断
[下一篇帖子]:有道理,没仔细看还真弄错了