请教各位高人,为什么我在t0的中断里设置的判断中断计数...

2020-01-22 12:02发布

请教各位高人,为什么我在t0的中断里设置的判断中断计数的led状态没有改变呢   按照我的设想,在中断不同的次数里,led会输出不同的状态  不知问题在哪里 请各位指点一二

// 18.432MHz
#include "reg52.h"
#define PWM8BIT     485            
#define HIGHDUTY 80                  
#define LOWDUTY  (PWM8BIT-HIGHDUTY)  
sfr AUXR      = 0x8e;               
sfr INT_CLKO  = 0x8f;               
sbit T0CLKO   = P1^0;               
sbit led   = P1^1;
bit flag;
unsigned int cout;
void tm0() interrupt 1
{
    T0CLKO = !T0CLKO;
          flag = !flag;                    
    if (flag)
    {
        TL0 = (65536-HIGHDUTY);     
        TH0 = (65536-HIGHDUTY) >> 8;
    }
    else
    {
        TL0 = (65536-LOWDUTY);      
        TH0 = (65536-LOWDUTY) >> 8;
    }
         cout=+1;       
                 switch(cout)
                   {
        case 20:
                                        led=0;
                                  break;   
        case 40:
                                        led=1;
                                  break;      
        case 60:
                                        led=0;
                                  break;
        case 80:
                                        led=1;
                                  break;
        case 100:
                                        led=0;
                                  break;
        case 120:
                                        led=1;
                                  break;
        case 140:
                                        led=0;
                                  break;
        case 160:
                                        led=1;
                                  break;
        case 180:
                                        led=0;
                                  break;
        case 200:
                                        led=1;
                                  break;
                          }
                if (cout==200)
                       {
                                                 cout=1;
           }
}

void main()
{
    AUXR = 0x80;                     
    INT_CLKO = 0x01;               
    TMOD &= 0xf0;                    
    TL0 = (65536-LOWDUTY);           
    TH0 = (65536-LOWDUTY) >> 8;
    T0CLKO = 1;                     
    flag = 0;                       
    TR0 = 1;                        
    ET0 = 1;                       
    EA = 1;
          cout=1;
          led=0;
    while (1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
vc9181
1楼-- · 2020-01-22 13:48
 精彩回答 2  元偷偷看……
pigy0754
2楼-- · 2020-01-22 16:01
楼主刚接触C么?count =+1;改为count += 1或count++;
程序可以变简单点if (0 == count%20) led反转显示,还有可以只在中断中置标志,在while中来完成led反转
JohnsonTan
3楼-- · 2020-01-22 17:54
编译过啊
dz46316740
4楼-- · 2020-01-22 19:53
从简单的代码入手
落叶随风
5楼-- · 2020-01-22 23:33
cout=+1; 貌似与 cout=1 没区别吧。。。
mo959
6楼-- · 2020-01-23 01:00
 精彩回答 2  元偷偷看……

一周热门 更多>