|
- /*
- IC名称:MAX6821
- 详细简介:MAX6821是一个可编程负电压发生器,可产生-5V至-12V的输出电压。
- 它能够通过串行通信接口进行编程,具有锁存功能和可编程上电时延。
- 它还有一个电源监控电路,可检测主电源的电压是否低于所设置的阈值,并输出复位信号。
- MAX6821具有广泛的应用领域,包括电池供电系统、医疗设备和计算机等。
- 作用:产生可编程负电压,电源监控并输出复位信号
- 电压宽度:输出-5V至-12V负电压
- 温度范围:-40℃至+85℃
- 注意事项:在使用MAX6821时,应注意其输入电源的极性是否正确。
- */
- #include <reg52.h> // 引入reg52.h头文件
- #define SCLK P1_7 // 定义串行时钟引脚
- #define SDIN P1_6 // 定义串行数据输入引脚
- #define CS P1_5 // 定义芯片选择引脚
- // 函数声明
- void writeMAX6821(unsigned char addr, unsigned char data);
- unsigned char readMAX6821(unsigned char addr);
- void setPowerFailThreshold(unsigned char threshold);
- void setResetTimeout(unsigned char timeout);
- void setNegativeVoltage(unsigned char voltage);
- void main()
- {
- setPowerFailThreshold(0x80); // 设置电源监控阈值
- setResetTimeout(0x07); // 设置复位超时时间
- setNegativeVoltage(0x0A); // 设置输出负电压
- while (1) {
- // 此处编写主函数中的其他逻辑代码
- }
- }
- /**
- 函数名称:writeMAX6821
- 函数功能:向MAX6821写入数据
- 参数:addr-寄存器地址;data-写入的数据
- 返回值:无
- */
- void writeMAX6821(unsigned char addr, unsigned char data)
- {
- CS = 0; // 芯片选择低电平有效
- SCLK = 0; // 时钟线拉低
- for (int i = 0; i < 8; i++) {
- SDIN = (addr >> (7 - i)) & 0x01; // 依次发送地址
- SCLK = 1; // 上升沿采样
- SCLK = 0; // 下降沿释放
- }
- for (int i = 0; i < 8; i++) {
- SDIN = (data >> (7 - i)) & 0x01; // 依次发送数据
- SCLK = 1; // 上升沿采样
- SCLK = 0; // 下降沿释放
- }
- CS = 1; // 芯片选择高电平无效
- }
- /**
- *
- 函数名称:readMAX6821
- 函数功能:从MAX6821读取数据
- 参数:addr-寄存器地址
- 返回值:读取到的数据
- */
- unsigned char readMAX6821(unsigned char addr)
- {
- unsigned char data = 0x00; // 初始化读取数据为0
- CS = 0; // 芯片选择低电平有效
- SCLK = 0; // 时钟线拉低
- for (int i = 0; i < 8; i++) {
- SDIN = (addr >> (7 - i)) & 0x01; // 依次发送地址
- SCLK = 1; // 上升沿采样
- SCLK = 0; // 下降沿释放
- }
- for (int i = 0; i < 8; i++) {
- data <<= 1; // 左移一位,空出最低位
- SCLK = 1; // 上升沿采样
- data |= SDIN; // 读取数据
- SCLK = 0; // 下降沿释放
- }
- CS = 1; // 芯片选择高电平无效
- return data;
- }
- /**
- 函数名称:setPowerFailThreshold
- 函数功能:设置电源监控阈值
- 参数:threshold-监控阈值
- 返回值:无
- */
- void setPowerFailThreshold(unsigned char threshold)
- {
- writeMAX6821(0x01, threshold);
- }
- /**
- 函数名称:setResetTimeout
- 函数功能:设置复位超时时间
- 参数:timeout-超时时间
- 返回值:无
- */
- void setResetTimeout(unsigned char timeout)
- {
- writeMAX6821(0x02, timeout);
- }
- /**
- 函数名称:setNegativeVoltage
- 函数功能:设置输出负电压
- 参数:voltage-输出负电压值
- 返回值:无
- */
- void setNegativeVoltage(unsigned char voltage)
- {
- writeMAX6821(0x03, voltage);
- }
- /**
- 函数名称:setPositiveVoltage
- 函数功能:设置输出正电压
- 参数:voltage-输出正电压值
- 返回值:无
- */
- void setPositiveVoltage(unsigned char voltage)
- {
- writeMAX6821(0x04, voltage);
- }
- /**
- 函数名称:setResetPolarity
- 函数功能:设置复位引脚极性
- 参数:polarity-复位引脚极性,0-高电平复位,1-低电平复位
- 返回值:无
- */
- void setResetPolarity(unsigned char polarity)
- {
- unsigned char reg = readMAX6821(0x05);
- if (polarity == 0) {
- reg &= ~(0x01);
- } else {
- reg |= 0x01;
- }
- writeMAX6821(0x05, reg);
- }
- /**
- 函数名称:setWatchdogTimeout
- 函数功能:设置看门狗超时时间
- 参数:timeout-超时时间
- 返回值:无
- */
- void setWatchdogTimeout(unsigned char timeout)
- {
- unsigned char reg = readMAX6821(0x06);
- reg &= 0xF0;
- reg |= timeout;
- writeMAX6821(0x06, reg);
- }
- /**
- 函数名称:enableWatchdog
- 函数功能:使能看门狗
- 参数:无
- 返回值:无
- */
- void enableWatchdog()
- {
- unsigned char reg = readMAX6821(0x06);
- reg |= 0x08;
- writeMAX6821(0x06, reg);
- }
- /**
- 函数名称:disableWatchdog
- 函数功能:禁用看门狗
- 参数:无
- 返回值:无
- */
- void disableWatchdog()
- {
- unsigned char reg = readMAX6821(0x06);
- reg &= ~(0x08);
- writeMAX6821(0x06, reg);
- }
- /**
- 函数名称:resetSystem
- 函数功能:系统复位
- 参数:无
- 返回值:无
- */
- void resetSystem()
- {
- writeMAX6821(0x07, 0x80);
- }
- /**
- 函数名称:main
- 函数功能:主函数
- 参数:无
- 返回值:无
- */
- void main()
- {
- setPowerFailThreshold(0x20); // 设置电源监控阈值为2.2V
- setResetTimeout(0x03); // 设置复位超时时间为500ms
- setNegativeVoltage(0x1F); // 设置输出负电压为-5.1V
- setPositiveVoltage(0x1F); // 设置输出正电压为5.1V
- setResetPolarity(0); // 设置复位引脚极性为高电平复位
- setWatchdogTimeout(0x05); // 设置看门狗超时时间为8s
- enableWatchdog(); // 使能看门狗
- resetSystem(); // 复位系统
- }
复制代码
|
|