标题:
单片机两个定时器是需要两个外部中断吗?
[打印本页]
作者:
弓长张
时间:
2018-7-19 12:21
标题:
单片机两个定时器是需要两个外部中断吗?
我现在做的是使用两个传感器 一个超声波 一个PH 程序里用到了定时器0 和定时器1 两个传感器给的参考例程用的都是定时器0和外部中断0,然后我就把超声波的定时器改成了 定时器1 外部中断1
两个用的都是TMOD=0X01;
我改成了 TMOD=0X11;
这是PH参考程序利用到的外部中断
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=(65536-2)/256; //重装计数初值
TL0=(65536-2)%256; //重装计数初值
CLK=!CLK; //取反
}
/*************************************************************************
主函数
**************************************************************************/
void main()
{
TMOD=0X01; //定时器中断0
CLK=0; //脉冲信号初始值为0
TH0=(65536-2)/256; //定时时间高八位初值
TL0=(65536-2)%256; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
while(1) //无限循环
{
ST=0; //使采集信号为低
ST=1; //开始数据转换
ST=0; //停止数据转换
while(!EOC); //等待数据转换完毕
OE=1; //允许数据输出信号
AD0809=P1; //读取数据
OE=0; //关闭数据输出允许信号
if(AD0809>=251) //电压显示不能超过5V
AD0809=250;
date=AD0809*20; //数码管显示的数据值,其中20为采集数据的毫安值
xianshi(); //数码管显示函数
}
}
这是超声波里用到的
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/100;
void main(void)
{
TMOD=0x01; //设T0为方式1,GATE=1
TH0=0;
TL0=0;
TR0=1;
Lcd_init(); //设置液晶显示器
Clr_Scr(); //清屏
Disp_img(logo); //显示欢迎使用本产品LOGO
Delaynms(12000);
Lcd_init(); //从图形显示状态下返回
Lcd_Mark2();
while(1)
{
StartModule();
//计算
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut();
delayms(1200); //80MS
这是我把他两个揉起来的
void main(void)
{
TMOD=0x11; //设T0为方式1,GATE=1
TH1=0;
TL1=0;
TR1=1;
CLK=0; //脉冲信号初始值为0
TH0=(65536-2)/256; //定时时间高八位初值
TL0=(65536-2)%256; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
Lcd_init();
Lcd_Mark2();
Lcd_Mark3();
while(1)
{
StartModule();
//计算
while(!RX); //当RX为零时等待
TR1=1; //开启计数
while(RX); //当RX为1计数并等待
TR1=0; //关闭计数
Conut();
delayms(80); //80MS
ST=0; //使采集信号为低
ST=1; //开始数据转换
ST=0; //停止数据转换
while(!EOC); //等待数据转换完毕
OE=1; //允许数据输出信号
AD0809=P1; //读取数据
OE=0; //关闭数据输出允许信号
if(AD0809>=251) //电压显示不能超过5V
AD0809=250;
date=AD0809*20; //显示的数据值,其中20为采集数据的毫安值
xianshi(); //显示函数
}
}
/*************************************************************************
CLK振荡信号
**************************************************************************/
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=(65536-2)/256; //重装计数初值
TL0=(65536-2)%256; //重装计数初值
CLK=!CLK; //取反
}
还请大佬看看哪里出了问题 我现在如果只用超声波的话 程序可以 如果把PH的东西都插上 数据就不能实时显示 只能通电的一瞬间显示然后数据就定住了
作者:
devcang
时间:
2018-7-19 15:24
时钟不需要外部中断,有时钟中断。
~~~~~~~~~~~~~~~~~
程序,根据逻辑融合起来,而不是生搬硬套拷贝到一起。
~~~~~~~~~~~~~~
作者:
huaxinnan
时间:
2018-7-19 15:50
可以一个中断里面执行两个动作,如果你需要使用两个中断 那你的程序里面就需要两个中断。
作者:
LIUJISHAN
时间:
2018-7-19 16:27
时钟有时钟中断的、
作者:
CY1994
时间:
2018-7-19 17:22
首先定时器1的中断没有开启,其次程序的逻辑也要注意,特别是中断优先级等等
作者:
792544979
时间:
2018-7-19 19:13
定时器不需要外部中断,内部中断就可以
作者:
天高我更高
时间:
2018-7-20 10:26
定时器是定时器的两个寄存器溢出中断,外部中断是外部中断
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1