单片机实验指导.docx

上传人:b****7 文档编号:10010365 上传时间:2023-02-07 格式:DOCX 页数:30 大小:115.57KB
下载 相关 举报
单片机实验指导.docx_第1页
第1页 / 共30页
单片机实验指导.docx_第2页
第2页 / 共30页
单片机实验指导.docx_第3页
第3页 / 共30页
单片机实验指导.docx_第4页
第4页 / 共30页
单片机实验指导.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机实验指导.docx

《单片机实验指导.docx》由会员分享,可在线阅读,更多相关《单片机实验指导.docx(30页珍藏版)》请在冰豆网上搜索。

单片机实验指导.docx

单片机实验指导

实验一定时器实验

一、实验目的

1.掌握定时器使用方法

2.了解定时器控制字的含义

二、实验内容

本实验使用定时器,定时为一秒钟。

CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

三、实验原理

内部计数器用作定时器时,是对机器周期计数。

每个机器周期的长度是12个振荡器周期。

因为实验系统的晶振是12MHZ,本程序工作于方式2,即8位自动重装方式定时器,定时器100uS中断一次,所以定时常数的设置可按以下方法计算:

机器周期=12÷12MHz=1uS

(256-定时常数)×1uS=100uS

定时常数=156。

TH1←156,TL1←156

求T0的方式控制字TMOD:

#20h

然后对100uS中断次数计数10000次(十六进制为3E8h),就是1秒钟。

 

四、单片机编程代码

ORG0000H

AJMPSTART

START:

MOVTMOD,#20H

SETBEA

SETBET1

MOVTH1,#9CH

MOVTL1,#9CH

MOVR0,#0

SETBTR1

SJMP$

ORG001BH

AJMPBRA

BRA:

CJNER0,#1000,LOOP

MOVR0,#0

CLPP1.0

RETI

LOOP:

INCR0

RETI

 

实验二窜行静态显示实验

一、实验目的

1.掌握数字、字符转换成显示段码的软件译码方法

2.静态显示的原理和相关程序的编写

二、实验内容

利用89C51串行口和8个串行输入并行输出移位寄存器74LS164,扩展8个8位输出通道,用于驱动8个LED数码显示器。

8LED显示“89C52”。

三、实验原理

74LS164为8位串入并出移位寄存器,1、2为串行输入端,QA~QH为并行输出端,CLK为移位时钟脉冲,上升沿移入一位;CLR为清零端,低电平时并行输出为零。

8段数码显示管原理如下图所示,分为共阴极和共阳极。

数字和字母显示由前面七段管决定,最后一段管决定右下角的小数点。

各个段管编号分别为a,b,c,d,e,f,g,h,a为最低位,h为最高位。

四、单片机编程代码

;P3.0--DINP3.1--CLK

DBUF0EQU30H

TEMPEQU40H

DINBITP3.0

CLKBITP3.1

ORG0000H

LJMPSTART

ORG0100H

START:

MOV30H,#10h

MOV31H,#10H

MOV32H,#10h

MOV33H,#8

MOV34H,#9

MOV35H,#0cH

MOV36H,#5

MOV37H,#2

DISP:

MOVR0,#DBUF0

MOVR1,#TEMP

MOVR2,#8

DP10:

MOVDPTR,#SEGTAB

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A

INCR0

INCR1

DJNZR2,DP10

MOVR0,#TEMP

MOVR1,#8

DP12:

MOVR2,#8

MOVA,@R0

DP13:

RLCA

MOVDIN,C

CLRCLK

SETBCLK

DJNZR2,DP13

INCR0

DJNZR1,DP12

OK:

SJMPOK

SEGTAB:

DB3FH,06H,5BH,4FH,66H,6DH

DB7DH,07H,7FH,6FH,77H,7CH

DB39H,5EH,7BH,71H,00H,40H

END

实验三窜行A/D转换实验

一、实验目的

1.掌握单片机I/O模拟I2C总线的编程方法

2.掌握16位串行A/D转换芯片ADS1100使用方法

二、实验内容

利用ads1100将滑动变阻器的输出电压转换为数字信号,并在数码显示管显示出数字量。

三、实验原理

引脚号

引脚名称

功能

1

VIN+

输入正

2

GND

3

SCL

时钟线

4

SDA

数据线

5

VDD

电源

6

VIN-

输入负

ADS1100有两种工作模式:

连续转换模式和单次转换模式,连续转换模式下,当一次转换结束后,ADS1100将结果放入输出寄存器并立刻开始下一次转换,ST/BSY位在控制字寄存器中始终读到的是1。

如果是单次转换模式,则在ST/BSY位被置1后,ADS1100上电并执行一次转换,转换结束后,ADS1100会把结果放入输出寄存器,并复位ST/BSY成0,关断电源。

在转换中,ST/BSY置1无效,如果要从连续模式切换到单次模式,ADS1100可在执行完当前转换后ST/BSY置0,然后断电。

ADS1100的输出寄存器和控制字寄存器的内容是可读的。

要读ADS1100,可将其设为读状态(7位的ADS1100地址后加1位高电平有效的读信号,高位在前,如ADS1100A0则是10010001),以读取三个字节的内容,其中前两个字节是输出寄存器的内容(高位在前),第三个字节是控制字寄存器的内容(高位在前,从第四个字节开始起均为FFH。

如果只想知道输出寄存器的内容是否合理,可仅读取前两个字节而忽略其后的字节。

ADS1100的输出寄存器是只读的,只能向控制字寄存器写内容,写的方法是将ADS1100设置为写(在ADS1100地址后加1位低电平有效的写信号,高位在前),然后写入一个字节(高位在前)。

ADS1100忽略在第一个字节以后的内容。

四、单片机编程代码

DAT0BITP1.0

CLK0BITP1.1

CSBITP1.2

ADHEXDATA050H

DBUFDATA060H

BIT_COUNTDATA070H

TIMERDATA072H

TIMER1DATA073H

TIMER2DATA074H

DTA_INDATA020H

DATA_OUTDATA021H

CLKBITP1.6

DATBITP1.7

ORG0000H

LJMPMAIN

ORG0100H

main:

ACALLTLC549_ADC

MOVR7,#0

DJNZR7,$

ACALLTLC549_ADC

MOVR7,A;存转换结果

MOVADHEX,A

CALLMUL500;ADHEX*500/256  

CALLHB2

CALLTODISP;拆开显示

NOP

CALLDISPLAY

CALLdelay

LJMPMAIN

TLC549_ADC:

;串行显示处理程序,结果存在A中

CLRA

CLRCLK0

CLRCS

MOVR6,#8

ADLOOP:

SETBCLK0

NOP

NOP

MOVC,DAT0

RLCA

CLRCLK0

NOP

DJNZR6,ADLOOP

SETBCS

SETBCLK0

RET

DISPLAY:

ANLP2,#00H;CS7279有效

MOVDATA_OUT,#10100100B;A4H,复位命令

CALLSEND

MOVDATA_OUT,#11001000B;译码方式0,0位显示

CALLSEND

MOVDATA_OUT,DBUF

CALLSEND

MOVDATA_OUT,#11001001B;译码方式0,1位显示

CALLSEND

MOVDATA_OUT,DBUF+1

CALLSEND

MOVDATA_OUT,#11001010B;译码方式0,2位显示

CALLSEND

MOVDATA_OUT,DBUF+2

CALLSEND

MOVP2,#0FFH;CS7279无效

RET

SEND:

MOVBIT_COUNT,#8;发送字符子程序

ANLP2,#00H

CALLLONG_DELAY

SEND_LOOP:

MOVC,DATA_OUT.7

MOVDAT,C

SETBCLK

MOVA,DATA_OUT

RLA

MOVDATA_OUT,A

CALLSHORT_DELAY

CLRCLK

CALLSHORT_DELAY

DJNZBIT_COUNT,SEND_LOOP

CLRDAT

RET

LONG_DELAY:

MOVTIMER,#150;延时约200US

DELAY_LOOP:

DJNZTIMER,DELAY_LOOP

RET

SHORT_DELAY:

MOVTIMER,#20;延时约20US

SHORT_LP:

DJNZTIMER,SHORT_LP

RET

DELAY:

MOVTIMER,#4

AA0:

MOVTIMER1,#0

AA1:

MOVTIMER2,#0

AA2:

DJNZTIMER2,AA2

DJNZTIMER1,AA1

DJNZTIMER,AA0

RET

;功能:

单字节二进制无符号数乘500(1f4H=100H+0f4H)

;入口条件:

被乘数在R7中。

;出口信息:

乘积在R4、R5、R6中(R6低八位)。

MUL500:

MOVA,#0f4H;计算R3乘R7

MOVB,R7

MULAB

MOVR5,B;暂存部分积

MOVR6,A

MOVA,R7

ADDA,B

MOVR5,A

CLRA

RLCA

MOVR4,A

CLRC

MOVA,R6

SUBBA,#80H

JCRETURN

CLRC

MOVA,R5

ADDA,#1

MOVR5,A

MOVA,R4

ADDCA,#0

MOVR4,A

RETURN:

RET

;功能:

双字节十六进制整数转换成双字节BCD码整数

;入口条件:

待转换的双字节十六进制整数在R6、R7中。

;出口信息:

转换后的三字节BCD码整数在R3、R4、R5中。

HB2:

MOVA,R4

MOVR6,A

MOVA,R5

MOVR7,A

CLRA;BCD码初始化

MOVR3,A

MOVR4,A

MOVR5,A

MOVR2,#10H;转换双字节十六进制整数

HB3:

MOVA,R7;从高端移出待转换数的一位到CY中

RLCA

MOVR7,A

MOVA,R6

RLCA

MOVR6,A

MOVA,R5;bcd码带进位自身相加,相当于乘2

ADDCA,R5

DAA;十进制调整

MOVR5,A

MOVA,R4

ADDCA,R4

DAA

MOVR4,A

MOVA,R3

ADDCA,R3

MOVR3,A;双字节十六进制数的万位数不超过6,不用调整

DJNZR2,HB3;处理完16bit

RET

TODISP:

MOVA,R4

ORLA,#80H

MOVDBUF+2,A

MOVA,R5

SWAPA

ANLA,#0FH

MOVDBUF+1,A

MOVA,R5

ANLA,#0FH

MOVDBUF,A

RET

END

实验四温度传感器实验

一、实验目的

1.了解温度传感器电路的工作原理

2.了解温度控制的基本原理

3.掌握一线总线接口的使用

二、实验内容

利用DS18B20将温度在数码显示管显示出,以实现温度的测量和温度的控制。

三、实验原理

 

四、单片机编程代码

TEMPER_LEQU29H;用于保存读出温度的低8位

TEMPER_HEQU28H;用于保存读出温度的高8位

FLAG1EQU38H;是否检测到DS18B20标志位

A_BITEQU20H;数码管个位数存放内存位置

B_BITEQU21H;数码管十位数存放内存位置

LEDBufEQU30H

TEMPEQU55H

DINBITP1.0

CLKBITP1.1

ORG0000H

LJMPSTART

ORG0100H

start:

SETBP1.4

MAIN:

LCALLGET_TEMPER;调用读温度子程序

MOVA,29H

MOVC,40H;将28H中的最低位移入C

RRCA

MOVC,41H

RRCA

MOVC,42H

RRCA

MOVC,43H

RRCA

MOV29H,A

LCALLDisplayResult

LCALLDISPLAYLED;调用数码管显示子程序

LCALLDELAY1

AJMPMAIN

;这是DS18B20复位初始化子程序

INIT_1820:

SETBP2.0

NOP

CLRP2.0

;主机发出延时537微秒的复位低脉冲

MOVR1,#3

TSR1:

MOVR0,#107

DJNZR0,$

DJNZR1,TSR1

SETBP2.0;然后拉高数据线

NOP

NOP

NOP

MOVR0,#25H

TSR2:

JNBP2.0,TSR3;等待DS18B20回应

DJNZR0,TSR2

LJMPTSR4;延时

TSR3:

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

LJMPTSR5

TSR4:

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

LJMPTSR7

TSR5:

MOVR0,#117

TSR6:

DJNZR0,TSR6;时序要求延时一段时间

TSR7:

SETBP2.0

RET

;读出转换后的温度值

GET_TEMPER:

SETBP2.0

LCALLINIT_1820;先复位DS18B20

JBFLAG1,TSS2

RET;判断DS1820是否存在?

若DS18B20不存在则返回

TSS2:

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

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

LCALLWRITE_1820

LCALLDELAY1

LCALLINIT_1820;准备读温度前先复位

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

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

LCALLWRITE_1820

LCALLREAD_18200;将读出的温度数据保存到35H/36H

RET

;写DS18B20的子程序(有具体的时序要求)

WRITE_1820:

MOVR2,#8;一共8位数据

CLRC

WR1:

CLRP2.0

MOVR3,#6

DJNZR3,$

RRCA

MOVP2.0,C

MOVR3,#23

DJNZR3,$

SETBP2.0

NOP

DJNZR2,WR1

SETBP2.0

RET

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

READ_18200:

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

MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:

MOVR2,#8;数据一共有8位

RE01:

CLRC

SETBP2.0

NOP

NOP

CLRP2.0

NOP

NOP

NOP

SETBP2.0

MOVR3,#9

RE10:

DJNZR3,RE10

MOVC,P2.0

MOVR3,#23

RE20:

DJNZR3,RE20

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

DisplayLED:

;-----------显示子程序---------------

movLEDBUF+5,#10H

movLEDBUF+6,#10H

movLEDBUF+7,#10H

MOVR0,#LEDBUF

MOVR1,#TEMP

MOVR2,#8

DP10:

MOVDPTR,#LEDMAP

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A

INCR0

INCR1

DJNZR2,DP10

MOVR0,#TEMP

MOVR1,#8

DP12:

MOVR2,#8

MOVA,@R0

DP13:

RLCA

MOVDIN,C

CLRCLK

SETBCLK

DJNZR2,DP13

INCR0

DJNZR1,DP12

RET

LEDMAP:

DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5

DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B

DB58h,63H,7BH,71H,00H,40H;C,o,E,F,,-

DB63H,39H,63h

DisplayResult:

;===================

MOVLEDBuf,#10H;''

MOVLEDBuf+3,#14H;

MOVLEDBuf+4,#13H;

Goon:

MOVA,29H;将29H中的十六进制数转换成10进制

MOVB,#10

DIVab

MOVLEDBuf+1,A;3

MOVA,B

MOVLEDBuf+2,A;4

MOVA,LEDBuf+1

CJNEA,#4,$+3

JNCWW

SETBP1.4

RET

WW:

CLRP1.4

D1MS:

MOVR7,#80

DJNZR7,$

RET

Delay:

MOVr7,#0

DelayLoop:

DJNZr7,DelayLoop

DJNZr6,DelayLoop

RET

DELAY1:

MOVR4,#020H

AA1:

MOVR5,#080H

AA:

NOP

NOP

DJNZR5,AA

DJNZR4,AA1

RET

END

 

实验五步进电机控制实验

一、实验目的

1.了解步进电机控制的基本原理

2.掌握控制步进电机转动的编程方法

3.了解单片机控制外部设备的常用电路

二、实验内容

用单片机实现步进电机的控制

三、实验原理

四、单片机编程代码

ORG0000

STOP:

ORLP1,#0FFH;步进电机停止

LOOP:

JNBP2.0,FOR2;如果p3.2按下正转

JNBP2.1,REV2;如果p3.3按下反转

JNBP2.2,STOP1;如果p3.4按下停止

JMPLOOP;反复监测键盘

FOR:

MOVR0,#00H;正转到tab取码指针初值

for1:

MOVA,R0;取码

MOVDPTR,#TABLE;

MOVCA,@A+DPTR

JZFOR;是否到了结束码00h

CPLA;把acc反向

MOVP1,A;输出到p1开始正转

JNBP2.2,STOP1;如果p3.4按下停止

JNBP2.1,REV2;如果p3.3按下正转

JNBP2.0,FOR2;如果p3.2按下反转

CALLDELAY;转动的速度

INCR0;取下一个码

JMPFOR1;继续正转

rev:

MOVR0,#05H;反转到tab取码指针初值

rev1:

MOVA,R0

MOVDPTR,#TABLE;取码

MOVCA,@A+DPTR

JZREV;是否到了结束码00h

CPLA;把acc反向

MOVP1,A;输出到p1开始反转

JNBP2.2,STOP1;如果p3.4按下停止

JNBP2.1,REV2;如果p3.3按下正转

JNBP2.0,FOR2;如果p3.2按下反转

CALLDELAY;转动的速度

INCR0;取下一个码

JMPREV1;继续反转

stop1:

CALLDELAY;按p3.4的消除抖动

JNBP2.2,$;p3.4放开否?

CALLDELAY;放开消除抖动

JMPSTOP

for2:

CALLDELAY;按p3.2的消除抖动

JNBP2.0,$;p3.2放开否?

CALLDELAY;放开消除抖动

JMPFOR

rev2:

CALLDELAY;按p3.3的消除抖动

JNBP2.1,$;p3.3放开否?

CALLDELAY;放开消除抖动

JMPREV

DELAY:

MOVR1,#150;步进电机的转速20ms

D1:

MOVR2,#248

DJNZR2,$

DJNZR1,D1

RET

TABLE:

db01h,02h,04h,08h;正转表

db00;正转结束

db01h,08h,04h,02h;反转

db00;反转结束

END

实验六128×64液晶显示屏实验

一、实验目的

1.了解点阵型液晶显示器的工作原理

2.了解点阵型液晶显示器控制方式

二、实验内容

用单片机和12864液晶显示屏实现动态图显示

三、实验原理

本实验箱采用内置控制器、不带字库的图形点阵液晶显示模块,点阵数为128×64。

它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成,可完成图形显示也可以显示8×4个(16×16点阵)汉字。

主要技术参数和性能:

1)电源VDD+5V模块内自带-10V负压用于LCD的驱动电压

2)显示内容128(列)64(行)点

3)全屏幕点阵

4)七种指令

5)与CPU接口采用8位数据总线并行输入输出和8条控制线

6)占空比1/64

7)工作温度-10+55存储温度-20+60

管脚号

管脚名称

LEVER

管脚功能描述

1

VSS

0

电源地

2

VDD

5.0V

电源电压

3

V0

5.0V-13V

液晶显示器驱动电压

4

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

当前位置:首页 > 高等教育 > 农学

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

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