[技术问答] 求解释例程

[复制链接]
 楼主| 北辰极界 发表于 2018-3-6 19:46 | 显示全部楼层 |阅读模式
TE, AD, ADDR, DDR, se
UINT8 read_APROM_BYTE(unsigned int code *u16_addr)
{
  
        UINT8 rdata;
        rdata = *(u16_addr)>>8;
        return rdata;
}
//-------------------------------------------------------------------------


/*****************************************************************************************************************
write_DATAFLASH_BYTE :
user can copy all this subroutine into project, then call this function in main.
******************************************************************************************************************/               
void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
{
        UINT8 looptmp=0,u8_addrl_r;
        unsigned char code *cd_longaddr;
        unsigned char xdata *xd_tmp;
        
//Check page start address
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                u8_addrl_r = 0;
        }
        else
        {
                u8_addrl_r = 0x80;
        }
//Save APROM data to XRAM
        xd_tmp = 0x80;
        cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;        
        while (xd_tmp !=0x100)
        {
                *xd_tmp = *cd_longaddr;
                looptmp++;
                xd_tmp++;
                cd_longaddr++;
        }
// Modify customer data in XRAM
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                xd_tmp = u8_addrl_r+0x80;
        }
        else
        {
                xd_tmp = u8_addrl_r+0;
        }
        *xd_tmp = u8_data;
//Erase APROM DATAFLASH page
                IAPAL = u16_addr;
                IAPAH = u16_addr>>8;
                IAPFD = 0xFF;
          set_IAPEN;
                set_APUEN;
    IAPCN = 0x22;                 
                set_IAPGO;
//Save changed RAM data to APROM DATAFLASH
        u8_addrl_r = u16_addr;
        if (u8_addrl_r<0x80)
        {
                u8_addrl_r =0;
        }
        else
        {
                u8_addrl_r = 0x80;
        }
                xd_tmp = 0x80;
          IAPAL = u8_addrl_r;
    IAPAH = u16_addr>>8;
                set_IAPEN;
                set_APUEN;
          IAPCN = 0x21;
                while (xd_tmp !=0xFF)
                {
                        IAPFD = *xd_tmp;
                        set_IAPGO;
                        IAPAL++;
                        xd_tmp++;
                }
                clr_APUEN;
                clr_IAPEN;
}        
/******************************************************************************************************************/               


void main (void)
{
                UINT8 datatemp;
/* -------------------------------------------------------------------------*/
/*  Dataflash use APROM area                                                                                                                         */
/*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
/* Please use Memory window key in C:0x3800 to check earse result                                          */              
/* -------------------------------------------------------------------------*/
        
//call write byte
                write_DATAFLASH_BYTE (0x3881,0x55);
                write_DATAFLASH_BYTE (0x3882,0x56);
                write_DATAFLASH_BYTE (0x3855,0xaa);
                write_DATAFLASH_BYTE (0x3856,0x66);
//call read byte
                datatemp = read_APROM_BYTE(0x3882);
    while(1);
}




UINT8 read_APROM_BYTE(unsigned int code *u16_addr)
{
  
        UINT8 rdata;
        rdata = *(0x3800+u16_addr)>>8;
        return rdata;
}
//-------------------------------------------------------------------------
此程序怎么实现存取和读取的  希望能得到解答  这个例程理解不了
捉虫天师 发表于 2018-3-7 09:13 | 显示全部楼层
你可以看寄存器版本的

评论

我只是想看懂这个程序然后能自己使用EEPROM功能 希望得到解决 或者说有没有这个例程配套的视频讲解之类的  发表于 2018-3-7 22:44
dongnanxibei 发表于 2018-3-8 15:31 | 显示全部楼层
你这是哪个单片机的例子啊,我去看看。

评论

EEPROM那个例程  发表于 2018-3-9 08:57
芯唐 N76E003的  发表于 2018-3-9 08:57
dongnanxibei 发表于 2018-3-9 12:41 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2017
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 APROM program DATAFLASH as EEPROM way
  14. //***********************************************************************************************************
  15. #include "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"


  20. /*****************************************************************************************************************
  21. write_DATAFLASH_BYTE :
  22. user can copy all this subroutine into project, then call this function in main.
  23. ******************************************************************************************************************/               
  24. void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
  25. {
  26.         UINT8 looptmp=0,u8_addrl_r;
  27.         unsigned char code *cd_longaddr;
  28.         unsigned char xdata *xd_tmp;
  29.        
  30. //Check page start address
  31.         u8_addrl_r = u16_addr;
  32.         if (u8_addrl_r<0x80)
  33.         {
  34.                 u8_addrl_r = 0;
  35.         }
  36.         else
  37.         {
  38.                 u8_addrl_r = 0x80;
  39.         }
  40. //Save APROM data to XRAM
  41.         xd_tmp = 0x80;
  42.         cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;       
  43.         while (xd_tmp !=0x100)
  44.         {
  45.                 *xd_tmp = *cd_longaddr;
  46.                 looptmp++;
  47.                 xd_tmp++;
  48.                 cd_longaddr++;
  49.         }
  50. // Modify customer data in XRAM
  51.         u8_addrl_r = u16_addr;
  52.         if (u8_addrl_r<0x80)
  53.         {
  54.                 xd_tmp = u8_addrl_r+0x80;
  55.         }
  56.         else
  57.         {
  58.                 xd_tmp = u8_addrl_r+0;
  59.         }
  60.         *xd_tmp = u8_data;
  61. //Erase APROM DATAFLASH page
  62.                 IAPAL = u16_addr;
  63.                 IAPAH = u16_addr>>8;
  64.                 IAPFD = 0xFF;
  65.           set_IAPEN;
  66.                 set_APUEN;
  67.     IAPCN = 0x22;                
  68.                 set_IAPGO;
  69. //Save changed RAM data to APROM DATAFLASH
  70.         u8_addrl_r = u16_addr;
  71.         if (u8_addrl_r<0x80)
  72.         {
  73.                 u8_addrl_r =0;
  74.         }
  75.         else
  76.         {
  77.                 u8_addrl_r = 0x80;
  78.         }
  79.                 xd_tmp = 0x280;
  80.           IAPAL = u8_addrl_r;
  81.     IAPAH = u16_addr>>8;
  82.                 set_IAPEN;
  83.                 set_APUEN;
  84.           IAPCN = 0x21;
  85.                 while (xd_tmp !=0xFF)
  86.                 {
  87.                         IAPFD = *xd_tmp;
  88.                         set_IAPGO;
  89.                         IAPAL++;
  90.                         xd_tmp++;
  91.                 }
  92.                 clr_APUEN;
  93.                 clr_IAPEN;
  94. }       
  95.        
  96. //-------------------------------------------------------------------------
  97. UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
  98. {
  99.         UINT8 rdata;
  100.         rdata = *u16_addr>>8;
  101.         return rdata;
  102. }

  103. /******************************************************************************************************************/       


  104. void main (void)
  105. {
  106.                 UINT8 datatemp;
  107. /* -------------------------------------------------------------------------*/
  108. /*  Dataflash use APROM area, please ALWAYS care the address of you code    */
  109. /*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
  110. /*         Please use Memory window key in C:0x3800 to check earse result                                        */             
  111. /* -------------------------------------------------------------------------*/
  112.                 InitialUART0_Timer1(115200);
  113. //call write byte
  114.                 write_DATAFLASH_BYTE (0x3881,0x55);
  115.                 write_DATAFLASH_BYTE (0x3882,0x56);
  116.                 write_DATAFLASH_BYTE (0x3855,0xaa);
  117.                 write_DATAFLASH_BYTE (0x3856,0x66);
  118. //call read byte
  119.                 datatemp = read_APROM_BYTE(0x3882);

  120.     while(1)
  121.                 {
  122. //                                printf ("\n data temp = 0x%bx", datatemp);
  123.                 }
  124. }
  125. //-----------------------------------------------------------------------------------------------------------
dongnanxibei 发表于 2018-3-9 12:41 | 显示全部楼层
直接调用人家写好的函数就行了啊。
 楼主| 北辰极界 发表于 2018-3-9 15:17 | 显示全部楼层
dongnanxibei 发表于 2018-3-9 12:41
直接调用人家写好的函数就行了啊。

我本来是想这样的  但是我不是单纯的使用一次这个 而是要改变不同的地址然后写进读出 因为是初学者然后并不是很理解这个例程的写入方法想要得到清晰的讲解方便后面自己的使用
09kk小熊 发表于 2018-3-9 22:19 | 显示全部楼层
例程里是有注释的。简单来说就是模拟EEPROM按字节读写方式,利用XRAM来作临时存放的容器来读写Flash,还不明白的话加我QQ 397839840
yiyigirl2014 发表于 2018-3-10 08:40 | 显示全部楼层
09kk小熊 发表于 2018-3-9 22:19
例程里是有注释的。简单来说就是模拟EEPROM按字节读写方式,利用XRAM来作临时存放的容器来读写Flash,还不 ...

好奇的是不能直接读吗
09kk小熊 发表于 2018-3-10 10:09 | 显示全部楼层
读可以啊,写就不简单了
antusheng 发表于 2018-3-10 16:43 | 显示全部楼层
确实难以看懂这个函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

141

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部