1-1.要求把内部RAM 10H中的一个十六进制(如0A7H),转换为ASCII码,并存放入外部RAM10H和11H中,要求高位放入外部10H中,低位放入外部11H中,编程实现之.
#include <reg51.h>
#include <absacc.h>
int change(int t){
if(t<=9){t+=0x30;}
else{t=t-10+'A';}
return t;}
void main(){
int a=0x9B,i;
DBYTE[0x10]=a;
i=a>>4;
XBYTE[0x10]=change(i);
i=(a&0x0f);
XBYTE[0x11]=change(i);}
2-1.实现一个把外部RAM10H中的一个数(如0A9H),要求其第3位和第7位求反,而其余位不变,结果送入内部RAM30H中,编程实现之。
#include<reg51.h>
#include<absacc.h>
c++判断素数void main(){
char A,R;
A=XBYTE[0x10];
R=0x44;
DBYTE[0x30]=A^R;
while(1);
}
2-2. 已知在内部RAM10H、11H中分别存放有两个压缩的BCD码,其值分别为01H、87H,现要求把其转换为16进制数,其结果存放于内部RAM30H中,编程实现之。
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a,b;
DBYTE[0x10]=0x01;
DBYTE[0x11]=0x87;
a=DBYTE[0X10];
b=((a&0xf0)>>4)*1000+(a&0x0f)*100;
a=DBYTE[0X11];
b=b+((a&0xf0)>>4)*10+(a&0x0f);
DBYTE[0X30]=b;
while(1);
}
3-1.要求把内部RAM 10H和11H中的二个十六进制(如0A7H,98H)求和,若和为奇数则把外部10H置为全1,否则置为01H,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a,b,c;
a=DBYTE[0X10];
b=DBYTE[0X11];
c=a+b;
if(c%2==0)
XBYTE[0X10]=0X01;
else
XBYTE[0X10]=0XFF;
while(1);
}
3-2.对内部RAM 30H中的一个数进行判断,若该数的值在AA~FFH区间,则把外部RAM 10H置为全1, 若该数的值在A9~9FH区间,则把外部RAM 11H置为全1, 若该数的值在9E~30H区间,则把外部RAM 12H置为全1, 若该数的值在2F~00H区间,则把外部RAM 13H置为全1,否则置为全0, 编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a;
a=DBYTE[0X30];
if(0XAA<=a&&a<=0XFF){XBYTE[0X10]=0XFF;}
else if(0X9F<=a&&a<=0XA9){XBYTE[0X11]=0XFF;}
else if(0X30<=a&&a<=0X9E){XBYTE[0X12]=0XFF;}
else if(0X00<=a&&a<=0X2F){XBYTE[0X13]=0XFF;}
else{XBYTE[0X13]=0X00;}
while(1);
}
4-1.在内部RAM 08H中有一个十六进制数,若该数为素数,则把内部RAM 09H单元置为全1,否则置为0AH,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a,i;
a=DBYTE[0X08];
for(i=0x02;i<=a/2;i++)
if(a%i!=0)
DBYTE[0X09]=0XFF;
else
DBYTE[0X09]=0X0A;
while(1);
}
4-2.在内部RAM 08H和09H单元分别有二个十六进制数,编一个程序,求这两个数中的最小公倍数,并把该存放于内部RAM 0AH单元中,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned int data a,b,i;
DBYTE[0X08]=0x12;
DBYTE[0X09]=0x18;
a=DBYTE[0X08];
b=DBYTE[0X09];
for(i=0;;i++){
b+=b;
if(b%a==0) break;
}
DBYTE[0x0A]=b;
while(1){}
}
4-3.已知,在内部RAM 08H开始的10内存单元分别存放十六进制数,现要求编一个程序,把该数据区中的内容,按逆序方式存放,如开始存放次序为A[0],A[1],…A[9],则执行后的结果为A[9],A[8],….A[0], ,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a[10],i,j,t;
j=0x08;
for(i=0;i<=9;i++)
{a[i]=DBYTE[j+i];}
for(i=0;i<=4;i++)
{t=a[i];a[i]=a[9-i];a[9-i]=t;}
for(i=0;i<=9;i++)
{DBYTE[j+i]=a[i];}
while(1);
}
5-1.编写一个函数,要求从外部RAM 从08H开始的存贮单元中存放有100个一个十六进制数,求其平均值,并把访存放于内部RAM 10H中,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned int xdata a[10]={0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x02},i,d;
d=0;
for(i=0;i<10;i++)
{XBYTE[0x08+i]=a[i];
d=d+XBYTE[0x08+i];
}
DBYTE[0x10]=d/i;
while(1);
}
5-2. 编写一个函数,要求从外部RAM 08H地址单元开始,连续存放有200个数,将各数取出处理,若为负数,则求其补码,若为政数则不处理,编程实现之.
#include<reg51.h>
#include<absacc.h>
void buma(){
unsigned int i,a[3];
for(i=0;i<=3;i++){
a[i]=XBYTE[0x08+i];
if(a[i]>128)
a[i]=(a[i]^127)+1;
XBYTE[0x08+i]=a[i];
}
}
void main(){
buma();
while(1){}
}
5- 3.编写一个函数,实现一个BCD码加法.已知,在内部RAM 08H和09H开始的个内存单元分别存放有压缩BCD码,现要求实现其BCD码的加法,结果存放于内部RAM 0AH,0BH中,高位存放于0BH中,编程实现之.
#include<reg51.h>
#include<absacc.h>
void main(){
unsigned char a,b,c;
DBYTE[0X08]=a;
DBYTE[0X09]=b;
c=((a&0xf0)>>4)*10+(a&0x0f)+((b&0xf0)>>4)*10+(b&0x0f);
if(c>100)
{
DBYTE[0X0A]=c-100;
//DBYTE[0X0B]=(c>>8);
DBYTE[0X0B]=0X01;
}
else
DBYTE[0X0A]=c;
while(1);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论