单片机部分程序--单片机的C语言应用程序设计.doc
················老师给的程序··················
第一章
1-32
ORG0000H
LJMPSTART
ORG0100H
START:MOVR2,#00H
MOVR1,#20H
LOOP:MOVA,@R1
JZZERO
INCR1
CJNER1,#51H,OVER
JMPLOOP
ZERO:INCR2
MOV51H,R2
JMPLOOP
OVER:SJMP$
END
1-34
ORG0000H
LJMPSTART
ORG0100H
START:MOVDPTR,#1FFFH
LOOP:INCDPTR
MOVXA,@DPTR
PUSHDPH
PUSHACC
MOVA,DPH
ADDA,#10H
MOVDPH,A
POPACC
MOVX@DPTR,A
POPDPH
MOVA,DPH
CJNEA,#21H,LOOP
END
AD转换
ADC0809
#includeabsacc.h//绝对地址访问头文件
#includereg51.h
#defineIN0XBYTE[0x7FF8]//通道0的地址
sbitad_busy=P3^3;//AD转换结束标志
voidad0809(unsignedchar*x);//AD转换函数,变量x为AD转换结果的指针
unsignedcharADC0809(unsignedintnADAddrBase,unsignedcharchChannel);
main()
{
unsignedintdatai;
staticunsignedchardataad[8];
//ad0809(ad);
for(i=0;i8;i++)
{
ad[i]=ADC0809(0x7FF8,i);
}
}
voidad0809(unsignedchar*x)
{
unsignedchari,j;
// unsignedcharadstate;
unsignedcharxdata*ad_adr;//指向外部存储空间的指针
ad_adr=IN0;//获得AD转换通道0的地址
for(i=0;i8;i++)
{
*ad_adr=0;//启动AD转换
for(j=0;j2;j++);//延时,EOC在AD转换启动后10us行变成低电平
//while((adstate=P30x08)==0x00);//等待AD转换结束
while(ad_busy==0);//等待AD转换结束,AD转换结束后EOC变高电平
*x=*ad_adr;
ad_adr++;
x++;
}
}
//返回值为无符号字符型,变量分别为AD转换器的基地址,AD转换器的模拟通道
unsignedcharADC0809(unsignedintnADAddrBase,unsignedcharchChannel)
{
unsignedchari,chADResult;
unsignedcharxdata*pADChannel;
pADChannel=nADAddrBase+chChannel;
*pADChannel=chChannel;//启动AD转换
for(i=0;i2;i++);//延时,EOC在AD转换启动后10us行变成低电平
while(ad_busy==0);//等待AD转换结束
chADResul