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小时内删除。