微波EDA网,见证研发工程师的成长! 2025妤犵儑鎷�04闁哄牞鎷�07闁哄喛鎷� 闁哄嫮鍠愬﹢锟�濞戞挴鍋�
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求解这个程序为什么在实物中没有用?

求解这个程序为什么在实物中没有用?

时间:10-02 整理:3721RD 点击:
#define         MAIN_Fosc                2400000UL
#include "STC15FXXXX.H"
sbit led_1=P1^7;
sbit led_2=P1^6;
sbit led_3=P4^7;
sbit led_4=P4^6;
void init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
}
void timer (void) interrupt 1
{
static count=0;
unsigned int i=0;
count++;
if(count==20)
{
   i++;
   count=0;
         }
         if(i==4)
         {
          i=0;
          }
            switch (i)
  {
   case 0:{led_1=0;led_2=1;led_3=1;led_4=1;}break;
   case 1:{led_1=1;led_2=0;led_3=1;led_4=1;}break;
   case 2:{led_1=1;led_2=1;led_3=0;led_4=1;}break;
   case 3:{led_1=1;led_2=1;led_3=1;led_4=0;}break;
   default:{led_1=0;led_2=0;led_3=0;led_4=0;}break;
   }
            TH0=(65536-50000)/256;
         TL0=(65536-50000)%256;
}
void main()
{
init();
while(1);
}

要看你出问题的状况,LED亮与灭是否能实现,定时器的定时间隔会不会太短,做测试用可以把间隔定位300毫秒以上,这样可以看到LED的明显变化,另外我不知道这句void timer (void) interrupt 1是定时器0还是1的中断程序,看初始化,你应该是启动定时器0的。

LED灯直接不亮   void timer (void) interrupt 1  这个是定时器0的中断程序

找到问题的所在了    使用的时候需要将IO口全设置为准双向口   虽然我不知道为什么这样就好了

你的关键问题出在于中断服务程序中 unsigned int i=0; 这条,需要改成static unsigned int i=0;或unsigned int i;。否则每次进入中断就要对i初始化为0,结果i只能在0~1之间变换,不能形成流水灯。这与端口设置没有什么关系

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top