成都理工大学 《单片微机原理及应用》实验报告.docx
《成都理工大学 《单片微机原理及应用》实验报告.docx》由会员分享,可在线阅读,更多相关《成都理工大学 《单片微机原理及应用》实验报告.docx(19页珍藏版)》请在冰点文库上搜索。
成都理工大学《单片微机原理及应用》实验报告
成都理工大学
核技术与自动化工程学院
实
验
报
告
课程名称:
单片微机原理及应用实验
姓名:
何云鹏
学号:
201006020104
专业:
核工程与核技术
学期:
2012~2013
(2)
任课教师:
刘易
实验一数据传送及拆字
实验人员:
何云鹏指导老师:
刘易
实验地点:
6C701实验时间:
2013.03.04
实验内容:
片内外数据传送,以及拆字。
一、实验要求
(1)数据传输
1、掌握汇编语设计和调试方法,熟悉键盘操作。
2、熟悉使用keil软件。
3、将片外ROM空间数据传送到片内RAM。
4、再将片外RAM空间数据传送到片内RAM。
(2)拆字程序
将片外RAM空间2000H单元的数据拆开,并分别存放在片外2001H和2002H单元。
二、实验原理
(1)数据传输
片外ROM空间数据传送到片内RAM
1、先对外部ROM空间2000H到200FH单元置数,即对这个空间采用“DB”伪指令置数。
2、然后将ROM空间数据逐一传送到内部RAM空间的40H到4FH单元。
片外RAM空间数据传送到片内RAM
3、先对外部RAM空间2000H到200FH单元置数,即对这个空间采用“MOVX”指令置数。
4、然后将RAM空间数据逐一传送到内部RAM空间的40H到4FH单元。
(2)拆字程序
1、先对外部RAM空间2000H置数,即对这个空间采用“MOVX”指令置数;
2、然后将2000H单元数据高低4位分别放入片外RAM空间的2001H和2002H单元。
注意:
2000H高低4为需要置不同数
三、程序设计
(1)数据传输
片外ROM数据传送到片内RAM
org0000h
jmpmain
org0100h
main:
movr0,#00h;赋r0指向00
movr1,#40h
movdptr,#2000h;赋dptr指向2000
loop:
movca,@a+dptr
mov@r1,a
incdptr
incr0
incr1
mova,#00h
cjner0,#10h,loop;比较r0是否等于10,不等就跳向loop
sjmp$
org2000h
db12h,23h,34h,45h,56h,67h,78h,89h,9ah
db0abh,0bch,0cdh,0deh,0efh,0f1h,0e1h
end;自片外ROM2000h起置数
片外RAM数据传送到片内RAM
org0000H
jmpmain
org0100H
main:
movr0,#00H;赋r0指向00
movdptr,#2000H;赋dptr指向2000
loop:
movx@dptr,a
incdptr;dptr增一
incr0
inca
cjner0,#10H,loop;比较r0是否等于10,不等就跳向loop
movr0,#00H;赋r0指向00
movr1,#40H
movdptr,#2000H;赋dptr指向2000
lop:
movxa,@dptr
incdptr
incr0
mov@r1,a
incr1
cjner0,#10H,lop
sjmp$;停指针,短跳,这儿跳到这儿
end
(2)拆字程序
org0000h
ajmpmain
org0100h
main:
movdptr,#2000h
mova,#64h
movx@dptr,a
anla,#0f0h
swapa
incdptr
movx@dptr,a
movdptr,#2000h
movxa,@dptr
anla,#0fh
movdptr,#2002h
movx@dptr,a
sjmp$
end
四、现象及结果
(1)数据传输
片内RAM0h至4Fh依次置数:
12h,23h,34h,45h,56h,67h,78h,89h,9ah
0abh,0bch,0cdh,0deh,0efh,0f1h,0e1h
图1.1片外ROM数据传送到片内RAM实验结果
片内RAM0h至4Fh依次置数:
01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0ch,0dh,0eh,0fh
图1.2片外RAM数据传送到片内RAM实验结果
(2)拆字程序
片外RAM2000h单元置数0064h,其高四位60h存于2001h单元,低四位04h存于2002h单元。
图1.3拆字实验结果
实验二I/O控制
实验人员:
何云鹏指导老师:
刘易
实验地点:
6C701实验时间:
2013.03.18
实验内容:
外部中断的使用,以及Timer定时器的使用
一、实验要求
(1)外部中断的使用
1、使用外部中断0(INT0)或者使用外部中断1(INT1);
2、控制P1口流水灯。
(2)Timer定时器的使用
1、采用Timer定时器定时1秒钟;
2、控制P1口流水灯
二、实验原理
(1)外部中断的使用
MCS-51单片机有五个中断源,分别是INT0(入口地址0003H)、INT1(入口地址0013H)、TF0(入口地址000BH)、TF1(入口地址001BH)、串口中断(入口地址0023H),这5个中断源由TCON和SCON两个特殊功能寄存器进行控制
IE0和IE1:
外部中断的中断请求标志
IT0和IT1:
外部中断触发方式控制,为1时属边沿触发,为0时属电平触发
TI:
串行口的发送中断标志
RI:
串行口接受中断标志
MCS-51单片机对中断的开放和屏蔽是由IE控制实现的
EA:
中断总控制位,=1,CPU开放中断;=0,CPU禁止所有中断
ES:
串行口中断控制位,=1:
允许串行口中断,=0:
屏蔽串行
口中断
ET0和ET1:
定时器中断控制位,=1:
允许T0、T1中断,=0:
禁止T0、T1中断
EX0和EX1:
外部中断控制位,=1:
允许外部中断,=0:
不允许外部中断
CPU在每个机器周期的S5P2期间,会自动查询各个中断申请标志位,若查到某标志位被置位,将启动中断机制。
在CPU已经开放了外部中断允许的前提下:
在INT0/INT1引脚输入一个负脉冲或低电平,
TCON寄存器中的IE0/IE1标志位自动变“1”,
检测到IE0/IE1变“1”后,将产生指令:
LCALL0003H(/0013H)执行中断服务程序,并将IE0/IE1标志位自动清“0”,以备下次申请。
(2)Timer定时器的使用
1、定时/计数器1只能工作于工作方式2,但不能使用中断方式,此时定时/计数器1通常作为串行口的波特率发生器使用
2、初始化包括
确定工作方式,即对TMOD寄存器进行赋值
计算计数初值,并写入寄存器TH0、TL0或TH1、TL1中
根据要求,置位ET0或ET1
置位EA开总中断
置位TR0或TR1启动定时器工作
3、定时器T0由特殊功能寄存器TL0(低八位)和TH0(高八位)构成,定时器T1由特殊功能寄存器TL1(低八位)和TH1(高八位)构成.特殊功能寄存器TMOD控制定时/计数器的工作方式。
TCON则用于控制定时/计数器的启动和停止计数,同时管理T0和T1的溢出标志位.
4、定时/计数器的方式控制寄存器TMOD:
字节地址为89H,定时器控制寄存器TCON。
字节地址为88H
5、工作方式2具有自动重装载功能,在这种工作方式中,16位寄存器分作两部分,以TL为计数器,TH为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再像方式0和1那样需要人工干预,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL重新装载
程序运行时(等在亮和灭的过程中),由于程序运行比较快,我们按键时,键不平稳,一直在抖动,故可能导致每按一次键,有多个灯亮或者灭。
同时,如果灯亮的时间过短,我们人眼感觉不到,故程序中必须调用延时程序,即采用Timer定时器
三、程序设计
(1)外部中断的使用
#include
#include
voidmain()
{
//unsignedinti=0;
unsignedchartemp=0xfe;
P2=0x00;
TMOD=0x01;/*T0工作在定时器方式1*/
TH0=(15536/256);/*预置计数初值*/
TL0=(15536%256);
EA=1;/*CPU开中断*/
ET0=1;/*T0开中断*/
TR0=1;/*启动T0*/
do
{
if(P2==0x14)
{
P2=0x00;
P1=temp;
temp=_crol_(temp,1);
}
}while
(1);
}
voidtimer0(void)interrupt1using0
{
P2+=1;
TH0=(15536/256);
TL0=(15536%256);
}
(2)Timer定时器的使用
#include
inttemp=0x01;
unsignedcharscount;
voidtimer0_isr(void)interrupt1using0
{
TR0=0;
TH0=0x4c;
TL0=0x19;
TF0=0;
scount--;
if(!
scount)
{P1=temp;
temp<<=1;}
if(!
P1)
temp=0x01;
if(scount>0)
TR0=1;
//else
//TR0=0;
}
main(void)
{
TMOD=0x01;
TH0=0x4c;
TL0=0x19;//50ms
scount=20;//50ms*20=1s
EA=1;
ET0=1;
TR0=1;
while
(1)
{
if(!
scount)//T=1s
{
TH0=0x4c;
TL0=0x19;//reload
scount=20;//re-1s
TR0=1;
}
}
}
四、现象及结果
(1)外部中断的使用
注:
下图为程序运行过程中的一个状态,由仿真软件模拟得到。
LED灯从上至下依次点亮后熄灭,然后重复。
图2.1外部中断实验结果
(2)Timer定时器的使用
LED灯从上至下依次熄灭后点亮,然后重复。
图2.2Timer定时器实验结果
实验三串口通讯
实验人员:
何云鹏指导老师:
刘易
实验地点:
6C701实验时间:
2013.03.25
实验内容:
单片机与PC机通讯方法
一、实验要求
1、深刻理解芯片作用,学会使用单片机的串行口,了解单片机之间的串行通讯。
2、PC机发送任意个字符,由单片机接收后马上上传(单片机发送)至PC机。
二、实验原理
1、单片机可以通过内部串行口寄存器实现与PC机间的数据传输(包括接受和发送)。
数据的接受控制为是REN,其为1时才允许接收数据,使用串行口通信时需要对其进行初始化,设置产生波特率的TI定时器,例如,T1的工作方式为2,波特率为2400bps,晶振频率为11.0592MHZ,通过查串行口常用波特率得TMOD为20H,TH1为0F4H,TL1为0F4H。
并对TR1置1。
SCON为50H,对EA,ES,置1,以便于串行口中断。
2、SBUF为串行口的收发缓冲器,为一个专用寄存器,其中包含了接受寄存器和发送寄存器,可以实现全双工通信,这两个寄存器具有同一个地址(99H)。
MCS-51单片机的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据,而从接受缓冲期读出数据即可接受数据。
3、串行口通信控制寄存器:
SCON控制寄存器是一个可位寻址的专用寄存器,用于串行数据的通信控制,单元地址98H。
其结构中
SM0SM1串行口工作方式选择位SM2:
多机通信控制位
REN:
允许接收位,=1:
允许接收=0:
禁止接收
TB8:
发送数据位=0为数据,=1为地址
RB8:
发送数据位。
在方式2和3中,RB8存放接收到的第九位数据,用以识别接收到的数据特征。
TI:
发送中断标志位,=1表示帧发送结束TI由软件清零
RI:
接收中断标志位。
在接收到停止位时,该位由硬件置位。
=1表示帧接收完成
4、PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址87H。
在CHMOS型单片机中,除SMOD位外,其它位均为虚设的,SMOD是串行口波特率倍增位。
当SMOD=1,串行口波特率加倍。
系统复位默认为SMOD=0。
5、串行口的工作方式由SCON中的SM0和SM1来定义的,其中SM0SM1=01,即工作方式1最常用。
工作方式1为波特率可变的8位异步通信接口方式,发送或接收一帧信息共10位,包括一个起始位0,8个数据位和1个停止位。
a、数据发送:
当CPU执行一条指令将数据写入发送缓冲SBUF时就启动发送,串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI;b、数据接收:
在REN=1时,允许接收。
只有当RI=0且停止位为1或者SM2=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI,否则信息丢失。
所以在方式1下接收时,应先用软件清零RI和SM2标志。
三、程序设计
ORG0000H
AJMPMAIN
ORG0023H
AJMPINT
ORG0030H
MAIN:
MOVTMOD,#20H/*定时/计数器1只能工作于工作方式2,但不能使用中断方式,此时定时/计数器1通常作为串行口的波特率发生器使用*/
MOVTH1,#0F4H
MOVTL1,#0F4H
MOVSCON,#50H
SETBEA/*中断总控制位*/
SETBES/*串行口中断控制位*/
SETBTR1
AJMP$
OUT:
RETI
INT:
CLRRI
MOVA,SBUF
MOVSBUF,A
JNBTI,$
CLRTI
AJMPOUT
END
四、现象及结果
在串行口窗口里输入一串字符,按回车,此串字符被原样发送到显示串口里。
将程序通过monitor传输到DPFLASH中,打开DPFLASH串口调试器,把波特率改为2400bps,在处理字符串对话框中输入“asdb”,点击发送,则在接受窗口中出现所发送的字符串,如图:
图3.1串口通讯实验结果
实验四电机驱动
实验人员:
何云鹏指导老师:
刘易
实验地点:
6C701实验时间:
2013.04.01
一、实验要求
1、了解步进电机工作原理。
2、C语言或者汇编程序,要求用开关K1,K2控制四项步进电机的正转、反转。
二、实验原理
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
三、程序设计
MOV20H,#00H;20H单元置初值,电机正转位置指针
MOV21H,#00H;21H单元置初值,电机反转位置指针
MOVP1,#0C0H;P1口置初值,防止电机上电短路
MOVTMOD,#60H;T1计数器置初值,开中断
MOVTL1,#0FFH
MOVTH1,#0FFH
SETBET1
SETBEA
SETBTR1
SJMP$
;***********计数器1中断程序************
IT1P:
JBP3.7,FAN;电机正、反转指针
;*************电机正转*****************
JB00H,LOOP0
JB01H,LOOP1
JB02H,LOOP2
JB03H,LOOP3
JB04H,LOOP4
JB05H,LOOP5
JB06H,LOOP6
JB07H,LOOP7
LOOP0:
MOVP1,#0D0H
MOV20H,#02H
MOV21H,#40H
AJMPQUIT
LOOP1:
MOVP1,#090H
MOV20H,#04H
MOV21H,#20H
AJMPQUIT
LOOP2:
MOVP1,#0B0H
MOV20H,#08H
MOV21H,#10H
AJMPQUIT
LOOP3:
MOVP1,#030H
MOV20H,#10H
MOV21H,#08H
AJMPQUIT
LOOP4:
MOVP1,#070H
MOV20H,#20H
MOV21H,#04H
AJMPQUIT
LOOP5:
MOVP1,#060H
MOV20H,#40H
MOV21H,#02H
AJMPQUIT
LOOP6:
MOVP1,#0E0H
MOV20H,#80H
MOV21H,#01H
AJMPQUIT
LOOP7:
MOVP1,#0C0H
MOV;20H,#01H
MOV21H,#80H
AJMPQUIT
;***************电机反转*****************
FAN:
JB08H,LOOQ0
JB09H,LOOQ1
JB0AH,LOOQ2
JB0BH,LOOQ3
JB0CH,LOOQ4
JB0DH,LOOQ5
JB0EH,LOOQ6
JB0FH,LOOQ7
LOOQ0:
MOVP1,#0A0H
MOV21H,#02H
MOV20H,#40H
AJMPQUIT
LOOQ1:
MOVP1,#0E0H
MOV21H,#04H
MOV20H,#20H
AJMPQUIT
LOOQ2:
MOVP1,#0C0H
MOV21H,#08H
MOV20H,#10H
AJMPQUIT
LOOQ3:
MOVP1,#0D0H
MOV21H,#10H
MOV20H,#08H
AJMPQUIT
LOOQ4:
MOVP1,#050H
MOV21H,#20H
MOV20H,#04H
AJMPQUIT
LOOQ5:
MOVP1,#070H
MOV21H,#40H
MOV20H,#02H
AJMPQUIT
LOOQ6:
MOVP1,#030H
MOV21H,#80H
MOV20H,#01H
AJMPQUIT
LOOQ7:
MOVP1,#0B0H
MOV21H,#01H
MOV20H,#80H
QUIT:
RETI END
四、现象与结果
按下k1键,步进电机正转。
按下k2键,步进电机反转。
五、问题讨论
1、步进电机中的转动惯量是什么意思?
转动惯量定义为:
J=∑mi*ri^2
(1)式中mi表示刚体的某个质点的质量,ri表示该质点到转轴的垂直距离。
转动惯量是表征刚体转动惯性大小的物理量,它与刚体的质量、质量相对于转轴的分布有关。
刚体的转动惯量是由质量、质量分布、转轴位置三个因素决定的。
(2)同一刚体对不同转轴的转动不同,凡是提到转动惯量,必须指明它是对哪个轴的才有意义。
2、步进电机转角度数,转角如何换算成脉冲数,有小数怎么办?
要用浮点运算?
三凌fx的plc程序如何编写?
答:
先设置步进控制器的分辨率,例如设为发送10000个脉冲步进电机转1周(360°),即每个脉冲步进电机旋转0.036°,再用设定的旋转角度除以0.036就得出旋转设定的角度需要的脉冲数,至于小数点的话用三菱PLC可以先将K10000和K360还有设定的旋转角度用浮点转换指令转换为浮点数,再相除即可!
西门子PLC可以直接输入浮点数做浮点运算!
如果PLC不支持浮点运算指令,可以讲以上数值放大N倍,再做计算亦可!