2817|2

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

x5045 看门狗 门限电压设置 [复制链接]

   现在我按x5045pdf上的操作,对x5045 设置门限电压, 烧之前测到x5045的门限电压是4.3V ,烧完后一块的Vtrip(门限电压)到了5.3V  另一块到了1.3V , 不知我哪里出错了,忘高手指正一下,下面是我的电路和程序


5V--->VCC 单片机是AT89C61  5V--10K--看门狗.7(复位脚)  X5(x5045).8(vcc) 接4.6V,  X5.3(wp)接17V  so 和si 一起接到p1.4 VSS接地,sck接p1.3 cs 接p1.2 单片机12M 两30P电容 p2接四个电阻和灯, 程序如下
        DOG_CS              EQU     P1.2
        DOG_CLK             EQU     P1.3
        DOG_DAT             EQU     P1.4


org 0000h
ajmp start
ljmp  start
ljmp  start
ljmp  start
ljmp  start
ljmp  start
ljmp  start
ljmp  start

org 0030h

start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。

lcall WREN_CMD
loop: rlc a ;带进位左移。
mov p2,a ;输出到P1口。
mov p0,a ;输出到P1口。


clr  dog_cs
setb  dog_cs
call delay ;延时一段时间

djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1:
rrc a ;带进位右移
mov p2,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop1 ;反复循环


jmp start ;重新开始

delay:
mov r3,#20 ;延时子程序
d1: mov r4,#200
d2: mov r5,#248
clr  dog_cs
setb  dog_cs

djnz r5,$
djnz r4,d2
        ret



WREN_CMD: ;CLR DOG_CLK

           SETB DOG_CLK;初始状态是为1的
           NOP
           NOP
           NOP
           CLR dog_cs
           MOV A,#06h
           LCALL OUTBYT         

           SETB DOG_CLK;初始状态是为1的
           NOP
           NOP
           NOP
           SETB dog_cs
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           NOP
           CLR   dog_cs
           
            mov  a,#02h
            LCALL OUTBYT
            mov  a,#00h   
            LCALL OUTBYT
            MOV A,#01h
            LCALL OUTBYT
            mov  a,#00h   
            LCALL OUTBYT
                       SETB DOG_CLK;初始状态是为1的
           NOP
           NOP
           NOP
           SETB dog_cs
           RET




OUTBYT:    MOV R3,#08H
  OUTBYT1: CLR DOG_CLK
           RLC A
           MOV DOG_DAT,C
           NOP
           NOP
           NOP
           SETB DOG_CLK
           NOP
           NOP
           DJNZ R3,OUTBYT1
           ;CLR DOG_DAT
SETB DOG_DAT;释放总线
           RET

ljmp  start
ljmp  start
ljmp  start
org 0x0fff
ljmp  start
end

最新回复

我的程序存储都正常的,就是现在另外写了个程序来设置x5045 门限电压 设置这个电压要有15V以上的电压来烧才行的  详情 回复 发表于 2009-12-21 12:03
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
首先看到汇编,有种说不来的感觉。呵呵


楼主自己好好看下面的C代码吧:
  1. #ifndef X5045_h
  2. #define X5045_h


  3. #define WDT1_4  0x00;
  4. #define WDT600  0x10;
  5. #define WDT200  0x20;
  6. #define WDTDIS  0x30;

  7. //BIT
  8. sbit B_CS5045=P2^0;
  9. sbit B_SO5045=P2^1;
  10. sbit B_SCLK5045=P2^3;
  11. sbit B_SI5045=P2^2;

  12. extern unsigned char data tcX5045;

  13. void RstWDT(void);
  14. void WrB5045(unsigned char,unsigned char) reentrant;      //写入单字节数据
  15. unsigned char RdB5045(unsigned char);           //读出单字节数据
  16. void byteout(unsigned char);                    //向5045输出单字节
  17. void wip_chk(void);                             //等待5045结束内部写周期
  18. unsigned char rdsr(void);                       //5045状态寄存器读出程序
  19. unsigned char bytein(void);                     //从5045读出一字节数据
  20. unsigned char readx(void);                      //读地址,地址位于100h
  21. void wrsr(unsigned char);                       //5045状态寄存器写入程序
  22. void wren(void);                                //写允许
  23. void wrdi(void);                                //写禁止

  24. #endif


  25. /*
  26. X5045/3 读写驱动
  27. */

  28. #include
  29. #include "X5045.h"

  30. //复位看门狗
  31. void RstWDT()
  32. {
  33.     B_CS5045=0;
  34.     B_CS5045=1;
  35. }

  36. //向X5045写入单字节数据
  37. //输入:x,待写数据,address,写入数据的地址
  38. void WrB5045(unsigned char x,unsigned char address) reentrant //数据,地址
  39. {
  40.         wren();
  41.         B_SCLK5045=0;
  42.         B_CS5045=0;
  43.         byteout(0x2); //write
  44.         byteout(address);
  45.         byteout(x);
  46.         B_SCLK5045=0;
  47.         B_CS5045=1;
  48.         wip_chk();
  49.         wrdi();
  50. }

  51. //从X5045读入单字节数据
  52. //输入:address,待读数据地址
  53. //返回:读出的数据
  54. unsigned char RdB5045(unsigned char address)
  55. {
  56.         unsigned char data x;
  57.         B_SCLK5045=0;
  58.         B_CS5045=0;
  59.         byteout(0x3);  //read 000h
  60.         byteout(address);
  61.         x=bytein();
  62.         B_SCLK5045=0;
  63.         B_CS5045=1;
  64.         return (x);
  65. }

  66. //向X5045输出单字节
  67. void byteout(unsigned char x)
  68. {
  69.     unsigned char data i,j;
  70.     j=128;
  71.     for(i=0;i<8;i++)
  72.     {
  73.         B_SCLK5045=0;
  74.         B_SI5045=x/j;
  75.         B_SCLK5045=1;
  76.         x%=j;
  77.         j/=2;
  78.     }
  79.     B_SI5045=0;
  80. }

  81. //等待X5045结束内部写周期
  82. void wip_chk()
  83. {
  84.     unsigned char data dat;
  85.     tcX5045=0;
  86. do
  87.     {
  88.         dat=rdsr();
  89.         dat&=0x1;
  90.         if(tcX5045>=5) break;
  91.     }
  92.     while(dat);
  93. }

  94. //5045状态寄存器读出程序
  95. unsigned char rdsr()
  96. {
  97.     unsigned char data dat;
  98. B_SCLK5045=0;
  99.     B_CS5045=0;
  100.     byteout(5);
  101. dat=bytein();
  102. B_SCLK5045=0;
  103. B_CS5045=1;
  104. return (dat);
  105. }

  106. //从X5045读出一字节数据
  107. unsigned char bytein()
  108. {
  109.     unsigned char data i,x;
  110.     x=0;
  111.     for (i=0;i<8;i++)
  112.     {
  113.         B_SO5045=1;
  114.         B_SCLK5045=1;
  115.         B_SCLK5045=0;
  116.         if (B_SO5045) x=x+x+1;
  117.         else x<<=1;
  118.     }
  119.     return(x);
  120. }

  121. //5045状态寄存器写入程序
  122. void wrsr(unsigned char x)
  123. {
  124.     wren();
  125. B_SCLK5045=0;
  126. B_CS5045=0;
  127. byteout(1);   //wrsr
  128. byteout(x);
  129. B_SCLK5045=0;
  130. B_CS5045=1;
  131. wip_chk();
  132.     wrdi();
  133. }

  134. //写允许
  135. void wren()
  136. {
  137. B_SCLK5045=0;
  138. B_CS5045=0;
  139. byteout(6);
  140. B_SCLK5045=0;
  141. B_CS5045=1;
  142. }

  143. //写禁止
  144. void wrdi()
  145. {
  146. B_SCLK5045=0;
  147. B_CS5045=0;
  148.     byteout(4);
  149.     B_SCLK5045=0;
  150. B_CS5045=1;
  151. }
复制代码


如果还有问题,再找我

 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我的程序存储都正常的,就是现在另外写了个程序来设置x5045 门限电压 设置这个电压要有15V以上的电压来烧才行的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表