步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx

上传人:b****7 文档编号:11361407 上传时间:2023-02-28 格式:DOCX 页数:47 大小:1.45MB
下载 相关 举报
步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx_第1页
第1页 / 共47页
步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx_第2页
第2页 / 共47页
步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx_第3页
第3页 / 共47页
步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx_第4页
第4页 / 共47页
步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx

《步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx》由会员分享,可在线阅读,更多相关《步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx(47页珍藏版)》请在冰豆网上搜索。

步进电机控制实验实验十三 数字温度传感器实验实验十五 PWM输出实验实验十六 实时时钟实验.docx

步进电机控制实验实验十三数字温度传感器实验实验十五PWM输出实验实验十六实时时钟实验

《单片机原理与接口技术》

 

实验十一 步进电机控制实验

实验十三 数字温度传感器实验

实验十五 PWM输出实验

实验十六 实时时钟实验

 

班级:

学号:

姓名:

成绩:

指导老师:

日期:

2017年12月11日

实验十一 步进电机控制实验

一、实验目的

了解步进电机控制的基本原理,掌握步进电机转动编程方法。

二、实验原理

步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。

切换是通过单片机输出脉冲信号来实现的。

所以调节脉冲信号的频率便可以改变步进电机的转速,改变各相脉冲的先后顺序,可以改变电机的旋转方向。

步进电机的转速应由慢到快逐步加速。

电机驱动方式可以采用双四拍(AB→BC→CD→DA→AB)方式,也可以采用单四拍(A→B→C→D→A)方式,或单、双八拍(A→AB→B→BC→C→CD→D→DA→A)方式。

三、仪器设备:

1、PC计算机一台。

2、Dais-386PRO+实验系统一套。

四、实验内容:

步进电机驱动原理是通过对它每组线圈中的电流的顺序切换来使电机作步进式旋转,驱动电路由脉冲信号为控制,所以调节脉冲信号的频率便可改变步进电机的转速。

利用单片机的P1.0~P1.3输出脉冲信号,驱动步进电机转动。

实验电路:

 

;步进电机控制

;P1.0~P1.3----BA,BB,BC,BD

org0

mova,#11001100b

start:

movp1,a

rra

calldelay

sjmpstart

delay:

movr6,#8

dlp:

movr7,#0

djnzr7,$

djnzr6,dlp

ret

end

实验步骤:

1)按图4-11连接实验电路,参考程序:

A51\STMOTOR.ASM;

2)编写实验程序,经编译、链接无语法错误后装载到实验系统;

3)全速运行程序,观察步进电机转动情况;

4)实验完毕后,应使用暂停命令中止程序的运行。

五、实验结果讨论:

本实验程序通过右移循环延时11001100并给P1,从而控制步进电机的ABCD的正负来使其匀速转动。

本次实验让我了解了步进电动机的工作原理,掌握了怎样用单片机编程来控制步进电机的转动。

通过这次实验,我更加深刻的认识到将单片机编程知识应用到实践中的重要性。

同时,在理论知识方面,我还有很多欠缺。

在以后的学习中要注意实践性,不能只满足于理论知识。

实验十三 数字温度传感器实验

一、实验目的

学习DS18B20数字温度传感器的编程方法。

二、实验原理

DS18B20的64位ROM的结构如下表。

开始8位是DS18B20的产品类型编号10H,接着是每一个器件的唯一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一根线进行通信的原因。

8bit检验CRC

48bit序列号

8bit工厂代码(10H)

主机操作ROM的命令有五种如下表:

指令

说明

读ROM(33H)

读DS18B20的序列号

匹配ROM(55H)

继续读完64位序列号的命令,用于多个DS18B20时定位

跳过ROM(CCH)

此命令执行后的存储器操作将针对在线的所有DS18B20

搜ROM(F0H)

识别总线上各器件的编码,为操作各器件作好准备

报警搜索(ECH)

仅温度越限的器件对此命令作出响应

DS18B20的高速暂存器由便笺式RAM和非易失性电擦写EERAM组成,后者用于存储TH、TL值。

数据先写入便笺式RAM,经校验后再传给EERAM。

便笺式RAM占9个字节,包括温度信息(第0、1字节)、TH和TL值(2、3字节)、配置寄存器数据(4字节)、CRC(第8字节)等,第5、6、7字节不用。

DS18B20存储控制命令

指令

说明

温度转换(44H)

启动在线DS18B20作温度A/D转换

读数据(BEH)

从高速暂存器读9位温度值和CRC值

写数据(4EH)

将数据写入高速暂存器的第3和第4字节中

复制(48H)

将高速暂存器中第3和第4字节复制到EERAM

读EERAM(88H)

将EERAM内容写入高速暂存器中第3和第4字节

读电源供电方式(B4H)

了解DS18B20的供电方式

在正常情况下,DS18B20的测温分辩率为0.50C,可采用下述方法获得高分辩率的温度测量结果:

首先用DS18B20提供的读暂存器指令(BEH)读出以0.50C为分辩率的温度测量结果;其次切去测量结果中的低有效位(LSB),得到所测实际温度的整数部分Tz;然后,再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。

当18B20完成温度转换后,就把测得的温度值与TH、TL作比较。

若T>TH或T

因此可用多只DS18B20同时测量温度,主机进行告警搜索。

一旦某测温点越限,主机利用告警搜索命令即可识别正在告警的器件,并读出序列号,而不必考虑非告警器件。

三、仪器设备:

1、PC计算机一台。

2、Dais-386PRO+实验系统一套。

四、实验内容:

1、温度测量

使用单片机的P3.3连接DS18B20的DQ管脚,完成对DS18B20的初始化及温度的读取。

实验步骤:

1)按图4-13-1连接实验电路,参考程序:

A51\DS18B20.ASM;

2)编写实验程序,经编译、链接无语法错误后装载到实验系统;

3)全速运行程序,数码管显示当前环境温度值;

4)实验完毕后,应使用暂停命令中止程序的运行。

2、温度控制

单片机的P3.3连接DS18B20的DQ管脚,完成对DS18B20的初始化及温度的读取;单片机的P3.2通过继电器控制功率电阻进行加温。

编写程序,通用对P3.2的控制,将温度恒定在某一固定值。

实验步骤:

1)按图4-13-2连接实验电路,参考程序:

A51\DS18B20C.ASM;

2)编写实验程序,经编译、链接无语法错误后装载到实验系统;

3)全速运行程序,数码管第1、2位显示设定温度,第5、6位显示实测温度;

4)当实测温度小于设定温度时,开始加温;当实测温度大于等于设定温度时,停止加温。

5)实验完毕后,应使用暂停命令中止程序的运行。

;DS18B20数字温度传感器DS18B20.ASM

;实验连线

;单片机的P3.3连接18B20单元的"测温(DQ)"端

CS8279Cequ0fff1h

CS8279Dequ0fff0h

ledbufequ70h;显示缓冲

TEMPER_LEQU36H;存放读出温度低位数据

TEMPER_HEQU35H;存放读出温度高位数据

TEMPER_NUMEQU60H;存放转换后的温度值

FLAG1BIT00H

DQBITP3.3;一线总线控制端口

ORG0000H

MOVSP,#60H

callI8279;8279初始化

MOVLedBuf+0,#10h

MOVLedBuf+1,#10h

MOVLedBuf+2,#10h

MOVLedBuf+3,#10h

MOVLedBuf+4,#10h

MOVLedBuf+5,#10h

LCALLDISP

mloop:

LCALLGET_TEMPER;从DS18B20读出温度数据

LCALLTEMPER_COV;转换读出的温度数据并保存

mova,TEMPER_NUM

movb,a;拆送显示缓冲区

swapa

anla,#0fh

anlb,#0fh

MOVLedBuf+4,a

MOVLedBuf+5,b

LCALLDISP

SJMPmloop;完成一次数字温度采集

;读出转换后的温度值

GET_TEMPER:

SETBDQ;定时入口

BCD:

LCALLINIT_1820

JBFLAG1,S22

LJMPBCD;若DS18B20不存在则返回

S22:

LCALLDISP

MOVA,#0CCH;跳过ROM匹配------0CC

RRCA

MOVDQ,C

MOVR3,#11

DJNZR3,$

SETBDQ

NOP

DJNZR2,WR1

SETBDQ

RET

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

READ_18200:

MOVR4,#2;将温度高位和低位从DS18B20中读出

MOVR1,#36H;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)

RE00:

MOVR2,#8

RE01:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#3

DJNZR3,$

MOVC,DQ

MOVR3,#11

DJNZR3,$

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

;将从DS18B20中读出的温度数据进行转换

TEMPER_COV:

MOVA,#0F0H

ANLA,TEMPER_L;舍去温度低位中小数点后的四位温度数值

LCALLWRITE_1820

MOVA,#44H;发出温度转换命令

LCALLWRITE_1820

NOP

LCALLDISP

CBA:

LCALLINIT_1820

JBFLAG1,ABC

LJMPCBA

ABC:

LCALLDISP

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0BEH;发出读温度命令

LCALLWRITE_1820

LCALLREAD_18200

RET

;读DS18B20的程序,从DS18B20中读出一个字节的数据

READ_1820:

MOVR2,#8

RE1:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#3

DJNZR3,$

MOVC,DQ

MOVR3,#11

DJNZR3,$

RRCA

DJNZR2,RE1

RET

;写DS18B20的程序

WRITE_1820:

MOVR2,#8

CLRC

WR1:

CLRDQ

MOVR3,#3

DJNZR3,$

SWAPA

MOVTEMPER_NUM,A

MOVA,TEMPER_L

JNBACC.3,TEMPER_COV1;四舍五入去温度值

INCTEMPER_NUM

TEMPER_COV1:

MOVA,TEMPER_H

ANLA,#07H

SWAPA

ADDA,TEMPER_NUM

MOVTEMPER_NUM,A;保存变换后的温度数据

LCALLBIN_BCD

RET

;将16进制的温度数据转换成压缩BCD码

BIN_BCD:

MOVDPTR,#TEMP_TAB

MOVA,TEMPER_NUM

MOVCA,@A+DPTR

MOVTEMPER_NUM,A

RET

TEMP_TAB:

DB00H,01H,02H,03H,04H,05H,06H,07H

DB08H,09H,10H,11H,12H,13H,14H,15H

DB16H,17H,18H,19H,20H,21H,22H,23H

DB24H,25H,26H,27H,28H,29H,30H,31H

DB32H,33H,34H,35H,36H,37H,38H,39H

DB40H,41H,42H,43H,44H,45H,46H,47H

DB48H,49H,50H,51H,52H,53H,54H,55H

DB56H,57H,58H,59H,60H,61H,62H,63H

DB64H,65H,66H,67H,68H,69H,70H,71H

DB72H,73H,74H,75H,76H,77H,78H,79H

DB80H,81H,82H,83H,84H,85H,86H,87H

DB

DB88H,89H,90H,91H,92H,93H,94H,95H

DB96H,97H,98H,99H

;DS18B20初始化程序

INIT_1820:

SETBDQ

NOP

CLRDQ

MOVR0,#80h

TSR1:

DJNZR0,TSR1;延时

SETBDQ

MOVR0,#25h;96us

TSR2:

DJNZR0,TSR2

JNBDQ,TSR3

LJMPTSR4;延时

TSR3:

SETBFLAG1;置标志位,表示DS1820存在

LJMPTSR5

TSR4:

CLRFLAG1;清标志位,表示DS1820不存在

LJMPTSR7

TSR5:

MOVR0,#6Bh;200us

TSR6:

DJNZR0,TSR6;延时

TSR7:

SETBDQ

RET

;重新写DS18B20暂存存储器设定值

RE_CONFIG:

JBFLAG1,RE_CONFIG1;若DS18B20存在,转RE_CONFIG1

RET

RE_CONFIG1:

MOVA,#0CCH;发SKIPROM命令

LCALLWRITE_1820

MOVA,#4EH;发写暂存存储器命令

LCALLWRITE_1820

LCALLWRITE_1820

MOVA,#00H;TH(报警上限)中写入00H

LCALLWRITE_1820

;DS18B20数字温度传感器DS18B20C.ASM

;实验连线

;单片机的P3.3连接DS18B20单元的DQ

;单片机的P3.2连接继电器单元的JIN

;继电器单元的JZ连接GND

;继电器单元的JK连接DS18B20单元的HOT

SetTempequ35;设定温度值

CS8279Cequ0fff1h

CS8279Dequ0fff0h

ledbufequ70h;显示缓冲

TEMPER_LEQU36H;存放读出温度低位数据

TEMPER_HEQU35H;存放读出温度高位数据

TEMPER_SETEQU5FH;存放设定的温度值

TEMPER_NUMEQU60H;存放转换后的温度值

FLAG1BIT00H

DQBITP3.3;单总线控制端口

HOTBITP3.2;温度控制

ORG0000H

MOVSP,#60H

callI8279;8279初始化

MOVDPTR,#TEMP_TAB

mova,#SetTemp;取设定温度值

MOVCA,@A+DPTR

movTEMPER_SET,a

movb,a;拆送显示缓冲区

disp:

PUSHDPL

PUSHDPH

movr2,#85h

movr0,#ledbuf

disp1:

movdptr,#CS8279C

mova,r2

movx@dptr,a

movdptr,#ledmap;指字形表首

mova,@r0;取送显数据

movca,@a+dptr;索字形代码

movdptr,#CS8279D;指向字形口

movx@dptr,a;送当前字形

decr2

incr0

cjner0,#ledbuf+6,disp1

POPDPH

POPDPL

ret

;字形表

ledmap:

db0ch,9fh,4ah,0bh,99h,29h,28h,8fh

db08h,09h,88h,38h,6ch,1ah,68h,0e8h,0ffh

END

MOVA,#00H;TL(报警下限)中写入00H

LCALLWRITE_1820

MOVA,#7FH;选择12位温度分辨率

LCALLWRITE_1820

RET

;8279初始化

I8279:

PUSHDPL

PUSHDPH

MOVdptr,#CS8279C;指向命令口

MOVA,#00H;8个8位显示

MOVX@dptr,a;方式字写入

MOVA,#32H;设分频初值

MOVX@dptr,a;分频字写入

MOVA,#0DFH;定义清显字

MOVX@dptr,a;关闭显示器

x90s:

movxa,@dptr

JBACC.7,x90s;检测8279

POPDPH

POPDPL

ret

;显示子程序

MOVA,#44H;发出温度转换命令

LCALLWRITE_1820

NOP

LCALLDISP

CBA:

LCALLINIT_1820

JBFLAG1,ABC

LJMPCBA

ABC:

LCALLDISP

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0BEH;发出读温度命令

LCALLWRITE_1820

LCALLREAD_18200

RET

;读DS18B20的程序,从DS18B20中读出一个字节的数据

READ_1820:

MOVR2,#8

RE1:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#3

DJNZR3,$

MOVC,DQ

MOVR3,#11

DJNZR3,$

RRCA

DJNZR2,RE1

RET

;写DS18B20的程序

WRITE_1820:

MOVR2,#8

CLRC

WR1:

CLRDQ

MOVR3,#3

swapa

anla,#0fh

anlb,#0fh

MOVLedBuf+0,a

MOVLedBuf+1,b

MOVLedBuf+2,#10h

MOVLedBuf+3,#10h

MOVLedBuf+4,#10h

MOVLedBuf+5,#10h

LCALLDISP;清显示

mloop:

LCALLGET_TEMPER;从DS18B20读出温度数据

LCALLTEMPER_COV;转换读出的温度数据并保存

mova,TEMPER_NUM

cjnea,TEMPER_SET,ML2

ML2:

JNCML3

CLRHOT;开始加温

SJMPMLP

ML3:

SETBHOT;停止加温

MLP:

movb,a;拆送显示缓冲区

swapa

anla,#0fh

anlb,#0fh

MOVLedBuf+4,a

MOVLedBuf+5,b

LCALLDISP

SJMPmloop;完成一次数字温度采集

;读出转换后的温度值

GET_TEMPER:

SETBDQ;定时入口

BCD:

LCALLINIT_1820

JBFLAG1,S22

LJMPBCD;若DS18B20不存在则返回

S22:

LCALLDISP

MOVA,#0CCH;跳过ROM匹配------0CC

LCALLWRITE_1820

MOVTEMPER_NUM,A

MOVA,TEMPER_L

JNBACC.3,TEMPER_COV1;四舍五入去温度值

INCTEMPER_NUM

TEMPER_COV1:

MOVA,TEMPER_H

ANLA,#07H

SWAPA

ADDA,TEMPER_NUM

MOVTEMPER_NUM,A;保存变换后的温度数据

LCALLBIN_BCD

RET

;将16进制的温度数据转换成压缩BCD码

BIN_BCD:

MOVDPTR,#TEMP_TAB

MOVA,TEMPER_NUM

MOVCA,@A+DPTR

MOVTEMPER_NUM,A

RET

TEMP_TAB:

DB00H,01H,02H,03H,04H,05H,06H,07H

DB08H,09H,10H,11H,12H,13H,14H,15H

DB16H,17H,18H,19H,20H,21H,22H,23H

DB24H,25H,26H,27H,28H,29H,30H,31H

DB32H,33H,34H,35H,36H,37H,38H,39H

DB40H,41H,42H,43H,44H,45H,46H,47H

DB48H,49H,50H,51H,52H,53H,54H,55H

DB56H,57H,58H,59H,60H,61H,62H,63H

DB64H,65H,66H,67H,68H,69H,70H,71H

DB72H,73H,74H,75H,76H,77H,78H,79H

DB80H,81H,82H,83H,84H,85H,86H,87H

RRCA

MOVDQ,C

MOVR3,#11

DJNZR3,$

SETBDQ

NOP

DJNZR2,WR1

SETBDQ

RET

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

READ_18200:

MOVR4,#2;将温度高位和低位从DS18B20中读出

MOVR1,#36H;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)

RE00:

MOVR2,#8

RE01:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#3

DJNZR3,$

MOVC,DQ

MOVR3,#11

DJNZR3,$

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

;将从DS18B20中读出的温度数据进行转换

TEMPER_COV:

MOVA,#0F0H

ANLA,TEMPER_L;舍去温度低位中小数点后的四位温度数值

SWAPA

RET

;8279初始化

I8279:

PUSHDPL

PUSHDPH

MOVdptr,#CS8279C;指向命令口

MOVA,#00H;8个8位显示

MOVX@dptr,a;方式字写入

MOVA,#32H;设分频初值

MOVX@dptr,a;分频字写入

MOVA,#0DFH;定义清显字

MOVX@dptr,a;关闭显示器

x90s:

movxa,@dptr

JBA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1