通过单片机中断系统利用定时器0完成,定时1~9秒时流水灯循环左移动,定时10~19到流水灯循环右移,定时大于等于20秒时灯全亮
P0---------J4
实验代码:
#include<reg52.h> // 头文件
#include<intrins.h> // 头文件
#define uchar unsigned char// 替换变量
uint count=0;//定义全局变量
uchar a;
uint i;
void mDelay(uint Delay)//将函数延时
{
for(;Delay>0;Delay--)//开始循环从>0时开始自减
for(i=0;i<110;i++);//延长循环时间
}
void main()
{
TMOD=0x00;//配置定时器,定时器为0,工作方式为0
TH0=(8192-5000)/32;//定5ms 高8位
TL0=(8192-5000)%32;//定5ms 低5位
EA=1;//允许中断总控制
ET0=1;//允许中断定时器
TR0=1;//开始循环
while(1)
{
;//等待5ms后中断子程序
}
}
void to() interrupt 1
{
TH0=(8192-5000)/32;//定时器清零
TL0=(8192-5000)%32;
count++;//记录子程序的次数
if(count>=200&&count<=1800)//如果次数在200次到1800次之间说明到了1~9秒
{
a=0xfe;
for(i=0;i<8;i++)//实现8只流水灯的循环
{
P1=_crol_(a,1);//实现流水灯向左一次流水点亮
a=P1;
mDelay(10);//流水灯延时10ms
}
}
if(count>2000&&count<3800)// 如果次数在2000次到3800次之间说明到了10~19秒 {
for(i=0;i<8;i++)//实现8只流水灯的循环
{
P1=_cror_(a,1);// 实现流水灯向左一次流水点亮
a=P1;
mDelay(10);// 流水灯延时10ms
}
}
if(count>=4000)// 如果次数大于3800次说明时间大于等于20秒 {
P1=0x00;//流水灯全亮
}
}
0现象描述:核心板闪烁周期为1s,P1.1引脚输出90-112Hz的窄脉冲
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1 ^ 0;
sbit OUTPIN = P1 ^ 1;
uchar T_Count = 0;
void main()
{
TMOD = 0x00; //定时器0 工作方式0
TH0 = (8192 - 5000) / 32; //5ms 定时
TL0 = (8192 - 5000) % 32;
IE = 0x82; //允许T0 中断
TR0 = 1;
while(1); //等待中断
}
void LED_Flash() interrupt 1
{
TH0 = (8192 - 5000) / 32; //恢复定时初值
TL0 = (8192 - 5000) % 32;
OUTPIN = ~OUTPIN;
T_Count++;
if(T_Count >= 200) //如果到了200次,说明1s到了
{
T_Count = 0; // 然后把T_Count清0重新再计200次
LED = ~LED; //让核心板LED取反
}
}
1核心板LED闪烁周期为50ms,建议使用示波器观察P1^0输出的方波信号
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
uchar T_Count = 0;
void main()
{
uchar T_Count = 0;
TMOD = 0x01; //定时器0 工作方式1
TH0 = (65536 - 50000) / 256; //50ms 定时
TL0 = (65536 - 50000) % 256;
IE = 0x82; //允许T0 中断
TR0 = 1;
while(1);
}
//T0 中断函数
void LED_Flash() interrupt 1
{
TH0 = (65536 - 50000) / 256; //恢复初值
TL0 = (65536 - 50000) % 256;
LED = ~LED;
}
P0---------J4
2现象描述:LED1闪烁周期为250ms,建议使用数字存储示波器观察P1.0输出的脉冲
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
sbit OUTPIN = P1^1;
uint T_Count = 0;
void main()
{
uchar T_Count = 0;
//定时器0 工作方式2
TMOD = 0x02;
//250us 定时
TH0 = 256 - 250;
TL0 = 256 - 250;
IE = 0x82; //允许T0 中断
TR0 = 1;
while(1);
}
//T0 中断函数
void LED_Flash() interrupt 1
{
T_Count++;
OUTPIN =~OUTPIN ;
if(T_Count >= 1000) //如果到了1000次,说明250ms到了
{
T_Count = 0; // 然后把T_Count清0重新再计200次
LED = ~LED; //让核心板LED取反
}
}