单片机实验.docx
《单片机实验.docx》由会员分享,可在线阅读,更多相关《单片机实验.docx(27页珍藏版)》请在冰点文库上搜索。
单片机实验
第二部分硬件实验
实验一扩展存储器读写实验
一.实验要求
编制简单程序,对实验板上提供的外部存贮器(62256)进行读写操作。
二.实验目的
1.学习片外存储器扩展方法。
2.学习数据存储器不同的读写方法。
三.实验电路及连线
将P1.0接至L1。
CS256连GND孔。
四.实验说明
1.单片机系统中,对片外存贮器的读写操作是最基本的操作。
用户藉此来熟悉MCS51单片机编程的基本规则、基本指令的使用和使用本仿真实验系统调试程序的方法。
用户编程可以参考示例程序和流程框图。
本示例程序中对片外存贮器中一固定地址单元进行读写操作,并比较读写结果是否一致。
不一致则说明读写操作不可靠或该存储器单元不可靠,程序转入出错处理代码段(本示例程序通过熄灭一个发光二极管来表示出错)。
读写数据的选用,本例采用的是55(0101,0101)与AA(1010,1010)。
一般采用这两个数据的读写操作就可查出数据总线的短路、断路等,在实际调试用户电路时非常有效。
用户调试该程序时,可以灵活使用单步、断点和变量观察等方法,来观察程序执行的流程和各中间变量的值。
2.在I状态下执行MEM1程序,对实验机数据进行读写,若L1灯亮说明RAM读写正常。
3.也可进入LCA51的调试工具菜单中的对话窗口,用监控命令方式读写RAM,在I状态执行SX0000↓55,SPACE,屏幕上应显示55,再键入AA,SPACE,屏幕上也应显示AA,以上过程执行效果与编程执行效果完全相同。
注:
SX是实验机对外部数据空间读写命令。
4.本例中,62256片选接地时,存储器空间为0000~7FFFH。
五.实验程序框图
六.实验程序:
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
MOVDPTR,#0000H;置外部RAM读写地址
MOVA,#55H;测试的数据一
MOVB,A
MOVX@DPTR,A;写外部RAM
MOVXA,@DPTR;读外部RAM
XRLA,B;比较读回的数据
JNZERROR
MOVA,#0AAH;测试的数据二
MOVB,A
MOVX@DPTR,A
MOVXA,@DPTR
XRLA,B
JZPASS;测试通过
ERROR:
SETBP1.0;测试失败,点亮LED
SJMP$
PASS:
CPLP1.0;LED状态(亮/灭)转换
MOVR1,#00H;延时
DELAY:
MOVR2,#00H
DJNZR2,$
DJNZR1,DELAY
LJMPSTART;循环测试
END
实验五外部中断实验(急救车与交通灯)
一.实验要求
在实验四内容的基础上增加允许急救车优先通过的要求。
有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
二.实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三.实验电路及连线
PO0-PO3接DG1-DG4,PO4-P07接DR1-DR4。
CS273接8300H。
K7接P3.2。
四.实验说明
中断服务程序的关键是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状
态。
2.必须在中断程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
本例中没有涉及这种情况。
实验开始时K7应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。
五.实验程序框图
主程序框图
六.实验程序
ORG0000H
LJMPSTART
ORG0003H;INT0中断入口地址
LJMPINT0
ORG0040H
START:
MOVSP,#60H
SETBEX0;INT0中断有效
SETBIT0
SETBEA
LCALLSTATUS0;初始状态(都是红灯)
CIRCLE:
LCALLSTATUS1;南北绿灯,东西红灯
LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯
LCALLSTATUS3;南北红灯,东西绿灯
LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯
LJMPCIRCLE
INT0:
PUSHPSW;保护现场
PUSH2
PUSHACC
MOVDPTR,#8300H
MOVA,#0FH;南北,东西都亮红灯
MOVX@DPTR,A
MOVR2,#100;延时10秒
LCALLDELAY
POPACC;恢复现场
MOVX@DPTR,A
POP2
POPPSW
RETI
STATUS0:
;南北红灯,东西红灯
MOVDPTR,#8300H
MOVA,#0FH
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS1:
;南北绿灯,东西红灯
MOVDPTR,#8300H
MOVA,#5AH;南北绿灯,东西红灯
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS2:
;南北绿灯闪转黄灯,东西红灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH:
MOVA,#5FH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#5AH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH
MOVA,#0AH;南北黄灯,东西红灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS3:
;南北红灯,东西绿灯
MOVDPTR,#8300H
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS4:
;南北红灯,东西绿灯闪转黄灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH1:
MOVA,#0AFH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH1
MOVA,#05H;南北红灯,东西黄灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
NOP
RET
DELAY:
;延时子程序
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
实验六定时器实验
一.实验要求
由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接八个发光二极管。
要求编写程序模拟一时序控制装置。
开机后第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒钟L4,L6亮,第四秒钟L5,L7亮,第五秒L0,L2,L4,L6亮,第六秒钟L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L0,L2亮,然后L1,L3亮......一直循环下去。
二.实验目的
1.学习8031内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
三.实验电路及连线
P1.0--P1.7接L0--L7。
四.实验说明
1.关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
2.内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:
机器周期=12÷11.0592MHz=1.0857μS
(65536-定时常数)*1.0857μS=50mS
定时常数=4C00H
3.定时器的有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0~3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行
或停止等。
4.在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
五.实验程序框图
六.实验程序
ORG0000H
AJMPSTART
ORG001BH;T1中断入口地址
AJMPINT_T1
ORG0100H
START:
MOVSP,#60H
MOVTMOD,#10H;置T1为方式1
MOVTL1,#00H;延时50mS的时间常数
MOVTH1,#4BH
MOVR0,#00H
MOVR1,#20
SETBTR1
SETBET1
SETBEA;开中断
SJMP$
INT_T1:
;T1中断服务子程序
PUSHACC;保护现场
PUSHPSW
PUSHDPL
PUSHDPH
CLRTR1;关中断
MOVTL1,#00H;延时50mS常数
MOVTH1,#4BH
SETBTR1;开中断
DJNZR1,EXIT
MOVR1,#20;延时一秒的常数
MOVDPTR,#DATA1;置常数表基址
MOVA,R0;置常数表偏移量
MOVCA,@A+DPTR;读常数表
MOVP1,A;送P1口显示
INCR0
ANL00,#07H
EXIT:
POPDPH;恢复现场
POPDPL
POPPSW
POPACC
RETI
;LED显示常数表
DATA1:
DB0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH
END
实验八8255扫描键盘、显示实验
一.实验要求
利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的七段数码管上。
8255PA口做键盘输入线,PB口作扫描线。
二.实验目的
1.掌握8255编程方法。
2.掌握扫描键盘和显示的编程方法。
三.实验电路及连线
CS8255接8500H,则命令字地址为8506H,PA口地址为8500H,PB口地址为8502H,PC口地址为8504H。
CS8279已固定接至8700H,则8279的状态口地址为8701H;8279的数据口地址为8700H;
29模块中的十个短路套都套在8255侧。
四.实验说明
在PA口与PB口组成的64点阵列上,把按键接在不同的点上,将得到不同的键码,本实验采用8×2的阵列,共可按16个键。
显示部分由8279控制,由7407驱动8位数码管显示。
五.实验程序框图
`
主程序框图读键显示部分框图
六.实验程序
D8255EQU8506H;8255状态/数据口地址
D8255AEQU8500H;8255PA口地址
D8255BEQU8502H;8255PB口地址
Z8279EQU8701H;8279状态口地址
D8279EQU8700H;8279数据口地址
DISPTREQU08H;当前显示位置
KEYVALEQU09H;读到的键码
ORG0000H
LJMPSTART
ORG0040H
START:
MOVSP,#60H
LCALLDELAY;延时
MOVDISPTR,#30H;显示缓冲区头指针
MOVDPTR,#D8255
MOVA,#90H;置8255状态
;方式0,PB,PC口输出,PA口输入
MOVX@DPTR,A
MOVDPTR,#Z8279;置8279命令字
MOVA,#0D3H
MOVX@DPTR,A;清LED显示
MOVA,#00H
MOVX@DPTR,A
MOVA,#38H
MOVX@DPTR,A
MOVA,#0D1H
KB_DIS:
LCALLRD_KB;读键盘
MOVA,#0FFH
CJNEA,KEYVAL,DISBUF;判读到键
SJMPKB_DIS;没有则继续读键
DISBUF:
LCALLDISP;把键移入显存
LCALLDELAY;延时消抖
LCALLDELAY
SJMPKB_DIS
DISP:
;显存依次前移
MOVR1,#31H;在最后加入新键值
MOVE:
MOVA,@R1
DECR1
MOV@R1,A
INCR1
INCR1
CJNER1,#38H,MOVE
MOV37H,KEYVAL
MOVKEYVAL,#0FFH
MOVDPTR,#Z8279
MOVA,#90H
MOVX@DPTR,A
MOVR0,#08H
MOVR1,#30H
MOVDPTR,#D8279
LP:
MOVA,@R1
MOVX@DPTR,A
INCR1
DJNZR0,LP
RET
RD_KB:
;键盘扫描
MOVA,#02H;扫描第一行
MOVDPTR,#D8255B
MOVX@DPTR,A
MOVDPTR,#D8255A
MOVXA,@DPTR
MOVR1,#00H
CJNEA,#0FFH,KEYCAL;判键是否按下
MOVA,#01H;扫描第二行
MOVDPTR,#D8255B
MOVX@DPTR,A
MOVDPTR,#D8255A
MOVXA,@DPTR
MOVR1,#08H
CJNEA,#0FFH,KEYCAL
SJMPNOKEY;无键按下
KEYCAL:
;计算键码
MOVR0,#08H
SHIFT:
RRCA
JNCCALC
INCR1
DJNZR0,SHIFT
CALC:
;换算显示码
MOVDPTR,#DL_DAT
MOVA,R1
MOVCA,@A+DPTR
MOVKEYVAL,A
RET
NOKEY:
MOVKEYVAL,#0FFH;返回无键标志
RET
DELAY:
MOVR0,#0H;延时子程序
DELAY1:
MOVR1,#0H
DJNZR1,$
DJNZR0,DELAY1
RET
DL_DAT:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;0,1,2,3,4,5,6,7
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;8,9,A,B,C,D,E,F
END
实验十A/D转换实验
一.实验要求
利用实验板上的ADC0809做A/D转换器,利用实验板上的电位器W1提供模拟量输入。
编制程序,将模拟量转换成二进制数字量,用发光二极管显示。
二.实验目的
1.掌握A/D转换与单片机的接口方法。
2.了解A/D芯片ADC0809转换性能及编程。
3.通过实验了解单片机如何进行数据采集。
三.实验电路及连线
CS0809接8000H。
19模块电位器中心抽头(即0~5v孔)接至ADC0809的IN0(通道0)。
EOC连P3.2(INT0)。
将单片机的P1.0~P1.7接至八位发光二极管L0--L7。
四.实验说明
ADC0809是八位逐次逼近法A/D转换器,每采集一次一般需100us。
中断方式下,A/D转换结束后会自动产生EOC信号,经一级74LS14反相后与8031的INT0相接。
本示例程序采取了中断处理来正确读取A/D转换的结果。
用户也可以用延时来保证A/D转换完成。
读取结果由P1口送至八位发光二极管显示。
五.实验程序框图
主程序框图
六.实验程序
A_DPORTEQU8000H;0809通道0地址
ORG0000H
LJMPSTART
ORG0003H
LJMPINT_0
ORG0040H
START:
MOVSP,#60H
MOVR7,#0FFH;初始化
SETBIT0
SETBEA
SETBEX0;INT0允许
A_D:
MOVDPTR,#A_DPORT
MOVX@DPTR,A;启动A_D
CJNER7,#00H,$;等待A_D转换结束
CPLA
MOVP1,A;数据输出
MOVR7,#0FFH;清读数标志
SJMPA_D
INT_0:
MOVXA,@DPTR;读A_D数据
MOVR7,#00H;置读数标志
RETI
END
实验十三串并转换实验
一.实验要求
利用8031串行口,和并行输出串行移位寄存器74LS164,扩展一位数码显示在数码显示器上循环显示0-9这10个数字。
二.实验目的
1.掌握8031串行口方式0工作方式及编程方法。
2.掌握利用串行口扩展I/O通道的方法。
三.实验电路及连线
RXD接DATAIN,TXD接DCLK。
四.实验说明
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特率固定为晶振频率1/12。
由软件置位串行控制寄存器(SCON)的REN后才能启动串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。
待8位数据输完后,硬件将SCON寄存器的TI位置1,TI必须由软件清零。
五.实验程序框图
六.实验程序:
TIMEREQU01H
ORG0000H
AJMPSTART
ORG000BH;T0中断程序入口地址
AJMPINT_T0
ORG0040H
START:
MOVSP,#60H
MOVTMOD,#01H;T0方式1
MOVTL0,#00H;延时50mS的常数
MOVTH0,#4BH
MOVR0,#0H
MOVTIMER,#20
MOVSCON,#00H;置串口工作方式0
CLRTI
CLRRI
SETBTR0;开中断
SETBET0
SETBEA
SJMP$
INT_T0:
;T0中断子程序
PUSHACC;保护现场
PUSHPSW
CLREA;关中断
CLRTR0
MOVTL0,#00H;延时50mS的常数
MOVTH0,#4BH
SETBTR0
DJNZTIMER,EXIT
MOVTIMER,#20;延时一秒的常数
MOVDPTR,#DATA1;置表格基址
MOVA,R0;置表格偏移量
MOVCA,@A+DPTR;读表格数据
CLRTI
MOVSBUF,A;串行发送数据
INCR0
CJNER0,#0AH,EXIT;判断是否到表尾
MOVR0,#00H;调整表格偏移量
EXIT:
SETBEA;开中断
POPPSW
POPACC;恢复现场
RETI
;数码管显示常数表
DATA1:
DB03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H
;0123456789
END