微机原理与接口技术实验

上传人:沈*** 文档编号:113257195 上传时间:2022-06-24 格式:DOC 页数:24 大小:178KB
返回 下载 相关 举报
微机原理与接口技术实验_第1页
第1页 / 共24页
微机原理与接口技术实验_第2页
第2页 / 共24页
微机原理与接口技术实验_第3页
第3页 / 共24页
点击查看更多>>
资源描述
实验一 存储器块操作实验一、实验目的1熟悉 KEIL 集成调试环境和汇编程序的调试方法.2掌握存储器读写方法;3了解内存块的移动方法;二、实验说明实验1指定某块存储器的起始地址和长度,要求能将其内容赋值.通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法.块移动是单片机常用操作之一,多用于大量的数据复制和图象操作.例程2 给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去.移动3000H起始的256个字节到4000H起始的256个字节.三、 源程序代码源程序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 个字节存储块各单元内数据对应相同.四、 思考题1、如何将存储器块的内容置成某固定值? 请用户修改程序,完成此操作.将源程序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、 若源块地址和目标块地址有重叠,该如何避免? 将源块地址和目标块地址重叠部分数据压制堆栈中,当要使用重叠部分源数据时, 直接从堆栈中弹出.五、 实验内容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.三、 源程序代码源程序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.四、 思考题1、BCD 码转换成二进制数的算法是什么?例如:91BCD 对应的二进制数是多少?将BCD码写成权值相加的形式,再将各位转化为二进制. 91BCD= =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时:R0=0FCH=-4结果:30H=FEH=x/2=-2四、思考题1写跳转程序时要注意些什么? 写跳转程序时,应该要注意跳转条件,不同分支的跳转条件应该是独立不重复的.2跳转的作用有哪些? 跳转程序可以应用于有条件判定的程序;使程序编写更灵活实验四 数据排序实验一、实验目的1熟悉 KEIL 集成调试环境和汇编程序的调试方法.2掌握排序程序的设计方法.二、实验说明本例程采用交换排序法将内部RAM 中的5059H 单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM 1000H开始处.三、实验步骤 1启动 PC 机,打开KEIL 软件,软件设置为模拟调试状态.在所建的Project 文件中添加TH6_数据排序.ASM文件,阅读、分析、理解程序,编译无误后进入仿真环境.2在 VIEW 菜单中打开MEMORY WINDOW 数据窗口,分别观察50H在MEMORY#1 中输入D:50H、1000H.3可在程序指令NOP 处设置断点,在第一个断点处可观察5059H 单元内容是否为10 个任意排列原始数据;在第二个断点处可观察每次排序的结果.4 可单步执行程序观察排序过程.四、 流程图NYNYYNSTOP=A,R1=R1+100H=1?R7=R7-1=0?A-R00?R6=#09, R1=#50HR7=R6,R0=#50H.A=输入数据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+2us=0.131588s四、实验内容1. 编写程序,使发光二极管沿一个方向循环点亮.ORG 0000HLOOP:MOV A,#0FEHMOV 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,DP00MOV R7,#1BHMOV 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,DP01DJNZ 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 END一、 数码管动态显示,加粗部分是在相对实验例程变化部分;二、 实现显示改成闪烁显示模式,频率约 1Hz,需要限定程序刷新六位数码管的次数;DELAY子程序延时3065us,一次刷新六位数码管,时长0.01839s;考虑频率要求为1HZ,0.5s点亮,0.5s暗,这样就要求DISP0循环0.5/0.01839=27次,所以将赋R7为1BH.三、 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=1uS256-定时常数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, LP4 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模块的 JD1P1口、JD2P2口与A7区JD1A7、JD2A76位数码管显示模块相连;用导线将80C51/C8051F MCU 模块的P3.4 与单次脉冲模块C8的任一输出端相连.2、代码注释ORG 0000HLJMP STARTORG 0030HSTART: MOV TMOD, #00000101BMOV TH0, #0MOVTL0, #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 EASTART:SETB F0MOVX DPTR,AWAIT: 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 EASTART:SETB F0MOVX DPTR,AWAIT: F0,WAIT DJNZ R4,START ACALL DIV1 MOV R7,R2CALL TODISP CALL DISPLAYCALL delayLJMP MAININTR: MOVX A,DPTRADD A,R2MOV R2,ACLR AADDC A,R3MOV R3,ACLR F0RETIDIV1: MOV B,#8LOOP1:CLR C MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV F0,C CLR C SUBB A,R4 F0,LOOP2 JC LOOP3LOOP2:MOV R3,A INC R2LOOP3:DJNZ B,LOOP1 CLR F0 RETDIV1子程序将10次采样取平均,其中被除数为R3R2,除数为R4#0AH.除法子程序可以参考危机原理书本P128页多字节无符号数除法程序,将R3R2和R4中两个无符号数相除,结果商送到R2,余数送到R3.考虑到实际情况,R3一定小于0AH,所以商不会溢出,即商不超过一字节;也不可能出现除数为0的情况.无溢出,循环次数送BR3R2左移一位,最低位补零移出的最高位送F0R3-R4,差送A,并形成cy若F0=1,则够减,转LOOP2若不够减,则转LOOP3余数送R3上商1若除法未完,则转LOOP1若完成,则F0清零返回实验十一DAC0832 并行D/A 转换实验一、实验目的1掌握 DAC0832 直通方式,单缓冲器方式、双缓冲器方式的编程方法;2掌握 D/A 转换程序的编程方法和调试方法;二、实例流程图源程序中初始化DPTR=0FEFFH,其中P2.0=0,这样使得为0,只需要输出数字信号就可以启动转换.三、思考题计算输出方波的周期,并说明如何改变输出方波的周期.DELAY: MOV R3,#11 ;延时子程序D1: NOPNOPNOPNOPNOPDJNZ R3,D1RET1、通过计算延时,就可以确定方波的周期.单片机时钟周期1us延时t=7us*11+2us=79us,如果忽略DAC转换的时间,方波周期大约为2倍的延时t,158us.实际情况,方波周期一定略小于158us.2、改变延时程序的延时t就可以改变输出方波的周期.四、实验内容编程实现输出波形为锯齿波与三角波.1、 产生同相的锯齿波,使用同相输出电路,输入数字量为00000000时,输出电压为0V;输入数字量为11111111,输出电压.2、 产生同相的三角波,使用同相输出电路,输入数字量为00000000时,输出电压为0V;输入数字量为11111111,输出电压.锯齿波源程序注释三角波源程序注释ORG 00HAJMP STARTORG 0100HSTART:MOV DPTR,#0FEFFH MOV A,#00HLP:MOVX DPTR,ALCALL DELAYINC ASJMP LPDELAY: MOV R3,#0FFHD1: NOPNOPNOPNOPNOPDJNZ R3,D1RETEND取D/A芯片地址从0V开始波形输出延时波形值增量循环输出延时子程序ORG 00HAJMP STARTORG 0100HSTART:MOV DPTR,#0FEFFH BEGIN:MOV A,#00HUP:MOVX DPTR,ALCALL DELAY INC A JNZ UPMOV A,#0FEH DOWN:MOVX DPTR,ALCALL DELAY DEC A JNZ DOWNSJMP BEGINDELAY: MOV R3,#0FFHD1: NOPNOPNOPNOPNOPDJNZ R3,D1RETEND取D/A芯片地址从0V开始波形输出延时波形值增量波形输出波形值递减循环输出延时子程序24 / 24
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!