⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 att7027.lst

📁 att7025是一个单相SOC的单心片电表方案
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   ATT7027                                                               04/14/2007 11:59:58 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE ATT7027
OBJECT MODULE PLACED IN F:\ATT7025\ATT7027.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\ATT7025\ATT7027.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ATT7027.lst) SRC(.\A
                    -TT7027.SRC)

line level    source

   1           #include <ATT7027.H>
   2           #include <MAIN.H>
   3          // #include <stddef.h>
   4           void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n);
   5           void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n);
   6           void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
   7           void ReadATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
   8           void ReadCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n);
   9           void EMU_Parameter_change1();
  10          /*******************************************************************
  11                           写FLASH数据
  12          函数原型: void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
  13          功能:     将要写的数据写到FLASH中
  14          输入:    addr 地址,n个数,mt_data存放RAM的指针
  15          输出:    
  16          ********************************************************************/
  17          void Flash_Write_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
  18          {
  19   1              unsigned char i,ADDRL,ADDRH,TEMP;
  20   1              CFMCFG|=0x04;// 允许系统调用
  21   1       for(i=0;i<n;i++)
  22   1        { 
  23   2              ADDRL=addr;
  24   2              ADDRH=addr>>4;
  25   2              TEMP=*mt_data;
  26   2              BWPR=0xC3;//使能写PMOD[1:0]操作
  27   2              BWPR=0x9B;//开启所有受保护位的写使能    
  28   2       /* #pragma asm
  29   2              MOV     R6,ADDRH                                                //指定要擦除的页的高地址
  30   2              MOV     R7,ADDRL                                                //指定要擦除的页的低地址
  31   2              MOV     R3,1                                                            //指定要擦除DATA FLASH
  32   2        LCALL 0FFD7H  
  33   2        MOV DPTRH0,ADDLH
  34   2        MOV DPTRL0,ADDRL
  35   2        MOV   A,TEMP;
  36   2        LCALL 0FFD9H  
  37   2        #pragma endasm */
  38   2        addr=addr+1;
  39   2        mt_data=mt_data+1;
  40   2        }     
  41   1      }
  42          /*******************************************************************
  43                           读FLASH数据
  44          函数原型:void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
  45          功能:     读FLASH数据放到mt_data指针指向要存放的地址中
  46          输入:    addr子地址,n个数,*mt_data要存放的指针
  47          输出: 
  48          ********************************************************************/
  49          void Flash_Read_ATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
  50          {
  51   1       unsigned char i;
  52   1       for(i=0;i<n;i++)
  53   1        { 
  54   2        *mt_data=CBYTE[addr];
C51 COMPILER V7.20   ATT7027                                                               04/14/2007 11:59:58 PAGE 2   

  55   2        addr=addr+1;
  56   2        mt_data=mt_data+1;
  57   2        }     
  58   1      }
  59          
  60          
  61          
  62          /****************************************************************************
  63                           写数据到校表寄存器中
  64          函数原型:void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)
  65          功能:     数据放到mt_data指针指向要存放的地址中
  66          输入:    addr子地址,n个数,*mt_data要存放的指针
  67          输出    comm:the val which written to the registers.
  68          writes Calibration registers at att7027 addr:the address of the first register.
  69          ******************************************************************************/
  70          void WriteCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)
  71          {
  72   1              unsigned char i,delay;
  73   1              EPADR=0xA6;//ECR writes Calibration registers寄存器写保护使能
  74   1              for(i=0;i<n;i++)
  75   1              { 
  76   2              ECADR=addr; //write address
  77   2                      delay=10;
  78   2              while(delay>0) delay--;                 // wait 4.8us
  79   2              ECDATH=*(mt_data+2*i);//写入数据的高8位如果单字节数据可以忽略此操作
  80   2              ECDATL=*(mt_data+1+2*i);//写入数据的低8位
  81   2              addr=addr+1;            //下一个校表参数
  82   2              }   
  83   1      EPADR=0xA9;     //ECR writes Calibration registers寄存器写保护禁止  
  84   1      }
  85          /***********************************************************************
  86                           读电表寄存器数据
  87          函数原型:void ReadATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
  88          功能:     读电表寄存器数据放到mt_data指针指向要存放的地址中
  89          输入:    addr子地址,n个数,*mt_data要存放的指针
  90          输出:  This subroutine functions as reading n*bits registers from att7027.
  91                  Considering the compatibilities, reading the 24bits register as 
  92                          3*8bits, and reads 8bits once.
  93          ***********************************************************************/
  94          
  95          void ReadATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)//*mt_data=xxxxxx00 n=3
  96          {
  97   1        unsigned char delay,i=0;
  98   1              for(i=0;i<n;i++)
  99   1              {       
 100   2              EPADR=addr;  //write address
 101   2              delay=10;
 102   2              while(delay>0) delay--;                 // wait 4.8us
 103   2          *(mt_data+3*i)=0;
 104   2              *(mt_data+1+3*i)=EPDATH;//读数据的高位如果寄存器为2字节,EPDATH 为符号扩展位
 105   2              *(mt_data+2+3*i)=EPDATM;//读数据的中间8位
 106   2              *(mt_data+3+3*i)=EPDATL;//读数据的低8位
 107   2              addr=addr+1;            
 108   2              }       
 109   1      }
 110          /****************************************************************************
 111                           读电表校验寄存器数据
 112          函数原型:void ReadCALATT7027(unsigned int addr,unsigned char *mt_data,unsigned char n)
 113          功能:     读电表校验寄存器数据放到mt_data指针指向要存放的地址中
 114          输入:    addr子地址,n个数,*mt_data要存放的指针
 115                  Read Calibration registers at att7027
 116                  addr:the address of the first register.
C51 COMPILER V7.20   ATT7027                                                               04/14/2007 11:59:58 PAGE 3   

 117                  comm:the val which written to the registers.
 118          ******************************************************************************/
 119          void ReadCALATT7027(unsigned char addr,unsigned char *mt_data,unsigned char n)//*mt_data=xxxxxx00 n=3
 120          {
 121   1        unsigned char delay,i=0;
 122   1              for(i=0;i<n;i++)
 123   1              {       
 124   2              EPADR=addr;  //write address
 125   2              delay=10;
 126   2              while(delay>0) delay--;                 // wait 4.8us
 127   2              *(mt_data+2*i)=ECDATH;//读数据的高8位如果单字节数据可以忽略此操作
 128   2              *(mt_data+1+2*i)=ECDATL;//读数据的低8位
 129   2              addr=addr+1;            //下一个校表参数

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -