1.用C51实现片内RAM的30H和31H地址单元中的数据相加,保存到32H单元中。
#include <absacc.h>
#define a DBYTE[0x30]
#define b DBYTE[0x31]
#define c DBYTE[0x32]
void main( )
{
c=a+b;
}
2.用C51语言实现给片内RAM的30H地址单元赋值为CDH(内存赋值)。
#include <absacc.h>
#define a DBYTE[0x30]
void main( )
{
a=0xCD;
}
3.编写程序,将单片机片外2000H为首地址的连续10个单元的内容,读入到片内RAM的40H~49H单元中。
#include <absacc.h>.
void main( )
{
unsigned char i;
for(i=0;1<10;i++)
{
XBYTE[0x2000+i]=i;
DBYTE[0x40+i]=XBYTE[0x2000+i];
}
}
4.有符号数比较大小
假设在片内RAM的30H单元中,储存的有符号数据是m,在片内RAM的30H中存储的有符号数是n,比较这两个数的大小,并将较大的数保存在片内RAM的30H单元中,较小的数保存在片内RAM的31H单元中。
#incliude <absacc.h>
#define m DBYTE[0x30]
#define n DBYTE[0x31]
#define a DBYTE[0x32]
void main( )
{
m=-6;n=-5;
if(m<n)
{
a=m;m=n;n=a;
}
5.比较大小
将片内RAM的30H~39H单元中的数据分别赋值成0~9,然后对其进行比较,将最大值存入片内3AH的单元中。
#include <absacc.h>
void main( )
{
unsigned char i;
for(i=0;i<10;i++)
DBYTE[0x30+i]=i;
DBYTE[0x3a]= DBYTE[0x30];
for(i=0;i<10;i++)
if(DBYTE[0x3a]<DBYTE[0x30+i])
DBYTE[0x3a]=DBYTE[0x30+i];
}
6.ASCII码16进制数
若一个十六进制数的ASCII码,存于片内RAM的30H单元,请把该ASCII码对应十六进制数,存于片内RAM的31H单元中。
#include <absacc.h>
#define X DBYTE[0x30]
#define Y DBYTE[0x31]
void main( )
{
while(1)
{
if(x<=0x39)
{Y=X-0x30;}
else
{Y=X-0x37;}
}
}
7.P1输出口,外接8只发光二极管,设计电路图并用C51语言编程,循环点亮
#include <reg51.h>
void main()
{
unsigned char I,LED;
while(1)
{
LED=0xfe;
for(i=0;i<8;i++)
{P1=LED;
LED<<=1;
delay( );}
}
}
void delay( )
{
unsigned int j;
for(j=0;j<12500;j++);
}
低到高点亮
#include <reg51.h>
void main()
{
unsigned char I,LED;
while(1)
{
LED=0x7f;
for(i=0;i<8;i++)
{P1=LED;
LED>>=1;
LED=LED+0x80;
delay( );}
}
}
void delay( )
单片机编程100例详解{
unsigned int j;
for(j=0;j<12500;j++);
}
8.开关检测
#include <reg51.h>
void main()
{
char state;
do
{
P1=0xff;
state=P1;
state= state&0x03;
switch(state)
{
case 0:P2=0x01;break;
case 1:P2=0x02;break;
case 2:P2=0x04;break;
case 3:P2=0x08;break;
}
}while(1);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论