说来惭愧,大学三年来第一次靠自己完成的实验,刚开始做实验也没动脑,直接开始搜索,不过只搜到了汇编版,没办法只能自己试着做一下了,结果没想到自己做了出来。
正好也写一写,方便后人
注意:不保证对,但是通过实验足以
实验一 简单程序设计实验
1、置数程序
把2000H~20FFH的内容全部置成55H。
xdata unsigned char buffer[256] _at_ 0x2000;
void main(void)
{
unsigned char i;
for(i=0;i<256;i++)
{
buffer[i]=85;
}
}
运行结果:
2、拆字程序
把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
unsigned char x=0x34;
xdata unsigned char buffer[2] _at_ 0x2000;
void main(void)
{
unsigned char high=(x-x%0x10)/0x10;
unsigned char low=x%0x10;
buffer[0]=x;
buffer[1]=high;
buffer[2]=low;
}
运行结果:
3、内部、外部RAM数据传送程序
(1) 内部RAM之间数据传送;
将内部RAM 40H~4FH单元内容传送到内部RAM 60H~6FH单元中。
unsigned char a=0x00;
data unsigned char buffer[16] _at_ 0x40;
data unsigned char buffer1[16] _at_ 0x60;
void main(void)
{
unsigned char i;
for(i=0;i<16;i++)
{
buffer[i]=a;
buffer1[i]=buffer[i];
a++;
}
}
运行结果
(2) 内外RAM之间数据传送;
将内部RAM 40H~4FH单元内容传送到外部RAM 2040H~204FH单元中。
unsigned char a=0x00;
data unsigned char buffer[16] _at_ 0x40;
xdata unsigned char buffer1[16] _at_ 0x2040;
void main(void)
{
unsigned char i;
for(i=0;i<16;i++)
{
buffer[i]=a;
buffer1[i]=buffer[i];
a++;
}
}
运行结果:
(3) 外RAM之间数据传送;
将外部RAM 1000H~1011H单元内容传送到外部RAM 2000H~2011H单元中。
unsigned char a=0x00;
xdata unsigned char buffer[18] _at_ 0x1000;
xdata unsigned char buffer1[18] _at_ 0x2000;
void main(void)
{
unsigned char i;
for(i=0;i<18;i++)
{
buffer[i]=a;
buffer1[i]=buffer[i];
a++;
}
}
运行结果:
实验二 I/O口实验
P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
(1)左移点亮1只发光二极管;
(2)右移点亮1只发光二极管;
(3)左移点亮2只相邻发光二极管;
(4)右移点亮2只相邻发光二极管。
(1)代码
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{
uchar t;
while (i--)
{
for(t=0;t<120;t++);
}
}
void main()
{
P1=0xfe;
while (1)
{
delay( 500 );
P1=_cror_(P1,1);
}
}
(4)代码
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{
uchar t;
while (i--)
{
for(t=0;t<120;t++);
}
}
void main()
{
P1=0xfc;
while (1)
{
delay( 500 );
P1=_crol_(P1,2);
}
}
其余两问修改对应位置的代码即可
Proteus如图连接
运行效果
单片机刷写
软件如图,下载:链接: https://pan.baidu.com/s/1A7LneFUHcOyQMqU5uTaEnQ 提取码: 2ey6
插上板子后如果电脑没识别出端口就把文件中的驱动装一装
识别没问题的话,选好对应单片机型号,【打开程序文件】中选择编译好的hex文件,刷入即可。
如果刷写卡住不动,可以开启/关闭板子上的电源试试
效果
另外根据板子的不同,需要修改代码,我的这块板子需要把P1修改为P2,LED才能正常亮灭。
实验三 定时器实验
编写程序,使定时器按一定间隔(500 ms~1s)对内部RAM某单元的内容加1,然后用8只发光二极管显示RAM单元中的二进制数值。
#include<reg51.h>
char i=100;
unsigned char b=0xff;
void main()
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
while(1);
{
;
}
}
void timer0() interrupt 1
{
TH0=0xee;
TL0=0x00;
i--;
if(i<=0)
{
P1=b;
b--;
i=100;
}
}
proteus连接同上,运行:
单片机刷写运行