找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

谁帮我看下程序,看看错在哪

[复制链接]
admin 发表于 2012-9-3 01:43:00 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
求助:以下是我写的代码,是关于stc系列单片机4路PWM输出用AD转换的,定时1工作方式2。

问一:程序设定的值应该是P03输出占空比50%频率12.5HZ、P02输出占空比50%频率25HZ.但现在测得实际输出信号分别为占空比50%,频率2HZ、4HZ.

问二:while中的if((P02==1)&&(P03==0))语句始终不会被执行,单步执行的时候中断是可以进的。总好像是P02P03的值改不了。

请大侠帮忙看看,谢谢了


#include<reg52.h>
sfr P1M0=0X91;
sfr P1M1=0X92;
sfr ADC_CONTR=0XC5;
sfr ADC_DATA=0XC6;
//sfr ADC_LOW2=0XBE;
sbit P03=P0^3;
sbit P02=P0^2;

bit LED_SHOW=1;
unsigned char time_count1;
unsigned char time_count2;
unsigned char ADC_CHANNEL_6_RESULT;
#define ADC_POWER_ON_SPEED_CHANNEL_6 0XE6;
sfr CCON="0xd8"; //0X11011000 PCA控制寄存器//
sfr CMOD="0xd9"; //0X11011000 计数方式选择控制//
sfr CL="0xe9";
sfr CH="0XF9";
sfr CCAP0L=0xea;
sfr CCAP0H=0xfa;
sfr CCAP1L=0xeb;
sfr CCAP1H=0xfb;
sfr CCAP2L=0xec;
sfr CCAP2H=0xfc;
sfr CCAP3L=0xed;
sfr CCAP3H=0xfd;
sfr CCAPM0=0xda;
sfr CCAPM1=0xdb;
sfr CCAPM2=0xdc;
sfr CCAPM3=0xdd;
sfr PCA_PWM0=0xf2;
sfr PCA_PWM1=0xf3;
sfr PCA_PWM2=0xf4;
sfr PCA_PWM3=0xf5;
sfr IPH="0XB7";
sbit CR="0xde";
sbit m1=P2^1;
sbit P31=P3^1;
char step;
bit flag="1";
#define step 6;
unsigned char va="1";
int i="0";
unsigned char PWMT0,PWMT1=0X03,CCA0,CCA1=0XFF;
void PCM()
{
PCA_PWM0=PWMT0;
PCA_PWM1=PWMT1;
PCA_PWM2=PWMT0;
PCA_PWM3=PWMT1;
CCAP0H=CCA0;
CCAP1H=CCA1;
CCAP2H=CCA0;
CCAP3H=CCA1;
}
void PCA_Initiate()
{
CMOD="0X84";
CCON="0X00";
CL=0X00;
CH=0X00;
PCA_PWM0=0X00;
PCA_PWM1=0X00;
PCA_PWM2=0X00;
PCA_PWM3=0X00;
CCAPM0=0x42;
CCAPM1=0x42;
CCAPM2=0x42;
CCAPM3=0x42;
CR=1;
}
void ADC_KONGZHI()
{
ADC_DATA=0;
ADC_CONTR=ADC_CONTR|0X08;
if(ADC_DATA)
{ do
{
;
}while((ADC_CONTR&0X10)==0);}
ADC_CONTR=ADC_CONTR&0xe6;
ADC_CHANNEL_6_RESULT=ADC_DATA;
if(ADC_CHANNEL_6_RESULT>0xa5)
{LED_SHOW=0;}
else
LED_SHOW=1;
}
void timer_init()
{
TMOD="0X22";
TF0=0;
TF1=0;
TH0=0Xff;
TL0=0xff;
TH1=0Xa0;
TL1=TH1;
EA=1;
ET1=1;
TR0=1;
TR1=1;
IP="0X08";
IPH=0X08;
P03=1;
P02=1;
}
void IntTime1()interrupt 3 using 1
{
time_count1++;
if(time_count1==1)
{
time_count2++;
if(time_count2==1)
{
P03=0;
P02=0;
}
if(time_count2==2)
{
P03=0;
P02=1;
}
if(time_count2==4)
{
P03=1;
P02=0;
}
if(time_count2==6)
{
P03=1;
P02=1;
time_count2=0;
}
time_count1=0;
}
}
main()
{
m1=1;
PCA_Initiate();
timer_init();
ADC_CONTR=ADC_CONTR|0X80;
P1M0=0X40;
P1M1=0X40;
ADC_CONTR=ADC_POWER_ON_SPEED_CHANNEL_6;
LED_SHOW=0;
while(1)
{
PCM();
P31=LED_SHOW;
if((P02==1)&&(P03==0))
{
ADC_KONGZHI();
}
else
LED_SHOW=1;
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-24 08:36 , Processed in 0.055687 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表