
方法类似,补写程序如下:
#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
led=p0^0;
sbit
led1=p0^1;
void
delay1ms
(uint
z)
{
uint
x,y;
for
(x=z;x>0;x--)
for
(y=110;y>0;y--);
}
void
exter()
interrupt
2
{
delay1ms(600);
led=0;
delay1ms(200);
led=1;
}
void
exter0()
interrupt
0
{
delay1ms(600);
led1=1;
delay1ms(200);
led1=0;
}
main()
{
ea=1;
//开总中断
ex1=1;
//开外部中断1
ex0=1;
//开外部中断0
it1=0;
//外部中断边沿触发,下降沿触发
it0=0;
//外部中断0边沿触发,下降沿触发
}
是一边读指令一边执行。
建议偿试:
一、在EEPROM端用示波器查一下PSEN和ALE的时序。
二、在EEPROM内写入75 90 ff 22,如果上电后P1口全是高电平,则正常。
三、在EEPROM内写入75 90 00 22,如果上电后P1口全是低电平,则正常。
四、如果通过了第二、三步的测式,还是不能运行的话,在代码里查找对P0、P2口的 *** 作,把这些 *** 作都停掉。使用外部程序存储器时,最好不要再用P0、P2口做GPIO。
五、第四步这后还没有效果的话,估计硬件还是有问题。
拓展外部存储器,通常都会选择相同容量的芯片,因为这样构建译码电路会比较简单。如果因一些特殊需要,必须使不同容量的器件,那要看扩展的存储空间是否要求连接的地址。若必须是连接地址,地址译码电路比较复杂,适合采用CPLD或FPGA等可编程器件来实现。如果每片扩展存储器之间,并不要求连续地址,也可考虑按最大容量器件的地址范围来设计译码。
对单片机外部程序存储器的访问 就是先通过p0、p2口送出要访问的外部程序存储器的地址
P2口送高8位地址 P0口送低8位地址(而不是P1口) 即先要选中单片机要访问的存储器单元
再将该单元中存放的指令读出来,由P0口做8位数据总线(读回单片机去执行)。
结论: 地址是被访问的单片机外部程序存储器的地址
最后要完成的工作是取指令
呵呵 满意就选满意回答
以上就是关于求51单片机外部中断的C语言程序全部的内容,包括:求51单片机外部中断的C语言程序、单片机执行外部EEPROM程序、为单片机拓展外部程序存储器时,多片ROM芯片的容量不同如何拓展等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)