各位在行的幫我看看這代碼為什么不能運(yùn)行:各位在行的幫我看看這代碼為什么不能運(yùn)行
/***********************************************************/
//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_()
//使用內(nèi)部時鐘6MHZ,
#define T10MS 65536-500 //定時器初值設(shè)定,現(xiàn)在設(shè)定為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++) ;
}
}
/***********************************************************/
//系統(tǒng)變量初始化 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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; //外部下降沿觸發(fā)
EX0=1; //開啟外部中斷
EX1=1;
}
/***********************************************************/
//定時器0中斷服務(wù)程序 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
void timer0() interrupt 1
{
TL0 = T10MS&0xff; //1ms
TH0 = (T10MS>>8)&0xff;
T0count++;
if(Enab_E_A)
{
E_Acount++;
}
else
{
E_Acount=0;
}
}
/***********************************************************/
//外中斷0服務(wù)程序 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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服務(wù)程序 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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流水燈運(yùn)行 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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流水燈運(yùn)行 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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流水燈運(yùn)行 */
//輸入:無 */
//輸出:無 */
/***********************************************************/
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;
}
}
}
/***********************************************************/
//主函數(shù) */
//功能1:C/D觸發(fā)后,對應(yīng)的1-5/6-10流水燈啟動,正常每6S跳變,*/
// 如果B高時每10MS跳變 */
//功能2:E高A無效,如果E底并且A連續(xù)底10S,1-5流水燈,并1M后*/
// 重復(fù)一次 */
/***********************************************************/
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后再循環(huán)一次
}
}
[ 此帖被bsm5632在2011-06-04 19:29重新編輯 ]