airwill 发表于 2014-12-23 21:19 
通常, 不设定, 默认是内部振荡器, 所以没有晶体也可以工作, 但内部振荡器的频率精度差一点. ...
斑竹,麻烦再帮我看个问题,我在练习中断,死活都进不去,搞三天了,救救我吧,代码如下,能帮我看下到底哪里有问题吗?万分感谢
//#include <eeprom.h>
#include <iom8v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar p=40;
#pragma data:code
#pragma interrupt_handler miao:iv_TIMER1_OVF
uchar u,m;
flash table[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};
void delay(uint ms)
{
uint k,j;
for(k=0;k<ms;k++)
{
for(j=0;j<11;j++);
}
}
uchar key_scan()
{
uchar key;
delay(5);
if(key_press())
{
key=PINC;
key&=0x0f;
switch(key)
{
case 0X0e:
key=3;
break;
case 0x0d:
key=4;
u=~u;
break;
case 0x0b:
key=2;
break;
case 0x07:
key=1;
break;
default:
key=5;
}
while(key_press());
delay(10);
}
else
{
key=5;
}
return key;
}
uchar key_press()
{
uchar i;
DDRC|=0X0F;
PORTC|=0X0F;
DDRC&=0XF0;
i=PINC;
i&=0X0F;
if(i==0X0F)
return 0;
else
return 1;
}
void show(uchar j)
{
PORTC&=~BIT(4);
PORTD=table[j/10];//蔳e 位
PORTC|=BIT(4);
delay(100);
PORTC&=~BIT(5);
PORTD=table[j%10];//shi位
PORTC|=BIT(5);
delay(100);
}
void miao()
{
// if(p==60)
// {
p=0;
// }
p++;
PORTD=0X7e;
delay(100);
TCNT1H=0X40;
TCNT1L=0Xe0;
}
//void show(uint h)
//{
// PORTD=0xff;
// PORTC&=0xe0;
// PORTD=table[h];
// delay(1);
// PORTC|=0x10;
// PORTC&=0xd0;
// PORTD=table[h];
// delay(1);
// PORTC|=0x20;
//}
void main()
{
CLI();
DDRD=0Xff;
PORTD=0x8e;
DDRC=0xf0;
PORTC=0xff;
u=0xff;
TCCR1B=0X40;
TCNT1H=0X85;
TCNT1L=0XED;
TIMSK=0x04;
SREG=0x80;
SEI();
while(1)
{;
//key_press();
//key_scan();
// if(u==0)
// {
// show(p);
// delay(5);
// }
// else
// {
// PORTD=0X8e;
// }
}
}
|