说来惭愧,大学三年来第一次靠自己完成的实验,刚开始做实验也没动脑,直接开始搜索,不过只搜到了汇编版,没办法只能自己试着做一下了,结果没想到自己做了出来。
正好也写一写,方便后人
注意:不保证对,但是通过实验足以
实验一 简单程序设计实验
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连接同上,运行:
单片机刷写运行
评论