单片机实验指导Word文档格式.docx
《单片机实验指导Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实验指导Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
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
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
MOVC,DAT0
RLCA
DJNZR6,ADLOOP
SETBCS
RET
DISPLAY:
ANLP2,#00H;
CS7279有效
MOVDATA_OUT,#10100100B;
A4H,复位命令
CALLSEND
MOVDATA_OUT,#11001000B;
译码方式0,0位显示
MOVDATA_OUT,DBUF
CALLSEND
MOVDATA_OUT,#11001001B;
译码方式0,1位显示
MOVDATA_OUT,DBUF+1
MOVDATA_OUT,#11001010B;
译码方式0,2位显示
MOVDATA_OUT,DBUF+2
MOVP2,#0FFH;
CS7279无效
SEND:
MOVBIT_COUNT,#8;
发送字符子程序
ANLP2,#00H
CALLLONG_DELAY
SEND_LOOP:
MOVC,DATA_OUT.7
MOVDAT,C
MOVA,DATA_OUT
RLA
MOVDATA_OUT,A
CALLSHORT_DELAY
CALLSHORT_DELAY
DJNZBIT_COUNT,SEND_LOOP
CLRDAT
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
MOVR4,A
CLRC
MOVA,R6
SUBBA,#80H
JCRETURN
MOVA,R5
ADDA,#1
MOVR5,A
MOVA,R4
ADDCA,#0
MOVR4,A
RETURN:
功能:
双字节十六进制整数转换成双字节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
MOVA,R5;
bcd码带进位自身相加,相当于乘2
ADDCA,R5
DAA;
十进制调整
MOVR5,A
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
MOVDBUF,A
END
实验四温度传感器实验
一、实验目的
1.了解温度传感器电路的工作原理
2.了解温度控制的基本原理
3.掌握一线总线接口的使用
利用DS18B20将温度在数码显示管显示出,以实现温度的测量和温度的控制。
TEMPER_LEQU29H;
用于保存读出温度的低8位
TEMPER_HEQU28H;
用于保存读出温度的高8位
FLAG1EQU38H;
是否检测到DS18B20标志位
A_BITEQU20H;
数码管个位数存放内存位置
B_BITEQU21H;
数码管十位数存放内存位置
LEDBufEQU30H
TEMPEQU55H
DINBITP1.0
CLKBITP1.1
ORG0000H
start:
SETBP1.4
MAIN:
LCALLGET_TEMPER;
调用读温度子程序
MOVA,29H
MOVC,40H;
将28H中的最低位移入C
RRCA
MOVC,41H
MOVC,42H
MOVC,43H
MOV29H,A
LCALLDisplayResult
LCALLDISPLAYLED;
调用数码管显示子程序
LCALLDELAY1
AJMPMAIN
这是DS18B20复位初始化子程序
INIT_1820:
SETBP2.0
CLRP2.0
主机发出延时537微秒的复位低脉冲
MOVR1,#3
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBP2.0;
然后拉高数据线
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:
读出转换后的温度值
GET_TEMPER:
LCALLINIT_1820;
先复位DS18B20
JBFLAG1,TSS2
RET;
判断DS1820是否存在?
若DS18B20不存在则返回
TSS2:
MOVA,#0CCH;
跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
LCALLDELAY1
准备读温度前先复位
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18200;
将读出的温度数据保存到35H/36H
写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOVR2,#8;
一共8位数据
WR1:
MOVR3,#6
DJNZR3,$
MOVP2.0,C
MOVR3,#23
DJNZR2,WR1
读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOVR4,#2;
将温度高位和低位从DS18B20中读出
MOVR1,#29H;
低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
数据一共有8位
RE01:
MOVR3,#9
RE10:
DJNZR3,RE10
MOVC,P2.0
RE20:
DJNZR3,RE20
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
DisplayLED:
-----------显示子程序---------------
movLEDBUF+5,#10H
movLEDBUF+6,#10H
movLEDBUF+7,#10H
MOVR0,#LEDBUF
MOVR1,#TEMP
MOVR2,#8
DP10:
MOVDPTR,#LEDMAP
MOVA,@R0
MOVCA,@A+DPTR
DJNZR2,DP10
MOVR0,#TEMP
MOVR1,#8
DP12:
DP13:
MOVDIN,C
DJNZR2,DP13
DJNZR1,DP12
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;
MOVA,B
MOVLEDBuf+2,A;
MOVA,LEDBuf+1
CJNEA,#4,$+3
JNCWW
SETBP1.4
WW:
CLRP1.4
D1MS:
MOVR7,#80
RET
Delay:
MOVr7,#0
DelayLoop:
DJNZr7,DelayLoop
DJNZr6,DelayLoop
DELAY1:
MOVR4,#020H
MOVR5,#080H
AA:
DJNZR5,AA
DJNZR4,AA1
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;
JZFOR;
是否到了结束码00h
CPLA;
把acc反向
MOVP1,A;
输出到p1开始正转
如果p3.4按下停止
如果p3.3按下正转
如果p3.2按下反转
CALLDELAY;
转动的速度
INCR0;
取下一个码
JMPFOR1;
继续正转
rev:
MOVR0,#05H;
反转到tab取码指针初值
rev1:
MOVA,R0
JZREV;
输出到p1开始反转
JMPREV1;
继续反转
stop1:
按p3.4的消除抖动
JNBP2.2,$;
p3.4放开否?
放开消除抖动
JMPSTOP
for2:
按p3.2的消除抖动
JNBP2.0,$;
p3.2放开否?
JMPFOR
rev2:
按p3.3的消除抖动
JNBP2.1,$;
p3.3放开否?
JMPREV
MOVR1,#150;
步进电机的转速20ms
D1:
MOVR2,#248
DJNZR2,$
DJNZR1,D1
TABLE:
db01h,02h,04h,08h;
正转表
db00;
正转结束
db01h,08h,04h,02h;
反转
反转结束
实验六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
电源地
5.0V
电源电压
3
V0
5.0V-13V
液晶显示器驱动电压