就是基本的51单片机控制无刷电机程序,想采样电流电压做个过流过压保护,有个现成的51程序,但不会弄
不知道你这个问题是否已经解决, 如果还没有解决的话:SFR name | Address | bit | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|---|---|---|
IE | A8H | name | EA | EADC |
EA: 总中断;
EADC: A/D中断允许位。0—不允许,1—允许;
我可以提供一些关于如何将一个适用于普通51单片机的程序移植到stc12c5a60s2上,并添加ADC转换以实现过流过压保护的指导:
首先,需要修改原有的程序,以适应新的单片机。在 Keil4 中,需要新建一个工程,然后添加源文件、头文件等。
在程序中添加 ADC 转换的代码。可以利用 stc12c5a60s2 自带的 ADC 功能实现。具体操作步骤如下:
a. 配置 P1^0 引脚为模拟输入通道,即 ADC0。可以使用以下代码:
```
P1M0 = 0x01; // 配置 P1^0 为模拟输入通道,即 ADC0
P1M1 = 0x00;
```
b. 配置 ADC 的工作模式、时钟等参数。可以使用以下代码:
```
ADC_CONTR = 0x80; // 开启 ADC 电源
ADC_RES = 0; // 清除转换结果
ADC_CONTR = 0x90; // 配置工作模式为单次转换模式
```
c. 启动 ADC 转换并等待转换完成。可以使用以下代码:
```
ADC_CONTR |= 0x08; // 启动 ADC 转换
while((ADC_CONTR & 0x10) == 0); // 等待 ADC 转换完成
```
d. 读取 ADC 转换结果。可以使用以下代码:
```
unsigned int adc_value;
adc_value = ADC_RES;
```
if(input_voltage > MAX_VOLTAGE || output_current > MAX_CURRENT) { P1 &= ~0x01; // 控制输出端口的电平,关闭开关电源 }
需要注意的是,代码仅供参考,具体实现还需要根据具体的需求和硬件环境进行调整和优化。若需要实现更复杂的功能,可以结合参考资料,查找相关的资料进行学习和调试。