迪文科技论坛

 找回密码
 立即注册
搜索
查看: 396|回复: 5

【提问】关于VP读写函数

[复制链接]

9

主题

9

回帖

114

积分

注册会员

Rank: 2

积分
114
发表于 2024-7-11 17:45:27 | 显示全部楼层 |阅读模式
我看到不同的C51例程,有两种VP读写函数,一种是void sys_write_vp(u16 addr,u8* buf,u16 len),另一种是void write_dgusii_vp(int addr,u8* buf,int len)

看上去都是对VP地址的写操作,可以互相通用吗?
回复

使用道具 举报

0

主题

4

回帖

103

积分

注册会员

Rank: 2

积分
103
发表于 2024-7-12 09:54:41 | 显示全部楼层
可以的  
  1. /**************************************************************************   ***
  2. 函 数 名  : void write_dgus_vp(u32 addr,u8* buf,u16 len)
  3. 功能描述  : 写dgus地址数据
  4. 输入参数  :    addr:写地址值        buf:写入的数据保存缓存区 len:字长度 //把当前的数值更新到VP地址,4字节也就是2个字
  5. 输出参数  :
  6. 修改历史  :
  7.   1.日    期   :
  8.     作    者   :
  9.     修改内容   : 修改读写dgus流程,不使用嵌套
  10. *****************************************************************************/
  11. void write_dgus_vp(unsigned int addr, unsigned char *buf, unsigned int len)
  12. {
  13.     unsigned char i;

  14. //        EA = 0;
  15.     i = (unsigned char)(addr & 0x01);
  16.     addr = addr / 2;
  17.     ADR_H = 0x00;
  18.     ADR_M = (unsigned char)(addr >> 8);
  19.     ADR_L = (unsigned char)(addr);
  20.     ADR_INC = 0x01;
  21.     RAMMODE = 0x8F;
  22.     while(APP_ACK == 0);
  23.     if(i && len > 0)
  24.     {
  25.         RAMMODE = 0x83;
  26.         DATA1 = *buf++;
  27.         DATA0 = *buf++;
  28.         APP_EN = 1;
  29.         while(APP_EN == 1);
  30.         len--;
  31.     }
  32.     RAMMODE = 0x8F;
  33.     while(len >= 2)
  34.     {
  35.         DATA3 = *buf++;
  36.         DATA2 = *buf++;
  37.         DATA1 = *buf++;
  38.         DATA0 = *buf++;
  39.         APP_EN = 1;
  40.         while(APP_EN == 1);
  41.         len = len - 2;
  42.     }
  43.     if(len)
  44.     {
  45.         RAMMODE = 0x8C;
  46.         DATA3 = *buf++;
  47.         DATA2 = *buf++;
  48.         APP_EN = 1;
  49.         while(APP_EN == 1);
  50.     }
  51.     RAMMODE = 0x00;
  52. //        EA = 1;
  53. }



  54. //写DGUS中的VP变量数据
  55. //addr:就是直接传入DGUS中的地址
  56. //buf:缓冲区
  57. //len:被发送数据的字数,一个字等于2个字节
  58. void sys_write_vp(u16 addr,u8* buf,u16 len)
  59. {   
  60.         u8 i;  
  61.        
  62.         i = (u8)(addr&0x01);
  63.         addr >>= 1;
  64.         ADR_H = 0x00;
  65.         ADR_M = (u8)(addr>>8);
  66.         ADR_L = (u8)addr;   
  67.         ADR_INC = 0x01;
  68.         RAMMODE = 0x8F;
  69.         while(APP_ACK==0);
  70.         if(i && len>0)
  71.         {       
  72.                 RAMMODE = 0x83;       
  73.                 DATA1 = *buf++;               
  74.                 DATA0 = *buf++;       
  75.                 APP_EN = 1;               
  76.                 len--;
  77.         }
  78.         RAMMODE = 0x8F;
  79.         while(len>=2)
  80.         {       
  81.                 DATA3 = *buf++;               
  82.                 DATA2 = *buf++;
  83.                 DATA1 = *buf++;               
  84.                 DATA0 = *buf++;
  85.                 APP_EN = 1;               
  86.                 len -= 2;
  87.         }
  88.         if(len)
  89.         {       
  90.                 RAMMODE = 0x8C;
  91.                 DATA3 = *buf++;               
  92.                 DATA2 = *buf++;
  93.                 APP_EN = 1;
  94.         }
  95.         RAMMODE = 0x00;
  96. }
复制代码
回复

使用道具 举报

5

主题

37

回帖

184

积分

注册会员

Rank: 2

积分
184
发表于 2024-8-6 17:40:10 | 显示全部楼层
假如只修改某地址的数据的高(或低)字节的内容,也应该可以?
回复

使用道具 举报

0

主题

276

回帖

2576

积分

金牌会员

Rank: 6Rank: 6

积分
2576
发表于 2024-8-6 18:39:40 | 显示全部楼层
可以只修改某地址的数据的高(或低)字节的内容
回复

使用道具 举报

1

主题

19

回帖

400

积分

中级会员

Rank: 3Rank: 3

积分
400
发表于 2024-8-8 09:28:25 | 显示全部楼层
yuanbin2020 发表于 2024-8-6 18:39
可以只修改某地址的数据的高(或低)字节的内容

请问一下,在主循环里面使用读写函数要注意什么呢
回复

使用道具 举报

0

主题

26

回帖

159

积分

注册会员

Rank: 2

积分
159
发表于 2024-8-8 10:32:29 | 显示全部楼层
用定时器中断周期调用,一般20ms
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-4-19 09:12 , Processed in 0.035185 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表