单片机实验报告信科091班.docx
《单片机实验报告信科091班.docx》由会员分享,可在线阅读,更多相关《单片机实验报告信科091班.docx(24页珍藏版)》请在冰豆网上搜索。
单片机实验报告信科091班
<<单片机原理及应用>>
实
验
报
告
姓名:
实验时间:
2012.1
实验一I/O接口P1、P2口实验
一、实验题目
1.用P1口做输出,接八只发光二极管,编写程序,使发光二极管循环点亮。
2.用P2口做输入口,接八个扭子开关,通过P1口在实验箱上LED灯上输出,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
二、实验目的
1.熟悉使用CPLD实验箱进行单片机实验的方法。
2.设计出符合实验要求的CPLD硬件电路。
3.学习单1片机仿真开发软件Keil51的使用方法。
4.学习MCS-51汇编语言编程方法。
5.学习Pl口的使用方法。
6.学习延时子程序的编写和使用。
三、有关说明
P2口为准双向口,Pl的每一位都能独立地定义为输出线或输入线,作为输入的口线,必须向锁存器相应位写入“l”,该位才能作为输入。
803l中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“l”使它再成为一个输入。
可以用第二个实验做一下试验。
先按要求做好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1作输入口,会有什么结果。
再来看一下延时程序的实现。
现常用的有两种方法:
一是用定时器中断来实现,一是用指令循环来实现。
在系统时间允许的情况下可以采用后一种方法。
根据实验系统的工作主频,计算出延时0.1s的时间常量,编制延时程序:
MOVR7,#X
(1)
DEl:
MOVR6,#Y
(2)
DE2:
DJNZR6,DE2(3)
DJNZR7,DEl(4)
上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需的时间求出X和Y值。
指令(3)
(2)(4)
(1)
所需时间需时问需时间需时间
四、连线方法
执行程序1时:
P1.0-P1.7接发光二极管Ll—L8。
执行程序2时:
P1.0-P1.7接扭子开关K1—K8;P2口通过CPLD接发光二极管Ll—L8;
单片机扩展槽及外扩槽
在主板上留有一个模拟单片机扩展槽,用于CPLD模拟单片机之用,其与CPLD的接口分别为,P0.0—P0.7(39—32),对应与P44,P45,P46,P47,P53,P54,P55,P56;P1.0—P1.7(1—8),对应与P57,P58,P60,P61,P62,P63,P64,P65;P2.0—P2.7(21—28),对应与P75,P74,P73,P71,P70,P69,P68,P67;P3.0—P3.7(10—17),对应与P83,P85,P86,P87,P88,P89,P90,P92;PSEN脚对应于P194,ALE脚对应与P79;RST脚对应于P18
其中16个数据开关与CPLD的管脚的连接情况依次为:
SW1-P94,SW2-P95,SW3-P96,SW4-P97,SW5-P99,SW6-P100,SW7-P101,SW8-P102,SW9-P103,SW10-P104,SW11-P111,SW12-P112,SW13-P113,SW14-P114,SW15-P115,SW16-P116。
同时与数据开关和CPLD相应引脚相连的还有16个LED显示管,可以作为输出使用。
在作为输出时,不论数据开关和脉冲开关为高电平还是低电平,均不影响其状态。
五、程序框图
六,程序清单
(一)程序一T01_1.ASM
ST_ADDREQU4000H
ORGST_ADDR
LJMPSTART
ORGST_ADDR+200H
START:
MOVA,#01H;高电平对应的发光二级管灭,
;先让第一个发光二级管高。
LOOP:
MOVP1,A;从P1口输出到发光二级管
MOVR1,#10;延时1秒
DEL1:
MOVR2,#200
DEL2:
MOVR3,#126
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RLA;左移一位,下一个发光二级管亮
LJMPLOOP;循环
END
(二)程序二T01_2.ASM
ST_ADDREQU4000H
PORTEQU1B08H
ORGST_ADDR
LJMPS1
ORGST_ADDR+200H
S1:
MOVP1,#0FFH
START:
MOVA,P1;从P1口读入开关状态
MOVDPTR,#PORT
MOVX@DPTR,A;从74LS273输出到发光二级管显示
LJMPSTART;循环
END
七,实验步骤
1,用MAX+plusII软件打开CPLD文件下以.gdf结尾的文件,按照实验要求定义输入输出接口,然后编译,编译成功后,再选择引脚分配,进入视图编辑画面后,按照先前定义的输入输出接口,将单片机的引脚接到CPLD上。
2,打开CPLD2003软件,先进行串口设置及器件,串口测试通过以后,选择上一步生成的.sof文件,将其下载到CPLD中并显示正确的结果
3,打开keil软件,创建相关工程,输入汇编程序,并编译成功。
接下来进入联
机仿真阶段。
4,步骤一:
生成Project和Compile用户程序。
如何生成一个PROJECT和编辑用户程序,请参考uVision的详细资料。
选择一个SSTMCU(如SST89C54,SST89C58,SST89x554RC,SST89x564RD)做目标器件。
步骤二:
配置
从KEIL用户界面选择“OptionsforTarget“Target1””,
在“OptionsforTargettarget1”窗口Debug栏中,选择“UseKeilMonitor-51Driver”,注意当每次RESET目标板时用户的代码区会被擦除,如果用户程序需要在开始时下装到目标板,要勾上“LoadApplicationatStartup”。
点击Setting项,弹出TargetSetup窗口进行配置,选择目标板与PC通讯的串行接口
(COM1-COM4)和波特率,如果需要显示存储器的实时窗口,不要选择CacheOptions。
注意如果选择了SerialInterrupt去StopPorgramExecution,SoftICE将修改在位置c:
0023h的中断向量3个BYTE,请确保用户程序没有占用这些地址。
以上的设定可以在程序调试过程再次修改。
步骤三:
开始调试
从DEBUG菜单点击Start/StopDebugSession开始调试过程。
八、实验小结
基本掌握了CPLD试验箱进行单片机实验的方法,可以设计简单的CPLD实验电路,基本掌握了Keil、汇编语言编程及P1口的使用方法。
实验二简单I/0口扩展实验1
(行列式键盘扫描程序设计和LED动态显示程序实验)
一、实验题目
1、以一个单片机的8位口,连接实验箱的4X4阵列式键盘,编制键盘扫描程序和散转程
序,实现键盘扫描并散转。
2、利用两个8位的I/O接口,设计一个6位的动态7段LED显示器。
二、实验目的
1.学习在单片机系统中扩展简单I/0接口的方法。
2.学习键盘扫描程序、散转程序的设计方法。
3.学习动态显示扫描程序的编写方法。
三、实验说明
要完成本实验,首先必须了解键盘扫描程序和散转程序的设计方法以及LED动态显示程序的设计方法。
并通过外围电路来显示相关状态,验证程序执行的正确性。
四、接线方法
74LS273(U4)的输出,011-018接发光二级管L1-L8,CS2端接I/0译码的08-0F,另一片74LS273(U5)的021-024接发光二级管L9-L12,CS3端接I/0译码的10-17端。
此时U4的I/0地址为1B08H,U5为1B10H。
五、程序清单T03.ASM
ST_ADDREQU4000H
ORGST_ADDR
LJMPSTART
ORGST_ADDR+200H
START:
MOVP2,*1BH
MOVR0,#08H;1B08H,1B10H分别为两片74LS273;的端口地址
MOVR1,#10H
MOVA,#24H;四个红灯亮,四个黄灯、绿灯灭
MOVX@R0,A
MOVA,#09H
MOVX@R1,A
ACALLDE6s;延时6秒
LLL:
MOVA,#0CH;东、西路口绿灯亮,南、北路口红灯亮
MOVX@R0,A
MOVA,#03H
MOVX@R1,A
ACALLDE12s;延时12秒
MOVA,#04H;东、西路口绿灯灭,南、北路口红灯亮
MOVX@R0,A
MOVA,#01H
MOVX@R1,A
MOVR2,#08H;R2用于计闪烁次数八次
TTT:
MOVA,#14H;东、西路口黄灯亮,南、北路口红灯亮
MOVX@R0,A
MOVA,#05H
MOVX@R1,A
ACALLDE02s;延时0.2秒
MOVA,#04H;东、西路口黄灯灭,南、北路口红灯亮
MOVX@R0,A
MOVA,#01H
MOVX@R1,A
ACALLDE02s
DJNZR2,TTT;返回TTT,使东、西路口黄灯闪烁八次
MOVA,#24H;四个红灯全亮,四个黄灯、绿灯全都灭
MOVX@R0,A
MOVA,#09H
MOVX@R1,A
ACALLDE02s;延时0.2秒
MOVA,#61H;东、西路口红灯亮,南、北路口绿灯亮
MOVX@R0,A
MOVA,#08H
MOVX@R1,A
ACALLDE12s;延时12秒
MOVA,@20H;东、西路口红灯亮,南、北路口绿灯灭
MOVX@R0,A
MOVA,#08H
MOVX@R1,A
MOVR2,#08H;置计数值为8
GGG:
MOVA,#0A2H;东、南路口红灯亮,南、北路口黄灯灭
MOVX@R0,A
ACALLDE02s;延时0.2秒
MOVA,#20H;东、西路口红灯亮,南、北路口黄灯灭
MOVX@R0,A
ACALLDE02s
DJNZR2,GGG;返回GGG,使南、北路口黄灯闪烁八次
MOVA,@24H;绿灯、黄灯全灭,红灯全亮
MOVX@R0,A
MOVA,#09H
MOVX@R1,A
ACALLDE02s;延时0.2秒
JMPLLL;转LLL循环
DE12s:
MOVR5,@120;延时0.1
LJMPDE1
DE6s:
MOVR5,#60
LJMPDE1
DE02s:
MOVR5,#02H
DE1:
MOVR6,#200
DE2:
MOVR7,3126
DE3:
DJNZR7,DE3
DJNZR6,DE2
DJNZR5,DE1
RET
END
六、实验步骤
1、用MAX+plusII软件打开CPLD文件下以.gdf结尾的文件,按照实验要求定义输入输出接口,然后编译,编译成功后,再选择引脚分配,进入视图编辑画面后,按照先前定义的输入输出接口,将单片机的引脚接到CPLD上。
2、打开CPLD2003软件,先进行串口设置及器件,串口测试通过以后,选择上一步生成的.sof文件,将其下载到CPLD中并显示正确的结果
3、打开keil软件,创建相关工程,输入汇编程序,并编译成功。
接下来进入联
机仿真阶段。
4、步骤一:
生成Project和Compile用户程序。
如何生成一个PROJECT和编辑用户程序,请参考uVision的详细资料。
选择一个SSTMCU(如SST89C54,SST89C58,SST89x554RC,SST89x564RD)做目标器件。
步骤二:
配置
从KEIL用户界面选择“OptionsforTarget“Target1””,
在“OptionsforTargettarget1”窗口Debug栏中,选择“UseKeilMonitor-51Driver”,注意当每次RESET目标板时用户的代码区会被擦除,如果用户程序需要在开始时下装到目标板,要勾上“LoadApplicationatStartup”。
点击Setting项,弹出TargetSetup窗口进行配置,选择目标板与PC通讯的串行接口
(COM1-COM4)和波特率,如果需要显示存储器的实时窗口,不要选择CacheOptions。
注意如果选择了SerialInterrupt去StopPorgramExecution,SoftICE将修改在位置c:
0023h的中断向量3个BYTE,请确保用户程序没有占用这些地址。
以上的设定可以在程序调试过程再次修改。
步骤三:
开始调试
从DEBUG菜单点击Start/StopDebugSession开始调试过程。
七、实验小结
基本掌握了扩展简单I/0接口的方法、键盘扫描程序及散转程序的设计方法及动态显示扫描程序的编写方法。
实验三简单I/0口扩展实验2
(双字节无符号整数算术运算程序设计)
一、实验题目
设计简单的双字节无符号整数的加、减、乘、除运算程序。
借助实验二的结果,制作一个简单的具有加减乘除运算的计算器。
二、实验目的
1.学习键盘扫描程序、散转程序的设计方法。
2.学习动态显示扫描程序的编写方法。
3.学习双字节无符号整数运算程序的设计方法。
三、实验说明
要完成本实验,首先必须了解键盘扫描程序和散转程序的设计方法以及LED动态显示程序的设计方法,了解汇编语言的双字节无符号算术运算程序的设计方法,学会程序的组织方法。
并通过外围电路的合理设计,验证设计的正确性。
四、连线方法
1、74LS244(U6)的11-18接开关的K1-K8,CS4端接18-1F。
2、74LS273(U4)的011-018接发光二级管L1-L8,CS2端接08-0F。
五、程序清单T04.ASM
ST_ADDREQU4000H
ORGST_ADDR
LJMPSTAR
ORGST_ADDR+200H
STAR:
MOVP2,#1BH
MOVR0,#18H;1B18H为74LS244口地址
MOVR1,#)8H;1B08H为74LS273口地址
LOOP:
MOVXA,@R0;通过74LS244输入开关状态
MOVX@R1,A;通过74LS273把开关状态输出到;发光二级管显示
MOVR7,#10H;延时
DEL0:
MOVR6,#0FFH
DEL1:
DJNZR6,DEL1
DJNZR7,DEL0
LJMPLOPP;循环
END
六、实验步骤
1、用MAX+plusII软件打开CPLD文件下以.gdf结尾的文件,按照实验要求定义输入输出接口,然后编译,编译成功后,再选择引脚分配,进入视图编辑画面后,按照先前定义的输入输出接口,将单片机的引脚接到CPLD上。
2、打开CPLD2003软件,先进行串口设置及器件,串口测试通过以后,选择上一步生成的.sof文件,将其下载到CPLD中并显示正确的结果
3、打开keil软件,创建相关工程,输入汇编程序,并编译成功。
接下来进入联
机仿真阶段。
4、步骤一:
生成Project和Compile用户程序。
如何生成一个PROJECT和编辑用户程序,请参考uVision的详细资料。
选择一个SSTMCU(如SST89C54,SST89C58,SST89x554RC,SST89x564RD)做目标器件。
步骤二:
配置
从KEIL用户界面选择“OptionsforTarget“Target1””,
在“OptionsforTargettarget1”窗口Debug栏中,选择“UseKeilMonitor-51Driver”,注意当每次RESET目标板时用户的代码区会被擦除,如果用户程序需要在开始时下装到目标板,要勾上“LoadApplicationatStartup”。
点击Setting项,弹出TargetSetup窗口进行配置,选择目标板与PC通讯的串行接口
(COM1-COM4)和波特率,如果需要显示存储器的实时窗口,不要选择CacheOptions。
注意如果选择了SerialInterrupt去StopPorgramExecution,SoftICE将修改在位置c:
0023h的中断向量3个BYTE,请确保用户程序没有占用这些地址。
以上的设定可以在程序调试过程再次修改。
步骤三:
开始调试
从DEBUG菜单点击Start/StopDebugSession开始调试过程。
7、实验小结
加深了扩展简单I/0接口的方法、键盘扫描程序及散转程序的设计方法及动态显示扫描程序的编写方法。
实验四定时器实验
(外部中断及定时器中断实验)
一、实验题目
设计简单的一分钟定时器。
要求:
由单片机的外部中断0端连接一个按键,作为本定时器的启动按钮,按钮工作于中断方式。
由外部中断0的中断处理程序启动定时器0和定时器1(系统时钟以22MHz计算)。
定时器0工作于定时器的扫描方式,用于产生1ms的定时和定时器1的计数脉冲(由P3.4输出);定时器1工作于计数器的中断方式(计数脉冲由P3.5输入),用于产生1分钟的定时。
在实验箱上表示出定时工作开始和定时时间到达即可。
二、实验目的
1.学习外部中断程序的设计方法。
2.学习定时器中断程序的编写方法。
3.学习定时器程序的设计方法。
三、实验说明
要完成本实验,首先必须了解外部中断、定时器/计数器的初始化、定时器/计数器中断程序的设计方法,学会程序的组织方法。
并通过外围电路的合理设计,验证设计的正确性。
四、实验原理
1.定时常数的确定
定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/2。
本实验中时钟频率为6.1441,tHZ,现要采用中断方法来实现1秒延时,要在定时器l中设置一个时间常数,使其每隔0.1s产生一次中断,CPU响应中断后将RO中计数值减一,令(R0)=0AH,即可实现ls延时。
时间常数可按下法确定:
机器周期=12÷晶振频率=l2÷6.144*l06=l.953l*l0-6s
需设初值为X,则(216-X)*1.953l*l0-6=0.l
216=X=51200X=65536-51200=14336
化为十六进制:
X=3800H,故初始值为THl=38H,TLl=00H
2、初始化程序
包括定时器初始化和中断系统初始化,主要是对1P、1E、TCON、TMOD的相应位进行正确的设置,并将时问常数送入定时器中。
由于只有定时器中断,IP便不必设置。
注意一点,定时器l初始化耐建议用下述指令:
ANLTHOD,#OFH
0RLTMOD,#l0H
而不要用如下指令:
MOVTMOD,#10H
否则定时器0被屏蔽,可能会影响串行口波特率,使程序不能执行。
3、设计中断服务程序和主程序
中断服务程序除了要完成计数减一工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则用来控制发光二极管按要求顺序亮灭。
五、实验电路及连线
P1.0-P1.7分别接发光二级管L1-L8即可。
六、程序清单T06.ASM
ST_ADDREQU4000H
ORGST_ADDR
LJMPSTART
ORGST_ADDR+1BH;定时器/计数器1中断程序入口地址
JMPIT11
ORGST_ADDR+200H
START:
MOVA,#05H;第一秒时L1、L2亮,故A中置05H
MOVR1,#02;02是偏移量,即从基址寄存器到表首距离
MOVR0,#0AH;OA是计数值
MOVTMOD,#0FH;计数器置为方式1
MOVTMOD,#10H
MOVTL1,#00H;装入时间常数
MOVTH1,#38H
ORL1E,#88H;CPU中断开放标志位和定时器1溢
出中断允许位均置位
SETBTR1;开始计数
LOOP1:
CJNER0,300,DISP
MOVR0,#0AH;R0计数计完一个周期,重置初值
INCR1;表地址偏移量加1
CJNER1,#0AH,LOOP2
MOVR1,#02;如到表尾后一单元,则重置偏移量初值,
重新开始一个周期
LOOP2:
MOVA,R1;从表中显示码入累加器
MOVCA,@A+PC
LJMPDISP
DB05H
DB0AH
DB50H
DBOAOH
DB55H
DB0AAH
DB0FFH
DB00H
DISP:
MOVP1,A;累加器中显示码从P1口送往发光二级管显示
JMPLOOP1
IT11:
CLRTR1;停止计数
DECR0;计数值减一
MOVTL1,#00H;重置时间常数初值
MOVTH1,#38H
SETBTR1;开始计数
RET1;中断返回
END
七,实验步骤
1、用MAX+plusII软件打开CPLD文件下以.gdf结尾的文件,按照实验要求定义输入输出接口,然后编译,编译成功后,再选择引脚分配,进入视图编辑画面后,按照先前定义的输入输出接口,将单片机的引脚接到CPLD上。
2、打开CPLD2003软件,先进行串口设置及器件,串口测试通过以后,选择上一步生成的.sof文件,将其下载到CPLD中并显示正确的结果
3、打开keil软件,创建相关工程,输入汇编程序,并编译成功。
接下来进入联
机仿真阶段。
4、步骤一:
生成Project和Compile用户程序。
如何生成一个PROJECT和编辑用户程序,请参考uVision的详细资料。
选择一个SSTMCU(如SST89C54,SST89C58,SST89x554RC,SST89x564RD)做目标器件。
步骤二:
配置
从KEIL用户界面选择“OptionsforTarget“Target1””,
在“OptionsforTargettarget1”窗口Debug栏中,选择“UseKeilMonitor-51Driver”,注意当每次RESET目标板时用户的代码区会被擦除,如果用户程序需要在开始时下装到目标板,要勾上“LoadApplicationatStartup”。
点击Setting项,弹出TargetSetup窗口进行配置,选择目标板与PC通讯的串行接口
(COM1-COM4)和波特率,如果需要显示存储器的实时窗口,不要选择CacheOptions。
注