如果是访问flash之类的可擦写ROM可以当成是外部RAM使用,一般通过absacc.h
里的XBYTE[addr] 来定义外部地址的。
PS:如果是常量需要保存到ROM的指定地址,查看项目文件下的*.m51文件,里面有程序段及常数段的地址分配,修改code memory 下的BASE(起始地址、基地址)和LENGTH(长度、字节数)值,可以指定程序段或常量的ROM地址。
你程序里有每个问题,第一P3口的初始化应该设定为0XFF,因为你是要读引脚的信号。第二,你的P2^3引脚置零后蜂鸣器就响,你又没置1,所以你的蜂鸣器会一直响。我临时写了个小程序,也没运行,但应该没问题,希望读你有帮助。注意:中断时间间隔最好是大于延时时间。
#include<reg52.h>
sbit Beep=P2^3
bit Beep_flg
void delay(void)//延时
{
unsigned char i,j
for(i=3i>0i--)
for(i=100i>0i--)
}
void main()
{
P3=0xff//P3口初始化
EA=1//全局中断开
EX0=1//外部中断0开
IT0=1//边沿触发
while(1)
{
if(Beep_flg) //是否中断
{
Beep=0 //打开蜂鸣器
delay() // 延时
Beep_flg=0
}
Beep=1 //关蜂鸣器
}
}
void it0(void) interrupt 0 using 1
{
Beep_flg=1
}
#include <reg52.h>#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit Waveout1=P1^0
sbit CF=P3^2//调节频率
int num,a,f
int Timer0_H,Timer0_L
void Init()
{
num=0
a=1000
f=2
Waveout1=0
TMOD=0x02
TH0=(uint)(256-(1000/(2*f)))
TL0=(uint)(256-(1000/(2*f)))
ET0=1
EA=1
TR0=1
}
void main()
{
Init()
while(1)
{
if(CF==0)
{
f++
TH0=(int)(256-(1000/(2*f)))
TL0=(int)(256-(1000/(2*f)))
while(CF==0)
}
if(num==a)
{
num=0
Waveout1=~Waveout1
}
}
}
void Timer0()interrupt 1
{
num++
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)