中南大学单片机实验报告Word文档格式.docx
- 文档编号:21442197
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:31
- 大小:223.80KB
中南大学单片机实验报告Word文档格式.docx
《中南大学单片机实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《中南大学单片机实验报告Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。
从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。
在发展MCU方面,最著名的厂家当数Philips公司。
Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。
因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
3.单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;
因此,专用单片机的发展自然形成了SoC化趋势。
随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
MCS51系列微控制器应用广泛,在家电、汽车甚至航空等领域都有其活跃的身影。
然而,普通51系列微控制器内部资源有限,像我用Proteus构建微控制器虚拟实验室选用的AT89C52只有三个定时器、一个全双工的串行口和中断控制,并且其数据处理能力有限,不适合对大量数据进行复杂分析和运算。
因此,在不重新选型(可选用SoC)的前提下,为实现我们所需要的功能,就需要进行外围扩展。
针对微控制器的特点,我们首先考虑串行扩展,因为微控制器的I/O引脚有限,并行扩展一则外围芯片面积比较大,二则对抑制EMI不利。
第二章实验要求
1、学习KeilC51集成开发工具的操作及调试程序的方法,包括:
仿真调试与脱机运行间的切换方法;
2、熟悉TD-51单片机系统板及实验系统的结构及使用;
3、进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;
4、学习并掌握KeilC51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;
5、完成指定MCS51单片机综合设计题
下面主要分为软件和硬件部分来介绍
软件部分:
清零程序与拆字程序设计
拼字程序与数据传送程序设计
排序程序与散转程序设计
硬件部分:
静态存储器扩展实验
要求:
阅读、验证C语言程序功能。
使用汇编语言编程,完成实验指导书之“4.2FLASH存储器扩展实验”实验项目(P60)。
数字量输入输出实验
LED灯控制(使用8255接口芯片)
使用汇编语言编程,功能为:
通过KK1实现LED灯工作方式即时控
制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。
定时器/计数器实验
由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接八个发光二极管。
编写程序模拟时序控制装置。
开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。
A/D、D/A转换实验
Proteus环境下完成小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
串行通讯实验
Proteus环境下完成利用单片机实验系统,实现与PC机通讯。
功能要求:
将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。
第三章软件设计
1.清零程序
因为清零看不出效果,故改为全部写为01,从7000-8000H空间。
程序如下:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVDPTR,#7000H;
片内RAM首地址
MOVA,#01H;
写入数据初值
MOVR6,#20H;
循环变量
LOOP2:
MOVR7,#80H
LOOP1:
MOVX@DPTR,A;
写数据到RAM
INCDPTR;
地址加1
DJNZR7,LOOP1
DJNZR6,LOOP2
SJMP$
END
结果如下:
单步运行下,第一步为:
最后一步为:
8000h为0
2.拆字程序
流程图为
ORG0000H
LJMPMAIN
ORG0100H
MOVDPTR,#7000H;
MOVA,#12H;
MOVX@DPTR,A;
RRA;
ANLA,#0FH;
高位送7001H低位
MOVDPTR,#7001H;
MOVX@DPTR,A;
MOVDPTR,#7000H;
MOVXA,@DPTR;
低位送7002H低位
MOVDPTR,#7002H;
SJMP$;
设置断点,观察实验结果中的内容
3.拼字程序
流程图如下:
MOVA,#01H;
ANLA,#0FH;
屏蔽高位
SWAPA;
MOVB,A;
MOVDPTR,#7001H;
送7001H
MOVA,#0AH;
ORLA,B;
拼送后送7002H
SJMP$;
END
4.数据传送程序设计
把(R2,R3)源RAM中首地址内的(R6,R7)个字节数据传送到(R4,R5)目的RAM中。
流程图如下
程序:
MOVR2,#70H;
MOVR3,#00H;
源地址
MOVR4,#71H;
MOVR5,#00H;
目的地址
MOVR6,#00H;
MOVR7,#07H;
传送个数
MOVR1,#10H;
MOVR0,#07H;
MOVDPH,R2;
MOVDPL,R3;
MOVA,R1;
L0:
INCDPTR;
DJNZR0,L0;
赋值
L2:
MOVR7,#0FFH;
L1:
MOVXA,@DPTR;
MOVR2,DPH;
MOVR3,DPL;
MOVDPH,R4;
MOVDPL,R5;
MOVR4,DPH;
MOVR5,DPL;
DJNZR7,L1;
DJNZR6,L2;
SJMP$
把7000h中的8个数据发给7100h中:
5.排序程序
ESELSORT:
MOV
R7,N
DEC
R7
ESST1
:
A,R7
MOV
R6,A
DPL,ADDPL
R1,DPL
DPH,ADDPH
R0,DPH
MOVX
A,@DPTR
B,A
ESST2
INC
DPTR
CLR
C
SUBB
A,B
JC
ESST3
R0,DPL
R1,DPH
ESST3
DJNZ
R6,ESST2
XCH
@DPTR,A
DPL,R0
DPH,R1
DJNZ
R7,ESST1
RET
6.散转程序
MOVR0,#02
MOVA,R0
RLA
ADDA,R0
MOVDPTR,#TA
JMP@A+DPTR
TA:
LJMPPM0
LJMPPM1
LJMPPM2
LJMPPM3
PM0:
MOVR1,#01H
PM1:
MOVR2,#02H
PM2:
MOVR3,#03H
PM3:
MOVR4,#04H
OVER:
SJMP$
当修改A=02h时跳转到pwm2即使R1=03
当修改A=00时即使R1=01,结果如下:
第四章硬件设计
硬件部分我主要做了三个实验,前两个是用c完成的,后一个是同学指导用汇编完成的,个人觉得用c来做程序还是比会变简单明了很多,而且原理也是一样的。
1.数字量输入输出实验
任务:
通过KK1实现LED灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、右循环、间隔闪烁功能。
(要求一定要用到8255)
1)硬件构造如下:
因为要加入8255,所以在硬件与程序中还是遇到了一些小麻烦的,在protus7.0中的8255是有问题的,后来转为7.5才好,可是在实际中又运行不了,只能仿真。
2)程序如下:
#include<
reg51.h>
unsignedcharcount;
sbitA0=P2^0;
sbitA1=P2^1;
sbitWR_8255=P2^3;
sbitCS=P2^4;
sbitRESET_8255=P2^2;
voidSendData(unsignedchardat);
voiddelay(void)
{
unsignedchara,b,c;
for(c=19;
c>
0;
c--)
for(b=20;
b>
b--)
for(a=130;
a>
a--);
}
voidmain()
{
unsignedchari,value;
IT0=1;
//设置外部中断0下降沿触发
EX0=1;
//允许外部中断0
EA=1;
//开总中断
RESET_8255=1;
//上电复位8255
for(i=0;
i<
10;
i++);
RESET_8255=0;
WR_8255=0;
//设置8255A口输出工作方式
A0=1;
A1=1;
P0=0x80;
CS=0;
WR_8255=1;
CS=1;
while
(1)
{
if(count==0)
{
value=0x01;
for(i=0;
8;
i++)//左移
{
SendData(value);
delay();
SendData(0x00);
value=value<
<
1;
}
}
if(count==1)
value=0x80;
i++)//右移
value=value>
>
if(count==2)
SendData(0xFF);
//闪烁
delay();
SendData(0x00);
}
}
}
//外部中断0中断服务程序,用于选择LED的方式
voidextra()interrupt0
count=(count+1)%3;
//向8255的A口写一个数据
voidSendData(unsignedchardat)
unsignedchari;
A0=0;
A1=0;
P0=dat;
2.定时器/计数器实验
定时器控制LED灯
unsignedcharvalue,i;
TMOD=0x01;
TH0=0x4C;
TL0=0x00;
ET0=1;
PT0=1;
TR0=1;
{if(count==20)
P1=05H;
if(count==40)
P1=0AH;
if(count==60)
P1=50H;
if(count==80)
P1=0A0H;
if(count==100)
P1=55H;
if(count==120)
P1=0AAH;
if(count==140)
P1=0FFH;
if(count==160)
P1=00H;
count=0;
}
voidTimer0()interrupt1
TR0=0;
count++;
3.A/D、D/A转换实验
PRO_DAEQU7FFFH
PRO_ADEQU0BFFFH
ORG0000H
SJMPMAIN
ORG001BH
LJMPKEYSCAN
ORG0030H
SETBEA
SETBEX1
SETBIT1
MOVP1,#0FH
MOVR5,#0FFH
TEST:
MOVR5,#03H
CJNER5,#01H,L1
LCALLSQUARE
AJMPTEST
CJNER5,#02H,L2
LCALLTRIANGLE
CJNER5,#03H,L3
LCALLSAWTOOTH
L3:
;
键盘扫描中断
KEYSCAN:
ACALLT12MS
;
MOVR6,A
ACALLSCAN
JNZKEY1
SJMPEXIT
KEY1:
MOVR2,A
MOVR3,#07FH
MOVR4,#03H
MOVP1,R3
MOVA,P1
CPLA
ANLA,#0FH
JNZKEY2
MOVA,R3
RRA
MOVR3,A
DJNZR4,LOOP1
SJMPEXIT
KEY2:
DECR4
CJNER2,#01H,LOOP3
MOVA,#01H
SJMPLOOP6
LOOP3:
CJNER2,#02H,LOOP4
MOVA,#04H
SJMPLOOP6
LOOP4:
CJNER2,#04H,LOOP5
MOVA,#07H
SJMPLOOP6
LOOP5:
CJNER2,#08H,LOOP6
MOVA,#0AH
LOOP6:
ADDA,R4
MOVR5,A
MOVP1,#0FH
;
MOVA,R6
EXIT:
RETI
;
延时后再次扫描有无按键按下
SCAN:
MOVP1,#0FH
MOVA,P1
CPLA
ANLA,#0FH
T12MS:
MOVR7,#15H;
12MS
TM:
MOVR6,#0FFH
DJNZR6,$
DJNZR7,TM
D/A产生方波
SQUARE:
MOVDPTR,#PRO_DA
MOVA,#0FFH
MOVX@DPTR,A
MOVDPTR,#0BFFFH
MOVX@DPTR,A
ACALLDELAY
MOVA,#00H
DELAY:
MOVR0,#27H
DEL1:
MOVR1,#0FFH
DJNZR1,$
DJNZR0,DEL1
D/A产生三角波时钟500KHz幅值1mv扫描周期20ms
TRIANGLE:
MOVA,#00H
TLOOP:
MOVDPTR,#PRO_DA
MOVDPTR,#PRO_AD
CJNEA,#0FFH,TLOOP2
COUNT1:
DECA
CJNEA,#00H,COUNT1
SJMPEXIT1
TLOOP2:
INCA
AJMPTLOOP
EXIT1:
RET
D/A产生锯齿波
SAWTOOTH:
SLOOP:
INCA
CJNEA,#00H,SLOOP
4.静态存储器扩展实验
1)程序如下:
ORG0030H
MOV8EH,02H
MOVP1,#0FFH
CLRA
MOVP1,A
MOVR7,#10H
MOVR0,#30H
MOVA,#00H
LOOP0:
MOV@R0,A
INCR0
INCA
DJNZR7,LOOP0
MOVR7,#10H
MOVR1,#40H
MOVDPTR,#0000H
MOVA,@R0
MOVX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 单片机 实验 报告