S
suibian424
Unregistered / Unconfirmed
GUEST, unregistred user!
求一小段程序中关于中断的解释
#include <io8515.h>
#pragma interrupt_handler Icp_timer1:4 // 设置ICP中断
/* 七段译码字形表 */
const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 显示缓冲区 */
unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
unsigned int oldcount;
unsigned int newcount;
/******************************
1ms延时程序
******************************/
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<1142;i++)
;
}
/******************************
六路动态扫描显示电路
******************************/
void display(void)
{
unsigned char i;
for (i=0;i<6;i++)
{
PORTB=ledbuff;
//将显示缓冲区数据送PORTB口
PORTD=~(1<<i);
//开始显示
delay_1ms();
//每一位显示保持一定时间
PORTD|=(1<<i);
//关闭显示
}
}
/************************************
将count十六进制数据转换为LED七段码
************************************/
void hextobcd(unsigned int count)
{
unsigned char i,temp;
for (i=0;i<6;i++)
{temp=count%10;
//a%10=?
ledbuff=tabel[temp];
count=count/10;
//??
}
}
/******************************
MCU初始化
******************************/
void mcu_init(void)
{
DDRD=0x3f;
DDRB=0xff;
PORTD=0xff;
PORTB=0xff;//端口初始化
TIMSK =0x08;//使能T1捕捉中断
TCCR1A=0x00;
TCCR1B=0xC2;//CK/8,捕捉周期的单位为1us
ICR1=0;
TCNT1=0;
}
/************************************************
主程序:测量ICP引脚上信号的周期
************************************************/
void main()
{
mcu_init();
SREG|=0x80;
//使能全局中断
for(;
{
if ((newcount&0xfff8)!=(oldcount&0xfff8))
{
oldcount=newcount;
} //if语句的作用是什么?并没有对newcount和oldcount进行付值?
hextobcd(oldcount);
display();
//显示测量值
}
}
/**************************************
捕捉中断处理程序
**************************************/
void Icp_timer1(void)
{
newcount=ICR1;
ICR1=0;
TCNT1=0;
TCCR1B=0xC2;
}
请问主程序中if语句的作用是什么?
为什么没有对newcount和oldcount进行付值?
主程序是怎样进入中断的?
#include <io8515.h>
#pragma interrupt_handler Icp_timer1:4 // 设置ICP中断
/* 七段译码字形表 */
const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/* 显示缓冲区 */
unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
unsigned int oldcount;
unsigned int newcount;
/******************************
1ms延时程序
******************************/
void delay_1ms(void)
{
unsigned int i;
for(i=1;i<1142;i++)
;
}
/******************************
六路动态扫描显示电路
******************************/
void display(void)
{
unsigned char i;
for (i=0;i<6;i++)
{
PORTB=ledbuff;
//将显示缓冲区数据送PORTB口
PORTD=~(1<<i);
//开始显示
delay_1ms();
//每一位显示保持一定时间
PORTD|=(1<<i);
//关闭显示
}
}
/************************************
将count十六进制数据转换为LED七段码
************************************/
void hextobcd(unsigned int count)
{
unsigned char i,temp;
for (i=0;i<6;i++)
{temp=count%10;
//a%10=?
ledbuff=tabel[temp];
count=count/10;
//??
}
}
/******************************
MCU初始化
******************************/
void mcu_init(void)
{
DDRD=0x3f;
DDRB=0xff;
PORTD=0xff;
PORTB=0xff;//端口初始化
TIMSK =0x08;//使能T1捕捉中断
TCCR1A=0x00;
TCCR1B=0xC2;//CK/8,捕捉周期的单位为1us
ICR1=0;
TCNT1=0;
}
/************************************************
主程序:测量ICP引脚上信号的周期
************************************************/
void main()
{
mcu_init();
SREG|=0x80;
//使能全局中断
for(;
{
if ((newcount&0xfff8)!=(oldcount&0xfff8))
{
oldcount=newcount;
} //if语句的作用是什么?并没有对newcount和oldcount进行付值?
hextobcd(oldcount);
display();
//显示测量值
}
}
/**************************************
捕捉中断处理程序
**************************************/
void Icp_timer1(void)
{
newcount=ICR1;
ICR1=0;
TCNT1=0;
TCCR1B=0xC2;
}
请问主程序中if语句的作用是什么?
为什么没有对newcount和oldcount进行付值?
主程序是怎样进入中断的?