实验一、查表程序(MOVC A,@A+DPTR)

合集下载

实验一、查表程序(MOVC A,@A+DPTR)

实验一、查表程序(MOVC  A,@A+DPTR)

实验名称:一、查表程序日期:2011.4.24得分:同组人:(不填)指导教师:马惠兰一、实验目的1.熟悉Keil uvision3单片机仿真软件的使用方法。

2.熟练掌握单片机实验操作步骤。

3.熟练掌握用MOVC A , @A+DPTR和MOVC A , @A+PC进行查表的程序设计方法和编程技巧。

4.掌握Keil uvision3对寄存器和SFR赋值和查看数据的命令和方法。

二、实验设备PC机一台三、实验内容根据累加器A中的自变量,查表求1~20的平方数,平方高位数存放在寄存器R6中,平方低位数存放在寄存器R7中。

四、实验原理本次实验采用查表指令MOVC A , @A+DPTR实现上述字数据查表。

因为最大的自变量20的平方数是400,为了查表后验证方便,自变量1~20对应的平方数用伪指令DW定义,并且定义为压缩BCD码。

查表指令MOVC A , @A+DPTR只能进行字节查表,要查找一个字数据,必须进行两次查表。

利用指令MOVC A , @A+DPTR查表,表可以存放在任何位置,查表前只需要将表的首地址用MOV指令送DPTR、累加器A中必须是要查找数据在表中的偏移地址即可,查找到的数据存放在累加器A中。

编程时,首先将表的首地址送DPTR,累加器A中的自变量减1形成要查找数据在表中的序号,序号乘2得到表内偏移地址,将该偏移地址暂存到寄存器R6中,用MOVC A , @A+DPTR指令进行第一次查表,得到该自变量的平方高8位在累加器A 中,并与R6进行交换,这样查找的平方高位数存放在寄存器R6中,累加器A中是第一次查表时的表内偏移地址;累加器A再加1,得到要查找的平方低位数在表内的偏移地址,再用MOVC A , @A+DPTR指令进行第二次查表,累加器A得到该自变量的平方低8位,送寄存器R7。

据此实验原理编写的实验源程序清单见附页。

五、实验步骤1.在F盘下为工程建立文件夹张三1;2.新建工程项目文件张三1.uv2,保存在文件夹张三1中,并为工程选择目标器件为AT89S52;3.编辑源程序,建立源文件张三1.ASM,保存在文件夹张三1中;4.将源文件张三1.ASM添加到工程项目组中;5.设置调试环境,选择调试模式为软件模拟;6.加载运行程序,根据预先设计的数据记录表格记录实验数据;7.实验数据经过实验指导教师检查正确后,实验结束。

51单片机查表指令

51单片机查表指令

51单⽚机查表指令51单⽚机查表指令51单⽚机具有两条查表指令,⽤于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A, @A + DPTR问题:在“MOVC A,@A+DPTR”和“MOVC A,@A+PC”中,分别使⽤了DPTR和PC作基址,请问这两个基址代表什么地址?使⽤中有何不同?答案:使⽤@A+DPTR基址变址寻址时,DPTR为常数且是表格的⾸地址,A为从表格⾸址到被访问字节地址的偏移量。

使⽤@A+PC基址变址寻址时,PC仍是下条指令⾸地址,⽽A则是从下条指令⾸地址到常数表格中的被访问字节的偏移量。

PC是程序计数器,DPTR是数据指针。

⽤这个MOVC A,@A+DPTR⽐较⽅便的,DPTR是16位。

范围⼴。

建议使⽤。

这两条都是查表指令,MOVC A,@A+PC,只能给累加器A赋值,所以只能查这条指令所在地址以后256字节范围内的代码或常数。

⽽MOVC A,@A+DPTR,可以给DPTR赋给任何⼀个16位的地址值,所以查表范围可达整个程序存储器64K字节空间的代码或常数。

其中前⼀条指令的⽤法,⽐较难,使⽤的时候,需要计算⼀个“偏移量”。

不了解“指令的字节数”的⼈,都不清楚应该如何计算。

做⽽论道曾在以前的⽂章中,介绍过“偏移量”的⾃动计算⽅法,可见如下链接:--------------------最佳答案:51单⽚机汇编语⾔有⼀条查表指令是:MOVC A, @A + DPTR它不是单独使⽤的,要和 DB 伪指令配套使⽤。

例如:若累加器A中有⼀个0~9的数,请⽤查表法求出该数的平⽅值,设平⽅表表头地址为1000H。

程序如下:;-------------------------------------MOV DPTR, #1000HMOVC A, @A + DPTR……ORG 1000HDB 0, 1, 4, 9, 16, 25......;-------------------------------------DB 伪指令从 ROM 1000H 开始,顺序存放了⼀系列的“平⽅”数据。

实验程序

实验程序

单片机实验程序软件实验一1.分别编程实现两个16位无符号数相加,结果存放在40H41H中;两个16位的无符号数相减,结果存放在30H31H中。

两个16位无符号数相加,结果存放在30H31H中ORG 0000HLJMP MAINORG 0030HMAIN :MOV R3,#01H ;输入加数高八位MOV R4,#23H ;输入加数低八位MOV R5,#45H ;输入被加数高八位MOV R6,#67H ;输入被加数低八位MOV A,R4 ;将R4存入寄存器AADD A,R6 ;A与R6相加,结果存入AMOV 31H,A ;将低八位的和数存入31HMOV A,R3 ;将R3存入寄存器AADDC A,R5 ;A与R5相加,结果存入AMOV 30H,A ;将高八位的和数存入30HSJMP $END; 两个16位的无符号数相减,结果存放在30H31H中。

ORG 0000HLJMP MAINORG 0030HMAIN :MOV R3,#12H ;输入减数高八位MOV R4,#34H ;输入减数低八位MOV R5,#56H ;输入被减数高八位MOV R6,#78H ;输入被减数低八位MOV A,R4 ;将R4存入寄存器ACLR C ;C位清"0"SUBB A,R6 ;A与R6相减,结果存入AMOV 31H,A ;将低八位的差数存入31HMOV A,R3 ;将R3存入寄存器ASUBB A,R5 ;A与R5相减,结果存入AMOV 30H,A ;将高八位的差数存入30HSJMP $END2、编程实现X (X ≥40)Y= 2X (20<X<40)0(X≤20);实现X>=40时,Y=X;20<X<40时,Y=2X;X<20时,Y=0 X的值存放于R2中,Y的值存放于R3中ORG 0000HLJMP MAINORG 0030HMAIN:CMP40: CJNE R2,#40,NEXT0 ;X与40比较,结果由CY读出NEXT0: JNC BIGGER40 ;判断C的值,C为0时则X大于或者等于40,跳到BIGGER40JC CMP20 ;判断C的值,C不为0时则X小于40,跳到CMP20 CMP20: CJNE R2,#21,NEXT1 ;X与21比较,结果由CY读出NEXT1: JNC BIGGER20 ;判断C的值,C为0时则X大于或者等于21(即X大于20),跳到BIGGER20JC SMALLER20 ;判断C的值,C不为0时则X小于20,跳到SMALLER20BIGGER40: MOV A,R2 ;X>=40时,将X的值赋给存放Y的值的R3MOV R3,ASJMP $BIGGER20: MOV A,R2 ;20<X<40时,将X的值乘以2再赋给存放Y的R3MOV B,#02MUL ABMOV R3,ASJMP $SMALLER20:CLR A ;X<20时,将0赋给YMOV R3,ASJMP $软件实验二1、找出内RAM中从30H到50H中在最小值。

微型控制技术实验报告

微型控制技术实验报告

实验报告——微控制器技术班级:自动化0703姓名:杨法松学号:090107006目录:一:实验目的及要求 (2)二:实验基本内容(TD-51单片机实验系统实现) (2)三:实验报告基本内容要求 (4)四:实验系统简介 (5)五:实验一到实验三 (7)实验四 (11)实验五 (13)实验六 (15)实验七 (16)实验八 (18)一、实验目的及要求:1、学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法;2、熟悉TD-51单片机系统板及实验系统的结构及使用;3、进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;4、学习并掌握Keil C51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;5、完成指定MCS51单片机综合设计题二、实验基本内容(TD-51单片机实验系统实现)实验一清零程序与拆字程序设计根据实验指导书之“第二章单片机原理实验”(P17~P23页)内容,熟悉实验环境及方法,完成思考题1、2(P23)基础实验项目。

实验二拼字程序与数据传送程序设计汇编语言完成实验指导书P24思考题3、4题的基础实验项目。

实验三排序程序与散转程序设计汇编语言完成实验指导书P24思考题5、6题的基础实验项目。

实验四静态存储器扩展实验基本部分:阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“4.1 静态存储器扩展实验”基本实验项目(P57)。

提高部分:阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“4.2 FLASH存储器扩展实验”实验项目(P60)。

实验五数字量输入输出实验基本部分:阅读、验证C语言程序功能。

使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目(P36),。

提高部分:(任选一题)题目一:LED交通灯控制(使用8255接口芯片)要求:使用汇编语言编程,功能为:通过开关实现LED灯工作方式即时控制,完成LED交通灯的开关控制显示功能和LED交通灯自动循环显示功能。

单片机考试试题(带答案)

单片机考试试题(带答案)

一、选择题访问片外数据存储器的寻址方式是( C )A、立即寻址B、寄存器寻址C、寄存器间接寻址D、直接寻址堆栈数据的进出原则是( B )A、先进先出B、先进后出C、后进后出D、进入不出若某存储器芯片地址线为12根,那么它的存储容量为( C )A、1KBB、2KBC、4KBD、8KB控制串行接口工作方式的寄存器是( C )A、TCONB、PCONC、SCOND、TMOD判断是否溢出时用PSW的(B )标志位,判断是否有进位时用PSW的( A )标志位。

A.CY B.OV C.P D.RS0 E.RS1当串行口向单片机的CPU发出中断请求时,若CPU允许并接受中断请求时,程序计数器PC的内容将被自动修改为( E )。

A.0003H B.000B C.0013H D.001BH E.0023H子程序的返回和中断响应过程中的中断返回都是通过改变PC的内容实现的,而PC内容的改变是(D )完成的。

A.通过POP命令B.通过MOV 指令C.通过RET或RETI指令D.自动单片机复位后,SP、PC、I/O口的内容为(C )A.SP = 07H PC = 00H P0 = P1 = P2 = P3 = FFHB.SP = 00H PC = 0000H P0 = P1 = P2 = P3 = 00HC.SP = 07H PC = 0000H P0 = P1 = P2 = P3 = FFHD.SP = 00H PC = 00H P0 = P1 = P2 = P3 = 00H堆栈指针SP的作用是( B )。

A 指示堆栈的栈底B 指示堆栈的栈顶C 指示下一条将要执行指令的地址D 指示中断返回的地址下列指令中,不影响堆栈指针的指令是( B)。

A RETB JB bit,relC LCALL addr16D RETI定时器T1的中断入口地址是( C ),从该地址开始一般可(F )。

A 0003HB 000BHC 001BHD 0013HE 连续存放中断服务程序F 存放转移指令定时器T0的溢出标志TF0,在CPU响应中断后( B )。

实验四 LED数码管显示实验报告

实验四 LED数码管显示实验报告

实验名称 LED数码管显示实验指导教师曹丹华专业班级光电1202班姓名陈敬人学号联系电话一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。

实验内容:1.基础部分:利用C8051F310单片机控制数码管显示器。

利用末位数码管循环显示数字0-F,显示切换频率为1Hz。

2.提高部分:在数码管上显示0→199计数,计数间隔为0.5秒。

二、设计思路1.基础部分C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达1.027s,可以实现1s定时要求。

定时采用软件查询工作方式,利用JNB TF0, HERE实现。

置P0.6和P0.7端口为0,位选信号选定末位数码管。

通过MOVC A, @A+DPTR指令,利用顺序查表法取出显示段码数据。

寄存器R0自增1,并赋给A以取出下一个显示段码数据。

为减短代码长度,利用CJNE指令实现循环结构。

当寄存器R0增至0FH后,跳转至开头,重新开始下一轮显示。

2.提高部分定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。

三、资源分配1.基础部分P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据R0:存放显示数据DPTR:指向段码数据表首 2.提高部分P0.6:位选信号端口P0.7:位选信号端口R0:存放个位显示数据 R5:存放十位显示数据 R6:存放百位显示数据 P1:输出段码数据DPTR: 指向段码数据表首四、流程图1.基础部分2.提高部分五、源代码(含文件头说明、语句行注释)1.基础部分;******************基础部分源代码***************************;Filename: test.asm;Decription: 末位数码管循环显示数字0-F,显示切换频率为1Hz。

单片机课程设计60秒倒计时

单片机课程设计60秒倒计时

单片机课程设计60秒倒计时前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。

现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。

单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。

但是,单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于:单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。

从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件(编程序)方法实现了。

这种以软件取代硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。

微控制技术是一种全新的概念,是对传统控制技术的一次革命。

随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。

近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。

并采用电子秤原理可根据输入单价准确的计算出物体的金额。

本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的四位LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

第一章方案论证1.1课程设计的目的和要求1.目的课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。

进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不可少的,是非常必要的。

单片机原理及接口技术期末考试试题及答案

单片机原理及接口技术期末考试试题及答案

《单片机原理及接口技术》试卷一。

单项选择题(每题1分,共20分)1。

DPTR为()A。

程序计数器 B.累加器 C。

数据指针寄存器 D。

程序状态字寄存2.PSW的Cy位为()A。

辅助进位标志 B.进位标志 C。

溢出标志位 D。

奇偶标志位3.MCS-51单片机片内ROM容量为( )A。

4KB B。

8KB C.128B D.256B4.MCS-51单片机片要用传送指令访问片外数据存储器,它的指令操作码助记符是以下哪个?()A。

MUL B.MOVX C.MOVC D.MOV5。

direct表示()A.8位立即数B.16位立即数 C。

8位直接地址 D。

16位地址6。

堆栈指针SP是一个()位寄存器A.8B.12C.13D.167.定时器/计数器工作方式选择中,当M1M0=11时,其工作方式为( )A。

方式0 B。

方式1 C。

方式2 D。

方式38.定时器/计数器工作方式0为()A.13位定时/计数方式B.16位定时/计数方式C。

8位可自动装入计数初值方式 D。

2个8位方式9。

MCS-51的最小时序定时单位是()A.节拍 B。

状态 C.机器周期 D。

指令周期10。

#data表示( )A.8位直接地址 B。

16位地址 C.8位立即数 D。

16位立即数11。

主频为12MHz的单片机它的机器周期为( )A。

1/12微秒 B.0。

5微秒 C。

1微秒 D.2微秒12。

MCS-51单片机在同一优先级的中断源同时申请中断时,CPU首先响应( )。

A.外部中断0B.外部中断1C.定时器0中断 D。

定时器1中断13。

MOVC A ,@A+PC指令对于源操作数的寻址方式是( )A.寄存器间接寻址B.寄存器寻址C.立即寻址 D。

变地寻址14. 为( )A.复位信号输入端B.地址锁存允许信号输出端C。

程序存储允许输出端 D。

程序存储器地址允许输入端15。

MCS-51单片机的一个机器周期由()个振荡脉冲组成。

A。

2 B.4 C。

6 D.1216。

单片机实验3 数码管控制实验-动态显示

单片机实验3  数码管控制实验-动态显示
/**********实验二数码管控制实验-动态显示**************/
;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F

微机原理(单片机汇编)实验报告

微机原理(单片机汇编)实验报告

软件实验报告软件实验一一、实验目的1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;3.了解将十六进制数转换成ASCII值的方法。

二、实验原理用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。

三、实验内容及步骤1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开CPU窗口,观察CPU窗口各寄存器的变化。

打开View菜单中的Memory Window,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。

在Address窗口输入X:8000H后回车,观察8000H-800FF起始的256个字节单元的内容。

2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。

打开View菜单中的Memory Window,在Address 窗口的Memory#1输入X:3000H后回车,点击运行按钮后, 在Memory#2输入X:4000H后回车,观察外部RAM3000H和4000H中的内容。

3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。

4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。

5、添加求内部RAM 30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。

四、实验结果1.步骤1的结果为8000H-80FFH的内容都为1.2.步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存储块各单元内数据对应相同。

查表程序设计

查表程序设计

查表程序设计查表程序:所谓查表法,就是对⼀些复杂的函数运算如sinx,x+x^2等,事先把其全部可能范围的函数值按⼀定的规律编成表格(实际上是ROM的内存单元)存放在计算机的ROM 中(是程序存储器)。

当⽤户程序中需要使⽤这些函数时,直接按编排好的索引寻找答案。

这种⽅法节省了运算步骤,使程序更简便,执⾏速度更快。

在控制应⽤场合或智能仪器仪表中,经常使⽤查表法。

为了实现查表功能:在51系列单⽚机中专门设置了两条查表指令:MOVC A,@A+DPTR ;常⽤,⼀般DPTR做基地址,A做游标,这样就可以访问⼀个特定的表格了MOVC A,@A+PC例⼦:已知数据0~9的平⽅,设变量x的值在累加器A中,查表后求x^2的值,并放回A中保存。

试编写程序假设:RAM的40H,41H,分别放着03H,09H,求其平⽅,放在A中注:这⾥03H表⽰⼗进制3,025H表⽰⼗进制25,本来025不等于25,但是为了简便,并且在内存中存的都是16进制,所以这⾥直接⽤16进制数值等价于⼗进制数值解:源代码⼊下:分析结果:寄存器结果:ROM中的表格: 怎末查看这个表格,很简单,在调试的时候看DPTR⾥的值,就是表格在ROM中的地址ORG 0000H LJMP INIT ORG 0100H INIT: ;初始化,向RAM 的40H,41H 单元中存放3和9⽤来查表 MOV R0,#40H MOV @R0,#03H INC R0 MOV @R0,#09H MAIN: MOV R0,#40H MOV DPTR,#TABLE ;让DPTR 指向TABLE,A 中存放表格中的带访问的下标,下标从0开始 MOV A,@R0 MOVC A,@A+DPTR ;访问TABLE[3] INC R0 MOV A,@R0 MOVC A,@A+DPTR ;访问TABLE[9]SJMP $TABLE: ;存放在ROM 中的表格,TABLE 的地址理论上可以取得ROM 中的任何地址 DB 00H,01H,04H,09H,16H DB 25H,36H,49H,64H,81H END。

单片机的查表程序

单片机的查表程序

在单片机开发过程中。

一些非线性的控制过程。

最适合做一个表格来。

时时改变系统的参数。

达到控制的目的.最常的如产生正弦的的程。

就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子。

通过建一个数组来实现段码的点亮点灭.下面就是一个LED表——-digits[0]#define SEG_a 0x01#define SEG_b 0x02#define SEG_c 0x04#define SEG_d 0x08#define SEG_e 0x10#define SEG_f 0x20#define SEG_g 0x40#define SEG_dot 0x80unsigned char digits[10]= {(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0(SEG_b|SEG_c), // 1(SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2(SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3(SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4(SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5(SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6(SEG_a|SEG_b|SEG_c), // 7(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8(SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9};C查表就太简单了temp2 = digits[ show_data[i]];一句搞定,C中还有一个switch语句也是一个很好的用查表语句C51汇编就相对麻烦一点。

不过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DPTR和MO V A,@A+PC。

习题一(1-4)

习题一(1-4)
习题一
一 填空题 二 选择题 三 判断题 四 简答题 五 计算题 六 编程题
一、填空题
1.当使用8751且/EA=1,程序存储器地址小于( 1000H ) 时,访问的是片内ROM。 2. MCS-51特殊功能寄存器只能采用( 直接 )寻址方式。 3.MCS-51有4组工作寄存器,它们的地址范围是 ( 00H~1FH )。 4. 若用传送指令访问MCS-51的程序存储器,它的操作码 助记符应为( MOVC ) 。 5. 访问MCS-51片内RAM应使用的传送指令的助记符是 ( MOV ) 。 6. 设计8031系统时,( P0、P2)口不能用作一般I/O口。
件系统的总称。
(√)
6.MCS-51的程序存储器只能用来存放程序。 ( × )
三、判断题
7.判断指令正误 CLR R0 MOV @R1,#80H MOV 20H,@R0 CPL R4 MOV 20H,21H ANL R1,#0FH MOVX A,2000H MOV A,DPTR PUSH DPTR
A. SP+1→SP
(ACC) →(SP)
B. (ACC) →(SP) SP-1→SP
C. SP-1→SP
(ACC) →(SP)
D. (ACC) →(SP) SP+1→SP
27. P1Βιβλιοθήκη 的每一位能驱动( B )A. 2个TTL低电平负载
B. 4个TTL低电平负载
C. 8个TTL低电平负载
D. 10个TTL低电平负载
17. 执行返回指令时,返回的断点是( C )
A. 调用指令的首地址
B. 调用指令的末地址
C. 调用指令下一条指令的首地址 D. 返回指令的末地址
二、选择题
18. 完成下面子程序:

单片机实验指导书

单片机实验指导书

目录实验一P1口输入、输出实验 (2)实验二继电器控制实验 (8)实验三音频控制实验 (11)实验四程序调试 (14)实验五5LED静态串行显示实验 (16)实验六6LED动态扫描显示实验 (21)实验七查询式键盘实验 (28)实验八阵列式键盘实验 (36)实验九计数器实验 (47)实验十定时器实验 (49)实验十一外部中断实验 (54)实验一P1口输入、输出实验一、实验目的1、学习P1口的使用方法2、学习延时子程序的编写和使用二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验内容及步骤实验(一):用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。

1、使用单片机最小应用系统1模块。

关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。

2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加P1_A.ASM源程序,进行编译,直到编译无误。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。

发光二极管单只从右到左轮流循环点亮。

实验(二):用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。

程序读取开关状态,并在发光二极管上显示出来。

1、用导线分别连接P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。

2、添加 P1_B.ASM源程序,编译无误后,运行程序,拨动拨断开关,观察发光二极管的亮灭情况。

向上拨为熄灭,向下拨为点亮。

四、流程图及源程序1.流程图2.源程序:(一)实验一ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHMOV R2,#8OUTPUT: MOV P1,ARL AACALL DELAYDJNZ R2,OUTPUTLJMP STARTDELAY: MOV R6,#0MOV R7,#0DELAYLOOP:;延时程序DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPRETEND(二)实验二KEYLEFT BIT P1.0 ;定义KEYRIGHT BIT P1.1LEDLEFT BIT P1.2LEDRIGHT BIT P1.3ORG 0000HLJMP STARTORG 0030HSTART: SETB KEYLEFT ;欲读先置一SETB KEYRIGHTLOOP: MOV C,KEYLEFTMOV LEDLEFT,CMOV C,KEYRIGHTMOV LEDRIGHT,CLJMP LOOPEND五、思考题(1)对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,DelayLoopDJNZ R7,DelayLoopRET如使用12MHz晶振,粗略计算此程序的执行时间为多少?六、电路图实验二继电器控制实验一、实验目的1、学习I/O端口的使用方法2、掌握继电器的控制的基本方法3、了解用弱电控制强电的方法二、实验说明现代自动控制设备中,都存在一个电子电路的互相连接问题,一方面要使电子电路的控制信号能控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路和电气电路提供良好的电气隔离,以保护电子电路和人身的安全。

单片机应用系统实验知识讲解

单片机应用系统实验知识讲解

单片机应用系统实验实验一系统认识及基本程序设计实验一、实验目的1. 学习Keil 集成开发环境的操作;2. 熟悉TD-51 系统板的结构及使用,熟悉51指令系统;3.掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解;4.学习查表程序的设计方法,进一步熟悉51 的指令系统。

二、实验设备PC机一台,TD-NMC+教学实验系统。

三、实验步骤⑴编写实验程序,经编译、链接无误后,启动调试功能;⑵观察实验现象,并分析原因;⑶按复位键退出调试状态。

四、实验内容1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数00H~FFH,保存到寄存器R4 中。

修改20H、21H、22H 单元的内容,如:00H,05H,08H;观察实验结果。

参考程序:;==============================================================; 文件名称: Asm2-1.asm; 功能描述: BCD整数转换为二进制整数(8位, 范围从00H--FFH);==============================================================ORG 0000HLJMP MAINORG 0100HMAIN: MOV R0, #20H ;BCD存放高位地址MOV R7, #03H ;BCD码0--255, 最多3位CLR AMOV R4, ALP1: MOV A, R4MOV B, #0AHMUL AB ;乘10ADD A, @R0 ;加下一位的值INC R0 ;指向下一单元MOV R4, A ;结果存入R4DJNZ R7, LP1 ;转换未结束则继续SJMP MAIN ;设置断点, 观察实验结果R4中的内容END2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在RAM 的20H、21H、22H 单元中。

单片机查表指令

单片机查表指令

单⽚机查表指令单⽚机具有两条查表指令,⽤于从 ROM 中读出预存的数据: MOVC A, @A + PC MOVC A, @A + DPTR 其中前⼀条指令的⽤法,⽐较难,使⽤的时候,需要计算⼀个“偏移量”。

不了解“指令的字节数”的⼈,都不清楚应该如何计算。

第⼀条指令 第⼀条指令中,Rn代表的是R0-R7。

第⼆条指令中,direct就是指的直接地址,⽽第三条指令中,就是我们刚才讲过的。

第四条指令是将⽴即数data送到A中。

下⾯我们通过⼀些例⼦加以说明: MOV A,R1 ;将⼯作寄存器R1中的值送⼊A,R1中的值保持不变。

MOV A,30H ;将内存30H单元中的值送⼊A,30H单元中的值保持不变。

MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送⼊A中。

如执⾏命令前R1中的值为20H,则是将20H单元中的值送 ⼊A中。

MOV A,#34H ;将⽴即数34H送⼊A中,执⾏完本条指令后,A中的值是34H。

以寄存器Rn为⽬的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送⼊⼯作寄存器,源操作数不变。

以直接地址为⽬的操作数的指令 MOV direct,A 例: MOV 20H,A MOV direct,Rn MOV 20H,R1 MOV direct1,direct2 MOV 20H,30H MOV direct,@Ri MOV 20H,@R1 MOV direct,#data MOV 20H,#34H 以间接地址为⽬的操作数的指令 MOV @Ri,A 例:MOV @R0,A MOV @Ri,direct MOV @R1,20H MOV @Ri,#data MOV @R0,#34H ⼗六位数的传递指令 MOV DPTR,#data16 8051是⼀种8位机,这是唯⼀的⼀条16位⽴即数传递指令,其功能是将⼀个16位的⽴即数送⼊DPTR中去。

单片机实验(仿真版)指导书

单片机实验(仿真版)指导书

实验一 I/O口实验1. 实验内容P1口做为输入、输出口完成汽车转向灯控制。

当开关SW2连接到P1.0上,右转弯灯以一定频率闪烁;当开关SW2连接到P1.1上,左转弯灯以一定频率闪烁;当开关在空档时,左右转弯指示灯全灭。

2. 实验目的(1)熟悉仿真软件Keil、proteus的使用。

(2)学习P1口既做为输入,又作为输出的使用方法。

(3)学习数据输入、输出程序的设计方法。

3. 实验电路4、实验要求(1)完成实验电路设计(2)完成实验程序设计(3)实现要求的实验结果实验二定时器实验1. 实验内容使用AT89C51内部定时器1,按方式1工作、即作为十六位定时器使用每0.1秒钟T1溢出中断一次。

P1口的P1.0—P1.7分别接八个发光二极管。

要求编写程序模拟一时序控制装置。

开机后第一秒种D1、D3亮,第二秒D2、D4亮,第三秒种D5、D7亮,第四秒种D6、D8亮,第五秒D1、D3、D5、D7亮,第六秒D2、D4、D6、D8亮,第七秒全亮,第八秒种全灭,以后又从头开始,D1、D3亮,然后D2、D4亮,……一直循环下去。

2. 实验目的学习AT89C51内部定时器的使用和编程方法。

进一步掌握中断处理程序的编程方法。

3.实验原理(1) 定时常数的确定定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。

本实验中时钟频率为6.144MHZ,现要采用中断方法来实现1秒延时,要在定时器1中设置一个时间常数,使其每隔100ms产生一次中断,CPU响应中断后将R0中计数值减一,令(RO)=10,即可实现1s延时。

时间常数可按下法确定:机器周期= 12÷晶振频率= 12÷6.144×106 = 1.953125*10-6 s需设初值为X,则(216 - X)*1.953125*10-6 = 0.1216-X=100000 X = 655366 – 100000/1.953125 = 14336化为十六进制:X=3800H,故初始值为TH1=38H,TL1=00H(2) 初始化程序包括定时器初始化和中断系统初始化,主要是对IP、IE、TCON、TMOD的相应为进行正确的设置,并将时间常数送入定时器中。

查表程序设计

查表程序设计

ORG
0300H
MOV A, R0
ANL
A, #0FH
;屏蔽高位
MOV
DPTR,#TAB
MOVC A,@A+DPTR
MOV
R1,A
ORG
0380H
例2 在一个单片机测温装置中,已知电压和温度之间是非线性关系。在 校正过程中,电压值取连续的10位二进制数,测量这些电压值对应温 度最多可达1024个。用这些校正数据建立一个表格。以电压为相对地 址,这样就可以根据测得的不同电压值求出被测温度。
;取出入口地址第一个字节
LNF:
LEND: TAB:
INC
DPTR
INC
DPTR
Sபைடு நூலகம்MP LOOP
(查不到处理程序)
DB
‘A’
DW
XA
DB
‘D’
DW
XD
DB
‘E’
DW
XE
DB
‘L’
DW
XL
DB
‘M’
DW
XM
DB
‘X’
;继续查
单片机原理及应用技术
入口条件为:命令字符放在A中。
程序: LTB: MOV
MOV LOOP: CLR
MOVC JZ INC CJNZ CLR MOVC MOV INC CLR MOVC MOV
DPTR, #TAB B, A A A, @A+DPTR LEND DPTR A, B, LNF A A, @A+DPTR B, A DPTR A A, @A+DPTR DPL, A
例1 将l位十六进制数转换为ASCII码。
解: 在前面的例子中,我们介绍了将ASCII码转换为十六进数的程序,本例是 其逆变换。这里采用查表的方法完成十六进制数到ASCII码的转换。

单片机实验报告

单片机实验报告

成都理工大学核技术与自动化工程学院实验报告课程名称:单片机原理实验姓名:汪缔洪学号: 201106040308专业:机械工程及自动化学期: 20013-2014(2)任课教师:刘易实验(1)名称:存储空间的认识实验人员:汪缔洪指导老师:刘易实验地点:6C703 实验时间:实验内容(实验要求、实验原理、程序设计、现象及结果):片外数据送片内相加,以及循环操作体。

程序设计包括:程序流程图、源代码以及必要的说明(对流程图和源代码的说明)一、实验要求(1)将片内RAM2000单元的数89和片外RAM2000单元数32相加,相加结果放入片内RAM30单元。

(2) 将00~ff放入片外1000~10ff单元,加1后,再将数据放入片外2000~20ff单元。

二、实验原理1、了解单片机的指令系统,数据传送指令、算术运算指令、逻辑运算指令、控制转移类指令以及位操作指令。

其中数据传送指令的内容是将数据在单片机芯片内部或外部不同的部件之间进行传送,它是五大指令中最基础、最重要,同样也是指令条数最多的一类指令。

算术运算指令,就是讲单片机芯片中的CPU进行加、减、乘除、加一、减一等不同功能的运算指令。

控制转移内指令作用在于控制程序的执行顺序。

2、能够了解循环结构程序的设计。

循环结构的程序一般包括4个组成部分,循环初始化、循环体、循环修改、循环的控制。

①循环初始化:位于循环程序的开头,设置各个单元的初始值、数据指针以及控制循环次数的计数器初值。

②循环体:循环程序的主体。

③循环修改:每执行一次循环,就要进行一次循环计数其的修改,同时还要对相关数据及数据指针进行同步修改,这样才能为下一次的循环做好准备工作。

④、循环控制:根据循环次数计数器的现行值或其他循环控制条件来进行综合判断,从而控制程序的继续运行还是结束运行。

3、访问外部RAM数据必须采用寄存器间接寻址的方式,并通过累加器A来传送(MOVX)。

三、程序设计(一)、片外数据送片内并相加1、程序流程图2、程序代码:org 0000h //定位程序的入口地址jmp mainorg 0100hmain:mov dptr,#2000h //给数据指针赋初值mov a,#32hmovx @dptr,amovx a,@dptr //将片外RAM中数据送累加器mov 40h,aclr amovc a,@a+dptr //查表指令,取出片内ROM数据add a,40h //数据相加da a //进行十进制调整mov 30h,a //将所得数据放入片内30Hsjmp $ //程序循环等待org 2000hDB 89h, 0afhEnd(二)将数据放入片外,加1后放入另一单元1、程序流程图2.程序源代码org 0000hjmp mainorg 0100hmain:;;xram 1000h~10ffh \\分配片外1000~10ffh单元mov r0,#00h \\寄存器R0赋初值mov dptr,#1000h \\数据指针赋初值mov a,#00hloop1:inc dptrinc amovx @dptr,a \\累加器数据送片外inc r0cjne r0,#00h,loop1 \\如果r0等于00,则跳转mov r3,#10hmov r4,#20hmov r5,#00hmov dpl,#00hloop2:mov dph,r3movx a,@dptr \\片外数据送累加器add a,#01 \\累加器数据加1mov dph,r4movx@dptr,a \\累加器送片外inc dplinc r5cjne r5,#00h,loop2sjmp $end四、现象及结果(一)片外数据送片内并相加查询片外数据所用指令x:0x2000,可得结果如下:这便是我们所放入片外2000单元的数32.相加后所得的数据为121.此时CY=1. (二)将数据放入片外,加1后放入另一单元首先查询我们是否将数据放入00~ff放入片外1000~10ffh单元,在地址输入框中输入:“x:0x1000”可得到如下的结果:表明我们已经将数正确的放入片外1000~10ffH地址单元。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:一、查表程序日期:2011.4.24得分:
同组人:(不填)指导教师:马惠兰
一、实验目的
1.熟悉Keil uvision3单片机仿真软件的使用方法。

2.熟练掌握单片机实验操作步骤。

3.熟练掌握用MOVC A , @A+DPTR和MOVC A , @A+PC进行查表的程序设计方
法和编程技巧。

4.掌握Keil uvision3对寄存器和SFR赋值和查看数据的命令和方法。

二、实验设备
PC机一台
三、实验内容
根据累加器A中的自变量,查表求1~20的平方数,平方高位数存放在寄存器R6中,平方低位数存放在寄存器R7中。

四、实验原理
本次实验采用查表指令MOVC A , @A+DPTR实现上述字数据查表。

因为最大的自变量20的平方数是400,为了查表后验证方便,自变量1~20对应的平方数用伪指令DW定义,并且定义为压缩BCD码。

查表指令MOVC A , @A+DPTR只能进行字节查表,要查找一个字数据,必须进行两次查表。

利用指令MOVC A , @A+DPTR查表,表可以存放在任何位置,查表前只需要将表的首地址用MOV指令送DPTR、累加器A中必须是要查找数据在表中的偏移地址即可,查找到的数据存放在累加器A中。

编程时,首先将表的首地址送DPTR,累加器A中的自变量减1形成要查找数据在表中的序号,序号乘2得到表内偏移地址,将该偏移地址暂存到寄存器R6中,用MOVC A , @A+DPTR指令进行第一次查表,得到该自变量的平方高8位在累加器A 中,并与R6进行交换,这样查找的平方高位数存放在寄存器R6中,累加器A中是第一次查表时的表内偏移地址;累加器A再加1,得到要查找的平方低位数在表内的偏移地址,再用MOVC A , @A+DPTR指令进行第二次查表,累加器A得到该自变量的平方低8位,送寄存器R7。

据此实验原理编写的实验源程序清单见附页。

五、实验步骤
1.在F盘下为工程建立文件夹张三1;
2.新建工程项目文件张三1.uv2,保存在文件夹张三1中,并为工程选择目标器件为
AT89S52;
3.编辑源程序,建立源文件张三1.ASM,保存在文件夹张三1中;
4.将源文件张三1.ASM添加到工程项目组中;
5.设置调试环境,选择调试模式为软件模拟;
6.加载运行程序,根据预先设计的数据记录表格记录实验数据;
7.实验数据经过实验指导教师检查正确后,实验结束。

实验数据记录见附页。

六、实验结果分析
记录的实验数据经过验证,全部正确,说明源程序设计正确、实验步骤正确。

七、心得体会
1.。

2.。

3.。

4.。

5.。

相关文档
最新文档