新手入门
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2015-4-8
- 在线时间
- 0 小时
|
5金钱
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit led_1=P1^0;
sbit led_2=P1^1;
sbit led_3=P1^2;
sbit led_4=P1^3;
sbit led_8=P1^7;
sbit led_5=P1^4;
char flag,a,b,c,max,min;
int Time_Count=0; //定时计数
uint Timer0_IRQ_Event=0; // T/C0定时中断事件
void uart_init(void);//串行口初始化
void Timer0_Start(void);
void uart_init(void)
{
TMOD=0x21;//即0010 0000,定时器/计数器1,工作方式2
TH1=0xfd;//设置波特率为9600
TL1=0xfd;
TR1=1;//启动定时器/计数器1
SCON=0x50; //0101 0000.串口工作方式1,允许串行控制
PCON=0x00;//设置SMOD=0
IE=0x90; //CPU允许中断,串行允许中断
TI=1;//直接使用printf必须加入此句才能实现发送
}
void Timer0_Start(void)
{
//TMOD=0x01; // T/C0工作方式1
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
TR0=1;
ET0=1;
}
void Timer0_IRQ() interrupt 1
{
led_3=0;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(flag==0)
{ Time_Count++; }
if(flag==1)
{ Time_Count--; }
a=Time_Count;
Timer0_IRQ_Event=1;
}
void main()
{
uart_init();
Timer0_Start();
//EA=1; //允许所有中断
while(1)
{
b=a;
c=a;
a=Time_Count;
if(b<a&&a>c) {
max=a;
printf("%d \n",max);
}
if(b>a&&a<c) {
min=a;
printf("%d \n",min);
}
led_8=~led_8;
if(Timer0_IRQ_Event) // T/C0中断事件
{
Timer0_IRQ_Event=0;
if(led_4==1)
{
flag=1;
}
if(led_4==0)
{
flag=0;
}
}
}
}
|
|