本PDF文档详细介绍了如何为单片机编写控制升压模块的程序,包括硬件连接、代码设计及调试技巧等内容。适合电子工程爱好者和技术人员参考学习。
单片机制作0~30V升压模块C51程序:
```c
#include // 晶振为18.324MHz时PWM频率为36kHz
#define STEP 0x01 // PWM脉宽步进值
#define BD 0xA2 // 电阻分压定值,对应电压约为3.165V
unsigned char pulse_width, temp;
void Delayms(unsigned int n) {
unsigned int i, j;
for(j = n; j > 0; j--)
for(i = 112; i > 0; i--);
}
void PWMInit(void) { // 初始化PWM
CMOD = 0x02; // PCA时钟模式为fosc/2
CCON = 0x00; // 禁止PCA计数器工作,清除中断标志和溢出标志
CL = 0x00; // 清除计数器低8位寄存器值
CH = 0x00; // 清除计数器高8位寄存器值
CCAPM0 = 0x42; // 设置为PWM模式,占空比由CCAPH决定
PCA_PWM0 = 0x00;
pulse_width = BD; // 输出脉宽的初始设置。数值越大,输出电压越高。
CCAP0H = pulse_width;
EPCA_LVD = 1; // 启用PCA中断功能
EA = 1; // 允许全局中断
CR = 1;
}
void get_AD_result(unsigned char channel) {
unsigned int ad_data1, ad_data2, ad_data3;
ADC_CONTR |= 0x80; // 打开AD转换电源,设置为连续模式
P1 |= 0x01; // 设置P1.0口用于模拟输入
P1M0 = 0x01;
P1M1 = 0x01;
Delayms(10); // 等待AD转换稳定时间
ADC_CONTR &= 0xE7; // 清除ADC_FLAG, ADC_START位和低3位
ADC_CONTR |= (channel & 0x07);
ADC_DATA = 0;
ADC_LOW2 = 0;
ADC_CONTR |= 0x18; // 启动AD转换
while((ADC_CONTR & 0x10) == 0); // 等待AD转换结束
ad_data1 = ADC_DATA;
adc_data3 = (ad_data1 << 2 | ad_data2);
}
```
此代码段包含了升压模块的PWM初始化和获取ADC结果的功能。