- 打卡等级:常住居民III
- 打卡总天数:164
- 最近打卡:2025-01-04 18:47:02
注册会员
- 积分
- 52
|
发表于 2024-4-7 10:51:18
|
显示全部楼层
冲哥,你这个程序是好的,但是我加上ad采样就不对了
#include "stc8g.h"
#include "intrins.h"
//sfr CCON = 0xd8;
//sbit CF = CCON^7;
//sbit CR = CCON^6;
//sbit CCF2 = CCON^2;
//sbit CCF1 = CCON^1;
//sbit CCF0 = CCON^0;
//sfr CMOD = 0xd9;
//sfr CL = 0xe9;
//sfr CH = 0xf9;
//sfr CCAPM0 = 0xda;
//sfr CCAP0L = 0xea;
//sfr CCAP0H = 0xfa;
//sfr PCA_PWM0 = 0xf2;
//sfr CCAPM1 = 0xdb;
//sfr CCAP1L = 0xeb;
//sfr CCAP1H = 0xfb;
//sfr PCA_PWM1 = 0xf3;
//sfr CCAPM2 = 0xdc;
//sfr CCAP2L = 0xec;
//sfr CCAP2H = 0xfc;
//sfr PCA_PWM2 = 0xf4;
//sfr P0M1 = 0x93;
//sfr P0M0 = 0x94;
//sfr P1M1 = 0x91;
//sfr P1M0 = 0x92;
//sfr P2M1 = 0x95;
//sfr P2M0 = 0x96;
//sfr P3M1 = 0xb1;
//sfr P3M0 = 0xb2;
//sfr P4M1 = 0xb3;
//sfr P4M0 = 0xb4;
//sfr P5M1 = 0xc9;
//sfr P5M0 = 0xca;
//sfr P_SW1 = 0xa2;
#define u16 unsigned int
#define u8 unsigned char
u16 val;
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 6;
j = 157;
k = 59;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/*------------------------AD采样-----------------------------*/
void Get_ADC(unsigned char channel) //channel =2~3
{
P_SW2 |= 0x80; //使能访问XFR
ADCTIM = 0x29; //设置ADC内部时序,达到该单片机的采样转换速率的极限500k
P_SW2 &= 0x7f;
ADCCFG = 0x20; //设置ADC时钟为内部时钟的1/2,转换右对齐
ADC_CONTR = 0x80; //使能ADC模块
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel; //启动AD转换和adc通道选择
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR & 0x20) == 0); //wait for ADC finish
ADC_CONTR &= ~0x20; //清除ADC结束标志
}
void PWM_SET(u16 val) //val 取值 0-1023
{
u8 dat = ((val>>8));
PCA_PWM2 = 0xc0|(dat<<4);
CCAP2H = (u8)(val);
}
void main()
{
// u16 PWM = 10;
P3M0 &= ~0x0c; P3M1 |= 0x0c; //IO口初始化
P5M0 |= 0x30; P5M1 &= ~0x30;
P_SW1 &= 0XCF;
CCON = 0x00;
CMOD = 0x08; //PCA时钟为系统时钟
CL = 0x00;
CH = 0x00;
//--10位PWM--
CCAPM2 = 0x42; //PCA模块2为PWM工作模式
PCA_PWM2 = 0xc0; //PCA模块2输出10位PWM
// PWM_SET(PWM);
CR = 1; //启动PCA计时器
while (1)
{
Get_ADC(0x02); //启动AD采样,打开采样通道2
val = ~(ADC_RES << 8| ADC_RESL); //将AD采样的值付给a,并取反,使其占空比随着采样电压的增大而变大
PWM_SET(val); //跟随AD采样值打占空比
}
}
|
|