单片机原理及其应用基础实验(C语言版)

说来惭愧,大学三年来第一次靠自己完成的实验,刚开始做实验也没动脑,直接开始搜索,不过只搜到了汇编版,没办法只能自己试着做一下了,结果没想到自己做了出来。

正好也写一写,方便后人

注意:不保证对,但是通过实验足以

实验一 简单程序设计实验

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连接同上,运行:

单片机刷写运行

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇