导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→好东西!!!!!看门狗,SPI接口的EEPROM,电压监测.[xdkjason]

 *第13036篇: 好东西!!!!!看门狗,SPI接口的EEPROM,电压监测.....5045 源程序

  
楼 主:xdkjason 2003年6月3日11:54
 好东西!!!!!看门狗,SPI接口的EEPROM,电压监测.....5045  源程序
;===================================================
;函数名称:INIT_X5045
;功能:    初始化X5045 (实现看门狗、512*8 EPROM、电压监测)
;入口参数:
;出口参数:
;影响资源:
;其他:    X5045控制子程序清单
;          WD_RST    看门狗复位子程序
;          WD_SET    看门狗定时时间设置子程序
;          RD_SR     读状态寄存器子程序
;          WR_SR     写状态寄存器子程序
;          RD_B      读一个字节数据子程序
;          WR_B      写一个字节数据子程序

;          指令名称        指令格式        完成的操作
;          WREN            0000 0110       写允许
;          WRDI            0000 0100       写禁止
;          RSDR            0000 0101       读状态寄存器
;          WRSR            0000 0001       写状态寄存器  看门狗和块锁定
;          READ            0000 A8 011     从选定的地址单元中读数据
;          WRITE           0000 A8 011     向选定的开始地址单元写入数据  1-16字节
;===================================================
        ORG               0000H
        X5045_CS          EQU        P1.0
        X5045_SDI         EQU        P1.1
        X5045_SCLK        EQU        P1.2
        X5045_SDO         EQU        P1.3

;===================================================
;函数名称:WD_RST
;功能:    看门狗复位子程序
;入口参数:
;出口参数:
;影响资源:
;其他:
;===================================================
WD_RST: CLR     X5045_CS        ;在上电后任何操作之前,CS必须要有一个从高到低的过程
        SETB    X5045_CS        ;此后该引脚用作喂狗WDI端
        RET

;===================================================
;函数名称:WD_SET
;功能:    看门狗定时时间设置成600ms
;入口参数:
;出口参数:
;影响资源:
;其他:    看门狗定时溢出时间 00H-1.4S  10H-600MS     20H-200MS       30H-FORBIDDEN
;===================================================
WD_SET: MOV     R0,#10H         
        LCALL   WR_SR
        ;!!!!!!!!!!!!到时候还要判断写入成功与失败的标志位F0,失败后还要重写呀!
        RET

;===================================================
;函数名称:RD_SR
;功能:    读状态寄存器子程序,读出的X5045的状态存在A累加器中
;入口参数:
;出口参数:A
;影响资源:
;其他:
;===================================================
RD_SR:  MOV     A,#05H          ;将RDSR命令送A累加器
        CLR     X5045_CS
        LCALL   WRITE
        LCALL   READ
        SETB    X5045_CS
        RET
        
;===================================================
;函数名称:WR_SR
;功能:    写状态寄存器子程序。F0为写成功与否标志,F0=0,写成功;F0=1,写失败
;入口参数:
;出口参数:
;影响资源:
;其他:
;===================================================
WR_SR:  LCALL   RD_SR           ;检查WIP位,确定X5045是否正在进行写操作
        CLR     F0
        JNB     ACC.0,WR_SR1    ;WIP=0,转写状态寄存器
        SETB    F0              ;WIP=1,表示正在写操作,F0置1后返回
        RET
WR_SR1: CLR     X5045_CS
        MOV     A,#06H          ;置位写使能寄存器
        LCALL   WRITE
        SETB    X5045_CS        ;在上电后任何操作之前,CS必须要有一个从高到低的过程
        CLR     X5045_CS
        MOV     A,#01H          ;送写状态寄存器命令
        LCALL   WRITE
        ;????????????????????????????????????????????????????????????????????????????
        MOV     A,#18H          ;设看门狗定时时间为600ms,块地址为100H~1FFH
        LCALL   WRITE
        CLR     X5045_CS
        SETB    X5045_CS
        RET

;===================================================
;函数名称:READ
;功能:    读8位数据
;入口参数:
;出口参数:
;影响资源:
;其他:
;===================================================
READ:   MOV     R0,#08H         ;读8位数据
READ1:  SETB    X5045_SCLK      ;在SCLK下降沿时读出
        CLR     X5045_SCLK
        MOV     C,X5045_SDO
        RLC A
        DJNZ R0,READ1
        RET

;===================================================
;函数名称:WRITE
;功能:    写8位数据
;入口参数:
;出口参数:
;影响资源:
;其他:
;===================================================
WRITE:  MOV     R0,#08H         ;写8位数据
WRITE1: RLC     A               ;MSB 在前
        MOV     X5045_SDI,C
        CLR     X5045_SCLK         ;在SCLK上升沿时写入
        SETB    X5045_SCLK
        DJNZ    R0,WRITE1
        RET

;===================================================
;函数名称:RD_B
;功能:    读一个字节数据子程序,待读出数据地址在R3中,读出后的数据存R4
;入口参数:
;出口参数:
;影响资源:
;其他:    ;读一个数时遵循先送指令,再送地址,然后读取数据的原则
;===================================================
RD_B:    LCALL   RD_SR
         JB      ACC.0,RD_B      ;正在忙时继续查询
         CLR     X5045_CS
         MOV     A,#03H          ;送读E2PROM命令,地址在00H~FFH间
         LCALL   WRITE
         MOV     A,R3            ;送地址
         LCALL   WRITE
         LCALL   READ              ;读数据并送R4
         MOV     R4,A
         SETB    X5045_CS
         RET

;===================================================
;函数名称:WR_B
;功能:    写一个字节数据子程序,写入地址在R3中,数据在R4中
;入口参数:
;出口参数:
;影响资源:
;其他:
;===================================================
WR_B:   LCALL   RD_SR
        JB      ACC.0,WR_B
        CLR     X5045_CS
        MOV     A,#06H          ;置位写使能寄存器
        LCALL   WRITE
        SETB    X5045_CS
        CLR     X5045_CS
        MOV     A,#02H          ;送写E2PROM命令,地址在00H~FFH间
        LCALL   WRITE
        MOV     A,R3            ;送地址
        LCALL   WRITE
        MOV     A,R4            ;送待写数据
        LCALL   WRITE
        CLR     X5045_CS
        SETB    X5045_CS
        RET

  
2楼:xdkjason 2003年6月5日12:22
 还有用96编的,不过对位操作太麻烦了:(

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:紧急求助!

[下一篇主题]:关于AT89c2051测温、测电压