




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 存储器块操作实验一、实验目的1熟悉 KEIL 集成调试环境和汇编程序的调试方法。2掌握存储器读写方法;3了解内存块的移动方法;二、实验说明实验1指定某块存储器的起始地址和长度,要求能将其内容赋值。通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。例程2 给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动3000H起始的256个字节到4000H起始的256个字节。3、 源程序代码源程序1:ORG 0000HSTART EQU 8000HMOV DPTR, #START ;起始地址MOV R0,#0 ; 设置256 字节计数值MOV A,#1HLoop:MOVX DPTR,AINC DPTR ; 指向下一个地址DJNZ R0,Loop ; 计数值减一NOPLJMP $ENDMemory Window初始:运行后:运行结果:外部 RAM8000H80FFH的内容都为1。源程序2:ORG 0000HMOV DPTR,#3000HMOV A,#01HMOV R5,#0LOOP: MOVX DPTR,AINC DPTRDJNZ R5,LOOPMOV R0,#30HMOV R1,#00HMOV R2,#40HMOV R3,#00HMOV R7,#0LOOP1: MOV DPH,R0MOV DPL,R1MOVX A,DPTRMOV DPH,R2MOV DPL,R3MOVX DPTR,AINC R1INC R3DJNZ R7,LOOP1LJMP $ENDMemory Window初始:运行程序后:运行结果:3000H 起始的256 个字节存储块与4000H 起始的256 个字节存储块各单元内数据对应相同。4、 思考题1、如何将存储器块的内容置成某固定值(例全填充为0FFH)? 请用户修改程序,完成此操作。将源程序1修改为:ORG 0000HSTART EQU 8000HMOV DPTR, #START ;起始地址MOV R0,#0 ; 设置256 字节计数值MOV A,#0FFH; 将累加器赋值为0FFHLoop:MOVX DPTR,AINC DPTR ; 指向下一个地址DJNZ R0,Loop ; 计数值减一NOPLJMP $ENDMemory Window初始:运行程序后:2、 若源块地址和目标块地址有重叠,该如何避免? 将源块地址和目标块地址重叠部分数据压制堆栈中,当要使用重叠部分源数据时, 直接从堆栈中弹出。5、 实验内容1、试编程将片内 RAM 中的数据依次复制到片外RAM。假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。源程序:ORG 0000HMOV R0,#40HMOV DPTR,#1000HMOV R1,#10HLOOP: MOV A,R0MOVX DPTR,AINC R0INC DPTRDJNZ R1,LOOPSJMP $ENDMemory Window初始:程序运行后:程序运行结果正确。2、 两个 16 位无符号二进制数分别存放在片外RAM 首址为2000H 和2002H 单元内,将它们相加,结果存入片内RAM 30H(低8 位)、31H(高8 位)。 源程序:ORG 0000HMOV DPTR ,#2000HMOVX A,DPTRMOV R0,A MOV DPTR,#2002HMOVX A,DPTRADD A,R0MOV 30H,AMOV DPTR,#2001HMOVX A,DPTRMOV R0,AMOV DPTR,#2003HMOVX A,DPTRADDC A,R0MOV 31H,AENDMemory Window初始:运行程序后:2FAFH+067DH=362CH, 36H存于31H(高八位),2CH存于30H(低八位)。程序运行正确。实验二 数值转换实验一、实验目的1熟悉 KEIL 集成调试环境和汇编程序的调试方法。2掌握简单的数值转换算法。3基本了解数值的各种表达方法。4掌握数值的加减法运算。5掌握用查表的方法将 BCD 值转换成ASCII 值。二、实验说明 单片机系统内部运算用二进制,而输入输出常用十进制,以符合日常习惯,因此,数制转换是仪表设计中常用的程序之一。 实验1:单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一字节二进制数,转换成二十进制(BCD)码。将累加器A 的值拆为三个BCD 码,并存入RESULT 开始的三个单元,例程A 赋值#123。实验2: 主要让学生了解数值的BCD 码和ASCII 码的区别,利用查表方法快速地进行数值转换。进一步掌握数值的各种表达方式。现在我们给出一个BCD 数,将其转换成ASCII 值。如下:将累加器A 的值转换为二个ASCII 码,并存入Result 开始的二个单元,例如A 赋值#1AH。3、 源程序代码源程序1:RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ; 除以100 得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ; 余数除以10 得十位数MOV RESULT+2,B ; 余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $ENDMemory Window程序结果:运行结果:30H32H 的内容分别为01,02,03。源程序2:RESULT EQU 30HORG 0000HLJMP STARTASCIITAB:DB 0123456789ABCDEF; 定义数字对应的ASCII 表BCDTOHEX:MOV DPTR,#ASCIITABMOV B, A ; 暂存ASWAP AANL A,#0FH ; 取高四位MOVC A,A+DPTR ; 查ASCII 表MOV RESULT, AMOV A, B; 恢复AANL A,#0FH ; 取低四位MOVC A,A+DPTR ; 查ASCII 表MOV RESULT+1,ARETSTART:MOV SP,#40HMOV A,#1AHCALL BCDTOHEXLJMP $ENDMemory Window运行结果:运行结果:30H、31H 单元的结果分别为31、41。4、 思考题1、BCD 码转换成二进制数的算法是什么?例如:(91)BCD 对应的二进制数是多少? 将BCD码写成权值相加的形式,再将各位转化为二进制。 (91)BCD= =91,转化为二进制为1011011B五、实验内容1. 把 R3 中的8 位二进制整数转换为压缩BCD 码,存放在R4R5 中。 源程序: ORG0000HMOVR3,#116MOVB, #100MOVA,R3DIVABMOVR4,AMOVA,BMOVB,#10DIVABSWAP AADDA, BMOVR5, AEND运行结果:R4、R5寄存器的值分别为1H、16H。2. 设 4 位BCD 码abcd 依次存放在内部RAM 中50H53H 单元的低4 位,(高4位为0)。试编程将其转换成二进制数并存入R6R7 中。ORG 0000HLJMP DTBORG 0100HDTB: MOV R0,#50H ;R0指向千位地址MOV R1,#3 ;循环次数送R1MOV R6,#0 ;R6清零MOV A,R0 ;取千位数送AMOV R7,A ;暂存R7LOOP:MOV A,R7 MOV B,#10 MUL AB ;R7*10MOV R7,AMOV A,BXCH A,R6MOV B,#10MUL AB ;R6*10,结果为1个字节ADD A,R6MOV R6,AINC R0 ;取下一位BCD数MOV A,R7 ;与R6R7相加,和送回R6R7ADD A,R0 MOV R7,AMOV A,R6ADDC A,#0MOV R6,ADJNZ R1,LOOP ;若未完成,则LOOPENDMemory Window初始:运行程序后:运行结果:4 位BCD 码5421转换成二进制数并存入R6R7 中,其中R6=0x15(高八位),R7=0x2D(低八位)。 实验三 程序跳转表实验一、实验目的1熟悉 KEIL 集成调试环境和汇编程序的调试方法。2了解简单的函数计算。3掌握多分支结构程序的编程方法。二、实验说明多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。三、实验内容源程序:ORG 0000HMOV A,R0MOV B,#2JNB ACC.7,FUNC1CPL AADD A,#1CLR CRRC ACPL AADD A,#1MOV 30H,ALJMP FINALFUNC1:JNZ FUNC2MOV 30H,#2LJMP FINALFUNC2:MOV B,#2MUL ABMOV 30H,AFINAL:LJMP $END当x0时:R0=4 结果:30H=08H=2x当x=0时:R0=0 结果:30H=02H=2当x0?R6=#09, R1=#50HR7=R6,R0=#50H.A=(R0)输入数据R6=R6-1?输出序列Y二、硬件实验实验一 I/O口控制实验一、实验目的1、学习P1口的使用方法;2、学习延时子程序的编写和使用;二、实验说明P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据可能是不正确的。三、思考题对于本实验延时子程序Delay: MOV R6,0MOV R7, 0DelayLoop:DJNZ R6,.DelayLoopDJNZ R7,DelayLoopRET本模块使用12MHz 晶振,粗略计算此程序的执行时间为多少?执行时间:(1+1+(256*2+2)*256+2) us=0.131588s四、实验内容1. 编写程序,使发光二极管沿一个方向循环点亮。 ORG 0000HLOOP: MOV A,#0FEH MOV R2,#8OUT:MOV P1,ARL AACALL DELAYDJNZ R2,OUTLJMP LOOPDELAY:MOV R6,#0MOV R7,#0LOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP1RETEND 2. 改变发光二极管移动步长、方向和时间。ORG 0000HLOOP:MOV A,#0FEHMOV R2,#8OUT:MOV P1,ARR A ;改变发光二极管移动步长与方向RR AACALL DELAYDJNZ R2,OUTLJMP LOOPDELAY:MOV R6,#321 ;改变发光时间MOV R7,#321LOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP1RETEND实验四 动态扫描显示实验一、实验目的1掌握数字、字符转换成显示段码的软件译码方法;2动态显示的原理和相关程序的编写;二、实验说明动态显示,也称扫描显示。显示器由8个共阴极LED数码管构成。单片机P0口输出显示段码,经由一片74LS245 驱动输出给LED 管,由P1 口输出位码,经由74LS06 输出给LED 管。三、思考题1. 程序停止运行后,显示随之变化,为什么? 动态显示是利用人眼的暂留作用,高频率的刷新数码管,其实同一时间,八位数码管中只有一只是亮的,这一点是动态显示与静态显示最大的区别。当程序停止运行后,八位数码管中只有一位正常显示,其余熄灭。四、实验内容1. 画出实验例程的流程图。2. 如何修改程序,实现八位 LED 数码管只显示其中的两位?根据动态显示的特性,只需要改变P0、P2口输出的位码即可。例如:实现只显示“168168”第一位数“8”与第三位数“1”,那么位码P2循环输出1、100;P0段码循环输出“8”、“1”的段码。 ORG 0000H LJMP disp ORG 0100H disp: MOV 30h,#8 MOV 31h,#6 MOV 32h,#1 MOV 33h,#8 MOV 34h,#6 MOV 35h,#1 MOV R0,#30H MOV R1,#40H MOV R2,#2 MOV DPTR,#SEGTABDP00: MOV A,R0 MOVC A,A+DPTR MOV R1,A INC R1 INC R0 INC R0 DJNZ R2,DP00DISP0: MOV R0,#40H MOV R1,#2 MOV R2,#1 DP01: MOV A,R0 MOV P0,A MOV A,R2 MOV P2,A ACALL DELAY MOV A,R2 RL A RL A MOV R2,A INC R0 DJNZ R1,DP01 SJMP DISP0SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B DB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F, ,-DELAY: MOV R4,#03HAA1: MOV R5,#0FFHAA: NOP NOP DJNZ R5,AA DJNZ R4,AA1 RET END3. 将显示改成闪烁显示模式,频率约 1Hz。 DBUF EQU 30H TEMP EQU 40H ORG 0000H LJMP disp ORG 0100H disp: MOV 30h,#8 MOV 31h,#6 MOV 32h,#1 MOV 33h,#8 MOV 34h,#6 MOV 35h,#1 MOV R0,#DBUF MOV R1,#TEMP MOV R2,#6 MOV DPTR,#SEGTABDP00: MOV A,R0 MOVC A,A+DPTR MOV R1,A INC R1 INC R0 DJNZ R2,DP00 MOV R7,#1BH MOV R2,#1DISP0: MOV R0,#TEMP MOV R1,#6 DP01: MOV A,R0 MOV P0,A MOV A,R2 MOV P2,A ACALL DELAY MOV A,R2 RL A MOV R2,A INC R0 DJNZ R1,DP01 DJNZ R7,DIPS0 MOV R7,#1BH CJNE R2,#20H,L1 MOV R2,#0 AJMP DISP0 L1:MOV R2,#1 AJMP DIPS0SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH,77H,7CH ;6,7,8,9,A,B DB 58H,5EH,7BH,71H,00H,40H ;C,D,E,F, ,-DELAY: MOV R4,#03HAA1: MOV R5,#0FFHAA: NOP NOP DJNZ R5,AA DJNZ R4,AA1 RET END1、 数码管动态显示,加粗部分是在相对实验例程变化部分;2、 实现显示改成闪烁显示模式,频率约 1Hz,需要限定程序刷新六位数码管的次数;DELAY子程序延时3065us,一次刷新六位数码管,时长0.01839s;考虑频率要求为1HZ,0.5s点亮,0.5s暗,这样就要求DISP0循环0.5/0.01839=27次,所以将赋R7为1BH.3、 DISP0循环结束后,通过比较R2,判断接下来0.5s数码管是亮还是暗;如果R2=20H,则接下来0.5s暗;反之,点亮。实验五 查询式键盘实验一、实验目的1、掌握键盘和显示器的接口方法和编程方法;2、掌握键盘和八段码显示器的工作原理;3、掌握静态显示的原理和相关程序的编写;二、实验说明实验箱提供了8个按钮的小键盘,可接到单片机的并行口,如果有键按下,则相应输出为低,否则输出为高。单片机通过识别,判断按下什么键。有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。三、思考题1程序如何确保每按一次键,只处理一次。程序在处理前与处理后,均有消除抖动的模块K00、K03,使得在一定延时后,去除两边可能发生抖动的时间,再进行查表键值和显示的操作,以保证每一次按键都能独立出来,不受两边抖动的干扰,实现只处理一次。2 动态扫描和静态扫描有什么区别? 静态显示:各数码管在显示过程中持续得到送显信号,与各数码管接口的I/O口线是专用的。其特点是显示稳定,无闪烁,用元器件多,占I/O线多,无须扫描。系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,节省CPU时间,提高CPU的工作效率,编程简单。 动态显示:一位一位地轮流点亮每位显示器,与各数码管接口的I/O口线是共用的。其特点是有闪烁,用元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂。四、实验内容试设计长按功能,当按键时间长于3 秒时,个位上的数字以一定速率增加,直至按键释放。说明:利用动态显示模块,记录按键次数。 DBUF EQU 30HTEMP EQU 40HORG 0000HLJMP STARTORG 0100HSTART: MOV A,#10HMAIN: ACALL KEYAJMP MAINKEY: MOV P1,#0FFHMOV A,P1CJNE A, #0FFH, K00AJMP KEYK00: ACALL DELAYMOV A,P1CJNE A,#0FFH,K01AJMP KEYK01: MOV R3,#8MOV R2,#0MOV B,AMOV DPTR,#K0TABK02: MOV A,R2MOVC A,A+DPTRCJNE A,B,K04K03: MOV A,P1CJNE A,#0FFH,K03ACALL DELAYMOV R6, #-200WAIT3S:MOV B, P1CJNE A,B,ExitACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYDJNZ R6, WAIT3SACALL DELAY; 延时3sK05:MOV A,BRL AMOV R6, #-111WAIT500MS:ACALL DELAYMOV B,AACALL DELAYACALL DELAYMOV A, P1CJNE A,#0FFH,K06LJMP ExitMOV A,BK06:DJNZ R6,WAIT500MS ; 延时500msMOV B, AMOV A, P1CJNE A,#0FFH,K05Exit:RETK04: INC R2DJNZ R3,K02MOV A,#0FFHLJMP MAINK0TAB: DB 0FEH,0FDH,0FBH,0F7HDB 0EFH,0DFH,0BFH,07FHDELAY: MOV R4, #02H ; 大约延时1.5msAA1: MOV R5, #0F8HAA: MOV P2, ADJNZ R5, AADJNZ R4, AA1RETEND实验六 定时器实验一、实验目的1学习 89C51 内部计数器的使用和编程方法;2进一步掌握中断处理程序的编写方法;二、实验说明关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器,定时为一秒钟。CPU 运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。定时器有关的寄存器有工作方式寄存器TMOD 和控制寄存器TCON。TMOD 用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。 内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12 个振荡器周期。因为实验系统的晶振是12MHZ,本程序工作于方式2,即8 位自动重装方式定时器, 定时器100uS 中断一次, 所以定时常数的设置可按以下方法计算: 机器周期=1212MHz=1uS (256-定时常数)1uS=100uS 定时常数=156。然后对100uS 中断次数计数10000 次,就是1 秒钟。在本实验的中断处理程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。三、思考题1如何将 LED 的状态间隔改为2 秒,程序如何改写?改变定时器的初值,X=56=38H对于指导书给定的程序,只需要改变程序前的伪指令即可实现状态间隔为2S。Tick EQU 10000T100us EQU 38H2 如果更换不同频率的晶振,会出现什么现象?如何调整程序? LED状态间隔会改变。晶振频率增大,则LED状态间隔变小;晶振频率减小,则LED状态间隔增大。 如果想保持1s的状态间隔,那么时间常数要随着频率的变化而变化,具体关系如下式:四、实验内容 用8P 数据线将P1 口(JD1)与JD1A5 相连,编写程序使8 只发光二极管循环点亮,要求L0L3 之间时间间隔为0.5s,L3L7 之间时间间隔为1s。ORG0000HAJMP MAINORG000BHAJMP IN0MAIN: MOVTMOD,#01H ;T0工作在方式一 MOVR1,#0AH ;中断次数初值MOVR2,#03HMOVR0 ,#0FEH ;LED显示MOVTH0,#3CH ;50ms定时MOVTL0,#0B0H SETB CSETBTR0SETBET0SETBEALP1:MOVP1,R0 ;显示SJMPLP1IN0: MOVTH0,#3CHMOVTL0,#0B0HDJNZR1,RE MOV A , R0RLC AMOV R0 , ADJNZR2, LP4JB P1.3, LP3MOV R1,#14H ;L3L7 之间时间间隔为1sMOV R2,#05HAJMP RELP3:MOV R2,#03H ;L0L3 之间时间间隔为0.5s MOV R1,#0AH LP4: MOV 00H,CMOV A,P1XRL A,#0FFHCJNZ A,#0FHJC LP5 ;L0L2亮,R2赋值#0AH;L3L7亮,R2赋值#14HMOV R2,#14HAJMP LP6LP5:MOV R2,#0AHLP6: MOV C,00HRE:RETI实验七 计数器实验一、实验目的1学习 89C51 内部定时/计数器使用方法;2学习计数器各种工作方式的用法;二、实验说明 189C51 内部有两个16位的定时/计数器T0 和T1,16位是指定时/计数器内的计数器是16 位的,由2个8位计数器组成。本实验用的是T0,它的2 个8 位计数器是TH0 和TL0,TH0 是高8 位,TL0 是低八位。所谓加法计数器,指其计数的方法是对计数脉冲每次加1。在其它单片机和可编程计数器芯片中,有的计数器是减法计数器,如8155 的14 位计数器,8253 的16 计数器,即先设置计数器的初值,然后对计数器脉冲每次减1,减到0,计数器溢出。而8051 内部的计数器是加法计数器,需先设置计数器的初值,本实验设置计数器初值为0,然后对计数脉冲每次加1,加到计数器满后溢出。2本实验中内部计数器起计数器的作用。外部事件计数脉冲由P3.4 引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。这就决定了输入波形的频率不能超过机器周期频率。三、思考题1由功能、计数启动条件、重复启动条件等诸方面比较 80C51 的各种方式。GATEM1M0GATEM1M0(1) GATE=1时,定时器/计数器由外部中断引脚(高电平)和TRi(高电平)共同启动;GATE=0,定时器/计数器由TRi(高电平)启动,TRi低电平停止工作。=0,设置为定时器方式;=1,设置为计数器方式。(2) 定时器/计时器T0、T1的四种工作方式 M1 M0 工作方式 计数器配置及功能简述重复启动 0 0 方式013位计数器,TLi只用低5位13位计数器溢出,即TFi=1时,中断,重复计数 0 1 方式116位计数器16位计数器溢出,即TFi=1时,中断,重复计数 1 0 方式28位自动重装计数器,THi的值在计数中不变,TLi溢出时,THi中的值自动装入TLi中TLi8位计数器溢出,即TFi=1时,中断,重复计数 1 1 方式3T0分为2个独立的8位计数器,T1用作波特率发生器TL0八位计数器溢出,则TF0=1时,中断,TL0重复计数;TH0八位计数器溢出,则TF1=1时,中断,TH0重复计数289C51 单片机的最高计数频率为多少?定时器/计数器设置为定时器时,计数频率为机器频率;设置为计数器时,两个机器周期才完成一次采样,故此时最高的计数频率为振荡频率的1/24。四、实验内容 统计按键次数,在数码管上显示出来。1用8P数据线将80C51/C8051F020MCU模块的 JD1(P1口)、JD2(P2口)与A7区JD1A7、JD2A7(6位数码管显示模块)相连;用导线将80C51/C8051F MCU 模块的P3.4 与单次脉冲模块(C8)的任一输出端相连。2、代码注释ORG 0000HLJMP STARTORG 0030HSTART: MOV TMOD, #00000101B MOV TH0, #0MOV TL0, #0SETB TR0 LOOP:ACALL BTD DISP:MOV A,R6ANL A,#0FHMOV 30H,AMOV A,R6SWAP AANL A,#0FHMOV 31H,AMOV A,R5ANL A,#0FHMOV 32H,AMOV A,R5SWAP AANL A,#0FHMOV 33H,AMOV A,R4ANL A,#0FHMOV 34H,AMOV A,R4SWAP AANL A,#0FHMOV 35H,ADISP01:MOV R0,#30HMOV R1,#40HMOV R2,#6MOV DPTR,#TABDP00:MOV A,R0MOVC A,A+DPTRMOV R1,AINC R1INC R0DJNZ R2,DP00 DISP02:MOV R0,#40HMOV R1,#6MOV R2,#1DP01:MOV A,R0MOV P1,AMOV A,R2MOV P2,AACALL DELAYMOV A,R2RL A MOV R2,AINC R0DJNZ R1,DP01LJMP LOOP TAB:DB 3FH,06H,5BH,4FH,66H,6DHDB 7DH,07H,7FH,6FHDELAY:MOV R4,#03HAA1:MOV R5,#0FFHAA:NOPNOPDJNZ R5,AADJNZ R4,AA1RETBTD:MOV R7,#16CLR AMOV R4,AMOV R5,AMOV R6,AMOV R3,TL0MOV R2,TH0LP1:CLR CMOV A,R3RLC AMOV R3,AMOV A , R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,LP1RETEND 方式1,十六位计数器开始记数将TH0,TL0 16位二进制整数转化为十进制BCD码,送入R4R5R6中存入要显示的数字至30H35H 将所要显示的数字转化成段码指向首位段码缓存设置显示位数设置位码输出段码与位码调用延时子程序位码左移已刷新六位后,重复程序共阴极数码管显示段码表格延时子程序16位二进制转化为十进制数子程序实验十 ADC0809 并行A/D 转换实验一、实验目的1掌握 ADC0809 模/数转换芯片与单片机的连接方法及ADC0809 的典型应用;2掌握用查询方式、中断方式完成模/数转换程序的编写方法;二、实例流程图三、思考题 1、A/D 转换程序有三种编制方式:中断方式、查询方式、延时方式,实验中使用了查询方式,请用另两种方式编制程序。 硬件连接不变,中断方式时利用EOC输出的上升沿,经非门变化为下降沿,启动中断子程序。 源程序:(数码管显示子程序已经省略)查询方式中断方式延时方式ORG 0000HLJMP MAINORG 0100HMAIN: CLR ASETB P3.3MOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPMOVX DPTR,AWAIT: JNB P3.3,WAITMOVX A,DPTR MOV R7,ACALL TODISP CALL DISPLAYCALL delayLJMP MAINORG 0000HSJMP MAINORG 0003HLJMP INTRORG 0100HMAIN: CLR AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPSETB IT1SETB EX0SETB EA START:SETB F0MOVX DPTR,AWAIT: JB F0,WAITCALL TODISP CALL DISPLAYCALL delayLJMP MAININTR: MOVX A,DPTRMOV R7,ACLR F0RETIORG 0000HLJMP MAINORG 0100HMAIN: CLR AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPMOVX DPTR,AWAIT: ACALL DELAY116usMOVX A,DPTR MOV R7,ACALL TODISP CALL DISPLAYCALL delayLJMP MAINDELAY116us: MOV R4,#39H AA: DJNZ R4,AA RET 转换时间:当时钟频率为640KHZ时,典型值为100us,最大值为116us,所以添加116us的延时子程序。 2、P0 口是数据/地址复用的端口,请说明实验中ADC0809 的模拟通道选择开关在利用P0 口的数据口或地址口时,程序指令和硬件连线的关系。 用导线将80C51/C8051F MCU 模块的WR、RD、P2.0、ALE、P3.3 分别与并行A/D 转换模块的WR、RD、CS、CLK、EOC 相连; MOV DPTR,#0FE00H 运行时,P0为地址口,使得ALE=1,锁存器锁存A2A1A0低三位地址用于选择模拟通道; MOVX DPTR,A 运行时,写,P0为数据口,使得ALE=0,P0口低三位无法进入锁存器,且此时=0,P2.0=0,或非逻辑之后将START、ALE置1,A/D启动。 MOVX A,DPTR 运行时,读,P0为数据口,使得ALE=0,=0,P2.0或非逻辑后将OE置1,ADC0809输出转换结果。 P0口在地址口与数据口之间不停转换,使得ALE可以直接作为时钟信号接在ADC0809的clk引脚。四、实验内容1试用中断方式改写 A/D 转换程序。2对每 10 次采到的值求均值并显示。源程序(省略数码管显示子程序)注释ORG 0000HSJMP MAINORG 0003HLJMP INTRORG 0100H MAIN: MOV R2,#00H MOV R3,#00H MOV R4,#0AHCLR AMOV R0,#DBUFMOV DPTR,#0FE00H NOPNOPSETB IT1SETB EX0SETB EA START:SETB F0MOVX DPTR,AWAIT: JB F0,WAIT DJNZ R4,START ACALL DIV1 MOV R7,R2CALL TODISP CALL DISPLAYCALL delayLJMP MAININTR: MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年游戏开发程序员应聘面试指南及预测题
- 光电材料与器件教学课件
- 乡村教师廖老师教学课件
- 2025年电力系统运行值班员高级模拟题及解析
- 2025年特岗教师招聘面试初中生物高频考点预测
- 健全安全评价与监测体系支持企业安全管理
- 化工原理课程设计列管式换热器
- 青光眼护理查房
- 修辞手法教学课件
- 《望洞庭》教学课件
- XX村集体经济发展章程
- 高尿酸血症营养和运动指导
- 2021国家职业技能认定(初级茶艺师)理论内容细目表
- 2024年国药控股股份有限公司招聘笔试冲刺题(带答案解析)
- 【长期护理险制度运行中的问题及优化建议分析13000字】
- 葡萄糖耐量试验课件
- 应用文写作全套教学课件
- 密闭式静脉输血技术操作评分标准
- 做新时代的青年马克思主义者讲课
- 《递延所得税讲解》课件
- 肌张力障碍演示课件
评论
0/150
提交评论