本帖最后由 蔚蓝柳叶 于 2014-7-28 22:06 编辑
#include<reg51.h>
#include <intrins.H>
#define uchar unsigned char
#define uint unsigned int
uchar distance_H,distance_L;
//特殊寄存器定义
sfr CLK_DIV =0x97;
//STC MCU IO register define total way
sfr P1M1= 0x91;
sfr P1M0= 0x92;
sfr P3M1= 0xB1;
sfr P3M0= 0xB2;
//IO口引脚说明
sbit Trig =P1^0;
sbit Echo =P3^2;
sbit led1_5 =P1^1;
sbit led5_10 =P1^2;
sbit led10_15 =P1^3;
sbit led15_20 =P1^4;
void IO_inint(void);
void sys_inint(void);
void delay_nop(uint timer);
void led_out(void);
//IO口初始化
void IO_inint(void)
{
CLK_DIV=0x02;//系统时钟四分之一分频
P1M1= 0x00; //0000 0000
P1M0= 0x1e; //0001 1110
P1=0x00; //0000 0000
P3M1= 0x04; //0000 0100
P3M0= 0x00; //0000 0000
}
//定时中断初始化设定
void sys_inint(void)
{
TMOD=0x01; //0 0 方式0 13位计数器 TMOD=0x00 //1 0 方式2 自动重装8位计数器 TMOD=0x02
TH0=0; //0 1 方式1 16位计数器 TMOD=0x01 //1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03
TL0=0; //TH0 TL0计数初值
TR0=0; //关定时器0
IT0=0; //上升沿触发
EX0=0; //禁用外部中断
EA=1; //中断总允许位
}
//NOP延时
void delay_nop(uint timer)
{
while(timer--){_nop_();}
}
//外部中断0,用做判断回波电平
void int0_routine(void) interrupt 0
{
distance_H =TH0; //取出定时器0的值
distance_L =TL0; //取出定时器0的值
EX0=0; //关闭外部中断
}
//LED输出控制
void led_out(void)
{
uint distance;
distance=distance_H; //测量结果的高8位
distance<<=8; //放入16位的高8位
distance=distance|distance_L; //与低8位合并成为16位结果数据
distance*=12; //因为定时器默认为12分 频
distance/=58; //一厘米就是58us
if(distance>2&&distance<50)//测量距离在2到50厘米时,led1_5灯亮
{
led1_5=1;
}
else
{
led1_5=0;
}
if(distance>50&&distance<100)//测量距离在50到100厘米时,led5_10灯亮
{
led5_10=1;
}
else
{
led5_10=0;
}
if(distance>100&&distance<150)//测量距离在100到150厘米时,led10_15灯亮
{
led10_15=1;
}
else
{
led10_15=0;
}
if(distance>150&&distance<200)//测量距离在150到200厘米时,led15_20灯亮
{
led15_20=1;
}
else
{
led15_20=0;
}
}
//系统主程序
void main(void)
{
IO_inint();
sys_inint();
while(1)
{
Trig=1;
delay_nop(20);
Trig=0;
while(!Echo);
TR0=1;
EX0=1;
while(TH0<40);
TR0=0; //关闭定时器0
TH0=0; //定时器0清零
TL0=0; //定时器0清零
led_out();
}
}
这是XKC-007Y-PWM超声波模块的例程,麻烦分析 main 程序的意思。 while(TH0<40);是什么意思?什么时候会用到中断 void int0_routine(void) interrupt 0 ?超声波什么时候发出(哪个语句),什么时候接收到?main函数各语句麻烦注释下,尽量详细!!!谢谢!
|