本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
各位在行的帮我看看这代码为什么不能运行
/***********************************************************/
//MCU : STC12C2052AD */
//DATA: 2011.0602 */
//EDIT: V 0.1 */
/***********************************************************/
//--------------------------------------------------
//头文件
#include <STC12C2052AD.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define NOP() _nop_()
//使用内部时钟6MHZ,
#define T10MS 65536-500 //定时器初值设定,现在设定为1ms
/***********************************************************/
//变量定义 */
/***********************************************************/
bit Flag_p3p3;
bit Flag_ex0;
bit Flag_ex1;
bit Enab_E_A;
bit EA_En1_5;
bit EA_En60s;
/**********************************************************/
/*
sbit A = P3^2;
sbit B0 = P3^3;
sbit C = P3^4;
sbit D = P3^5;
sbit E = P3^7;
*/
/**********************************************************/
uint T0count ;
uchar Pionum ;
uchar Pionum1 ;
uint E_Acount;
/***********************************************************/
//流水灯列表 */
/***********************************************************/
uchar code dis1[5] = {0x01,0x02,0x04,0x08,0x10};
uchar code dis2[5] = {0x20,0x40,0x80,0x01,0x02};
/***********************************************************/
//延时子程序 */
//输入:ms */
//输出:无 */
/***********************************************************/
void Delay_ms(uchar ms)
{
uchar i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<10;j++) ;
}
}
/***********************************************************/
//系统变量初始化 */
//输入:无 */
//输出:无 */
/***********************************************************/
void SYS_init()
{
P3 = 0x00;
P1 = 0x00;
Pionum = 0;
Pionum1 = 0;
T0count = 0;
Flag_p3p3= 1;
Flag_ex0 = 0;
Flag_ex1 = 0;
Enab_E_A = 0;
EA_En1_5 = 0;
EA_En60s = 0;
}
/***********************************************************/
//定时器0初始化 */
//输入:无 */
//输出:无 */
/***********************************************************/
void timer_init()
{
//WAKE_CLKO |=0x60;
AUXR &=0x3f; //12分频
TL0 = T10MS&0xff; //1ms
TH0 = (T10MS>>8)&0xff;
TMOD = 0X11;
ET0 = 1;
TR0 = 1;
EA = 1;
}
/***********************************************************/
//外中断初始化 */
//输入:无 */
//输出:无 */
/***********************************************************/
void Ex_init()
{
IT0=0;
IT1=0; //外部下降沿触发
EX0=1; //开启外部中断
EX1=1;
}
/***********************************************************/
//定时器0中断服务程序 */
//输入:无 */
//输出:无 */
/***********************************************************/
void timer0() interrupt 1
{
TL0 = T10MS&0xff; //1ms
TH0 = (T10MS>>8)&0xff;
T0count++;
if(Enab_E_A)
{
E_Acount++;
}
else
{
E_Acount=0;
}
}
/***********************************************************/
//外中断0服务程序 */
//输入:无 */
//输出:无 */
/***********************************************************/
void Ex_int0() interrupt 0
{
EX0=0;
Delay_ms(10);
if(Flag_ex0)
{
Flag_ex0=0;
}
else
{
Flag_ex0=1;
T0count =0;
}
EX0=1;
}
/***********************************************************/
//外中断1服务程序 */
//输入:无 */
//输出:无 */
/***********************************************************/
void Ex_int1() interrupt 2
{
EX1=0;
Delay_ms(10);
if(Flag_ex1)
{
Flag_ex1=0;
}
else
{
Flag_ex1=1;
T0count =0;
}
EX1=1;
}
/***********************************************************/
//1-5流水灯运行 */
//输入:无 */
//输出:无 */
/***********************************************************/
void LED_1_5()
{
if(Flag_ex0)
{
if(P3&0x08 ==0) //P3.3=1 ?
{
//--------------------------
if((T0count == 6000)&&(Pionum<5))
{
T0count=0;
P1 = dis1[Pionum++];
}
else if(Pionum>=5)
{
Pionum=0;
}
Flag_p3p3=1;
}
else
{
//--------------------------
if(Flag_p3p3)
{
Flag_p3p3=0;
T0count =0;
}
if((T0count == 10)&&(Pionum<5))
{
T0count=0;
P1 = dis1[Pionum++];
}
else if(Pionum>=5)
{
Pionum=0;
}
}
}
}
/***********************************************************/
//6-10流水灯运行 */
//输入:无 */
//输出:无 */
/***********************************************************/
void LED_6_10()
{
if(Flag_ex1)
{
if(P3&0x08 ==0) //P3.3=1 ?
{
//--------------------------
if((T0count == 6000)&&(Pionum1<3))
{
T0count=0;
P1 = dis1[Pionum1++];
}
else if((T0count == 6000)&&(Pionum1>=3)&&(Pionum1<5))
{
T0count=0;
P3 = dis1[Pionum1++];
}
else if(Pionum1>=5)
{
Pionum1=0;
}
Flag_p3p3=1;
}
else
{
//--------------------------
if(Flag_p3p3)
{
Flag_p3p3=0;
T0count =0;
}
if((T0count == 10)&&(Pionum1<3))
{
T0count=0;
P1 = dis1[Pionum1++];
}
else if((T0count == 10)&&(Pionum1>=3)&&(Pionum1<5))
{
T0count=0;
P1 = dis1[Pionum1++];
}
else if(Pionum1>=5)
{
Pionum1=0;
}
}
}
}
/***********************************************************/
//6-10流水灯运行 */
//输入:无 */
//输出:无 */
/***********************************************************/
void E_A_1_5()
{
while((P3&0x84 == 0)) //E=0 p3.7=0,p3.2=0
{
Enab_E_A=1;
if(E_Acount>=10000) //大于10S,1-5流水灯
{
T0count =0;
Pionum =0;
E_Acount=0;
EA_En1_5=1;
}
}
//Enab_E_A=0;
if(EA_En1_5)
{
while(Pionum<5)
{
if(P3&0x08 ==0) //P3.3=1 ?
{
//--------------------------
if(T0count == 6000)
{
T0count=0;
P1 = dis1[Pionum++];
}
Flag_p3p3=1;
}
else
{
//--------------------------
if(Flag_p3p3)
{
Flag_p3p3=0;
T0count =0;
}
if((T0count == 10))
{
T0count=0;
P1 = dis1[Pionum++];
}
}
}
EA_En1_5=0;
EA_En60s=1;
E_Acount=0;
} else Enab_E_A=0;
//-----------------------------------------------------
if(EA_En60s)
{
if(E_Acount>=60000) //大于60S ,1-5流水
{
while(Pionum<5)
{
if(P3&0x08 ==0) //P3.3=1 ?
{
//--------------------------
if(T0count == 6000)
{
T0count=0;
P1 = dis1[Pionum++];
}
Flag_p3p3=1;
}
else
{
//--------------------------
if(Flag_p3p3)
{
Flag_p3p3=0;
T0count =0;
}
if((T0count == 10))
{
T0count=0;
P1 = dis1[Pionum++];
}
}
}
Enab_E_A=0;
}
}
}
/***********************************************************/
//主函数 */
//功能1:C/D触发后,对应的1-5/6-10流水灯启动,正常每6S跳变,*/
// 如果B高时每10MS跳变 */
//功能2:E高A无效,如果E底并且A连续底10S,1-5流水灯,并1M后*/
// 重复一次 */
/***********************************************************/
void main()
{
SYS_init() ;
timer_init();
Ex_init() ;
/*******************************************************/
while(1)
{
LED_1_5() ; //外部C下降沿来是,1-5流水灯
LED_6_10(); //外部D下降沿来是,6-10流水灯
E_A_1_5() ; //E为低,并且A为低10S后,1-5流水一次,并6s后再循环一次
}
}
[ 此帖被bsm5632在2011-06-04 19:29重新编辑 ]
测试程序11.txt
(8.54 KB, 下载次数: 0)
|