我的想法是用定时器0每0.1ms产生一个脉冲,然后用一个变量对时间计数,然后让LED(P2_0)灯亮 一秒再灭一秒。
- #include <reg52.h> //预处理命令
unsigned int timeC;
sbit P2_0 = 0xA0^0;
sbit P2_1 = 0xA0^1;
void initCom(){
//SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x22; //定时器0,1均工作方式2
//PCON|= 0x80;
TH1 = 0xF3; //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TH0 = 0x9C; // 计时器0的定时值为0.1ms
TL0 = 0x9C;
//ES = 1; //开串口中断
EA = 1; // 开总中断
TR0 = 1; // 定时器0可用
TR1 = 1; // 定时器1可用
// IE = 0x0;
P2 = 0xff; //关LED指示
}
void timer(void) interrupt 1 using 1{ // 中断程序,由定时器0产生中断
timeC++;
}
void main(){ // 主程序
initCom();
while(1){
if(timeC<10000){
P2_0 = 0; //点亮LED
}
if(timeC>10000){
P2_0 = 1; //灭LED
}
if(timeC>20000){
timeC = 0;
}
}
}
复制代码程序编译下装都没有问题,就是单片机执行的时候LED常亮了,没有达到设计的效果,请帮我看一下,我的程序的问题出在哪儿,谢谢
此帖出自
小平头技术问答
一周热门 更多>