求一小段程序中关于中断的解释(100分)

  • 主题发起人 主题发起人 suibian424
  • 开始时间 开始时间
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进行付值?
主程序是怎样进入中断的?
 
if的作用是判断 newcount和oldcount的值是否一样(除以$10以后的结果),确定你是否需要更改这个显示值
没付初值的话就是0
主程序是如何进入循环的你就不用考虑那么多了,你的MCU初始化里已经写过了,这些东西偏硬,你不用管那么多,(有时你还会发现一个int值代码里没有给他赋值但是它的值还能随意改变的情况呢),想知道具体的可以找一写硬件设计人员问问,懂单片机都知道这些
 
谢谢
能不能具体给我讲一下中断的执行过程
 

Similar threads

后退
顶部