一个产生PWM的程序 ,下载到实验板上的现像是一个LED灯一直亮暗亮暗的循环。中断部分我不理解,望大侠给解释一下。谢谢!
#include <reg52.h>
sbit LED = P1^0;
unsigned char CYCLE;
unsigned char PWM_ON ;
void delay(unsigned int cnt)
{
while(--cnt);
} 延时函数结束
main() 主函数开始
{
bit Flag; 确定标志位只能是0或者1
TMOD |=0x01; 定时器工作在16位计数方式
TH0=(65536-100)/256; 高8位初始值
TL0=(65536-100)%256; 低8位初始值
IE= 0x82; 打开中断总开关,打开定时器0开关
TR0=1; 定时器开始计数
CYCLE = 10; 一个电平翻转的周期是10个中断,也就是20个中断为一个PWM周期
while(!Flag) 这一段小程序循环10次
{
delay(200000);
PWM_ON++;
if(PWM_ON ==CYCLE)
{
Flag=1; 标志位置1
}
}
while(Flag) 这一段小程序运行10次
{
delay(200000);
PWM_ON--;
if(PWM_ON == 0)
{
Flag=0; 标志位置0
}
}
}
void tim(void) interrupt 1 using 1 定时器0的中断
{
static unsigned char count; static是什么意思 ,在这有什么用?
TH0=(65536-100)/256; 定时器恢复初始值
TL0=(65536-100)%256; 定时器恢复初始值
if (count==PWM_ON) PWM-ON在主程序中是一值变化 的,它们两个怎么比较?
{
LED = 1;
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0)
LED = 0;
}}
有如下几个问题 1 :TR0=1 这个中断开关一但打开,就会一直定时吗 ?当定时器溢出后主函数响应, 开
始运行中断函数,就会把中断函数从头到尾走一遍然后再重新定时吗?
2:中断函数中, PWM-ON在主程序中是一值变化 的,它们两个怎么比较?
3: static 这个关键字在中断函数中有什么用,我是初学,还没有接触过它。
这个程序上部分没有写出来,还有,哪位大侠用白话把中断函数中的语句翻译一下,谢谢
|