/**********************************/
//使用定时器中断实现8个LED灯亮1000ms和灭1000ms
//要求:不能使用软件延时;
/**********************************/
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
sbit led4=P1^4;
sbit led5=P1^5;
sbit led6=P1^6;
sbit led7=P1^7;
uchar count = 0;
void delay(uchar num)
{
uchar i = 0,j = 0;
for(i =num;i>0;i--)
for(j = 114;j>0;j--);
}
/*中断服务特殊功能寄存器配置*/
void timer0_init()
{
TMOD = 0x01; //16位 定 时器模式
TH0 = (65536 - 46082)/256;
TL0 = (65536 - 46082)%256; // 定时50ms 1000ms的话*20;
/*三步走:
此中断允许位为1
总中断CPU中断打开(EA = 1)
中断源有中断请求 TF0 是中断请求;
*/
ET0 = 1; //定时器计数器允许中断;
EA = 1; //开放所有的中断
TR0 =1; //启动定时器0
}
int main()
{
timer0_init();
while(1)
{
;
}
return 1;
}
//中断服务子程序
void timer0() interrupt 1
{
TH0 = (65536 - 46082)/256;
TL0 = (65536 - 46082)%256; //50ms
count++;
if(count==20) //1000ms
{
count = 0;
delay(5);
led = ~led;
led1 = ~led1;
led2 = ~led2;
led3 = ~led3;
led4 = ~led4;
led5 = ~led5;
led6 = ~led6;
led7 = ~led7;
}
}
清翔电子51单片机10课中断课后作业1
最新推荐文章于 2023-08-06 15:00:16 发布