本帖最后由 paifeng253625 于 2010-8-13 17:17 编辑
单独一路没问题,现在是两路一起工作就有问题,是什么原因呢?麻烦帮分析一下!
用二楼David_ming的代码修改的:非常感谢他的帮助。
#include <Intrins.h>
#include "reg_mpc82l52.h"
/************延时函数*****************/
void delay5ms() //5ms延时函数
{
unsigned int i;
for(i=0;i<4978;i++) ;
}
void delay4s() //4s延时函数
{
unsigned int j;
for(j=0;j<=800;j++)
{
delay5ms();
}
}
/***AD转换、PCA模块、PWM调制输出函数***/
void AD_ZH(void)
{
AUXR &= ~0x40; // 中断使能
CMOD = 0x02; //fosc/2,disable PCA overflow interrupt PCA模式控制寄存器,时钟来源为Fosc/2
CCON = 0x40; //start to runPCA控制寄存器,启动PCA
// ADCTL|= 0x08; //开始转换
if(P30==0) //A键按下
{
P1M0 |= 1<<7; //P1.0 SET of Z mode////作为ADC输入的IO口,一定要设成输入(Input Only)模式
P1M1 &= ~(1<<7); ////此DEMO程序只用到P17作为ADC输入口
// AUXR &= ~0x40; // 中断使能
ADCTL = 0xe7; // ADC转换控制寄存器 11100111,1打开ADC模块电源,11转换速度选择寄存器 210个机器周期,
P1M1 |= 1<<2; //
P1M0 &= ~(1<<2); //
CCAP0H = 0x00; //PCA模块0计数寄存器。设置PCA改变空占比
PCAPWM0 = 0x00; //0% - 99%PWN模式,模块0辅助寄存器
CCAPM0 = 0x42; //enable edge trigger & interrupt配置PCA模块0为8位PWM输出模式
// CMOD = 0x02; //fosc/2,disable PCA overflow interrupt PCA模式控制寄存器,时钟来源为Fosc/2
// CCON = 0x40; //start to runPCA控制寄存器,启动PCA
ADCTL|= 0x08; //开始转换
while((ADCTL & 0x10) != 0x10);//_nop_(); //检查是否转换完成
CCAP0H = ADC;
}
if(P34==0) //B键按下
{
P1M0 |= 1<<5; //P1.0 SET of Z mode////作为ADC输入的IO口,一定要设成输入(Input Only)模式
P1M1 &= ~(1<<5); ////此DEMO程序只用到P15作为ADC输入口
// AUXR &= ~0x40; // 中断使能
ADCTL = 0xc5; // 转换控制寄存器
P1M1 |= 1<<3; //
P1M0 &= ~(1<<3); //
CCAP1H = 0x00; //PCA模块0计数寄存器。设置PCA改变空占比
PCAPWM1 = 0x00; //0% - 99%PWN模式,模块0辅助寄存器
CCAPM1 = 0x42; //enable edge trigger & interrupt配置PCA模块0为8位PWM输出模式
// CMOD = 0x02; //fosc/2,disable PCA overflow interrupt PCA模式控制寄存器,时钟来源为Fosc/2
// CCON = 0x40; //start to runPCA控制寄存器,启动PCA
ADCTL|= 0x08; //开始转换
while((ADCTL & 0x10) != 0x10);//_nop_(); //检查是否转换完成
CCAP1H = ADC;
}
}
/**************主函数******************/
void main(void)
{
while(1)
{
P35=1;
P37=1;
AD_ZH();
delay4s(); //关闭PCA
CMOD = 0;
CCAP0H = 0;
CCAPM0 = 0;
CCAP0L = 0;
CCAP0H = 0;
P35 = 1;
P37 = 1;
}
}
|