实验三 P1口亮灯实验
- 格式:pdf
- 大小:78.47 KB
- 文档页数:2
《单片机原理及接口技术》课程实验大纲课程名称:《单片机原理及接口技术》实验英文名称:《MCU principles and interface technologies》experiment课程性质:专业选修课程课程编号:0510085所属系部:机电工程学院总学时:14学时预备知识:电路、数字电子技术课程在教学计划中的地位作用:本课程是机械电子工程专业的一门重要专业选修课程。
目前单片机技术开发和应用水平已成为一个国家工业化发展水平的标志之一。
单片机原理及其应用已成为从事电子技术的工程技术人员必须掌握的基础理论和基本技能之一。
通过本课程的学习使学生实践上掌握单片计算机的基本组成、工作原理及常用接口技术,建立单片机系统整体概念,使学生具备单片机应用系统软、硬件开发的初步能力。
教学方式:理论与实践相结合教学的目的与要求:通过本课程的学习,使学生掌握单片机的硬件结构、MCS-51的指令系统、MCS-51汇编语言程序设计、MCS-51的中断系统、MCS-51的定时器/计数器、MCS-51的串行口、MCS-51单片机扩展存储器的设计、MCS-51扩展I/O接口的设计、MCS-51 与键盘、显示器的接口设计、MCS-51单片机与D/A转换器和A/D转换器的接口、MCS-51的功率接口、MCS-51的串行通信技术及其扩展接口。
进一步理解MCS-51单片机的开发装置、工作原理、编程方法,学会使用开发机进行程序。
课程教材:《单片机原理及接口技术》蔡美琴主编高等教育出版社参考书目:1.《单片机程序设计基础》周航慈主编北京航天航空大学出版社2. 《单片机原理及其接口技术》胡汉才主编清华大学出版社编写日期:2012年6月制定课程内容及学时分配:发光二极管显示各相状态。
要求:掌握步进电机控制系统的硬件设计方法;熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试的能力。
正确连接电路,编写程序,调试运行。
实验一P1口亮灯实验一、实验目的1.学习P1口的使用方法;2.学习延时子程序的编写。
实验三运用定时中断方法控制P1口亮灯实验报告一、实验目的1学习内部定时/计数器的使用2学习定时中断处理程序的编程方法二、实验预备知识1.P1口是准双向口,可以定义为输入,也可以定义为输出2.本实验中延时子程序采用指令循环来实现。
3.延时时间的计算:延时时间=机器周期×指令所需机器周期数×循环次数其中循环次数可以采用多重循环来实现三、实验内容程序如下:一、外部中断选择边沿触发方式控制灯的状态ORG 00HLJMP MAINORG 03HLJMP INTERRUPTORG 30HMAIN: SETB EX0SETB IT0SETB EAMOV A,#00HMOV P1,ASJMP $INTERRUPT: INC AMOV P1,ARETI二、用定时器定时方式控制灯的状态 ORG 0000HLJMP MAINORG 000BHLJMP DISPLAYORG 0030HMAIN:MOV IE,#82HMOV TMOD,#01HMOV P1,#01HMOV TH0,#9EHMOV TL0,#58HMOV R7,#10SETB TR0SJMP$DISPLAY:MOV TH0,#9EHMOV TL0,#58HDJNZ R7,LOOPMOV A,P1RL AMOV P1,AMOV R7,#10LOOP:RETI三、实验心得及体会对于中断的设置用到P3口的第二功能,第一个实验中,我所设置的触发方式为边沿触发,中断输入的管脚应该为P3.2即外部中断0输入,因此给外加脉冲时应该给到P3.2。
第一次因未分清触发所给管脚导致脉冲加入时无反应。
编写中断及初始化程序时,中断地址的开辟要提前在主程序之前给出,以实现执行中断时指针的转移。
做有关定时程序之前要首先弄清楚晶振的大小,以确定一个机器周期的时间,在这次试验中,试验箱所用晶振为6MHZ,一个机器周期的时间为2us,总计数时间可以达到131ms,但是无法满足0.5s的时间要求,所以用R7预置循环次数,显得尤为重要。
《单片机原理及应用》实验教学大纲课程编号:B04611016课程类别:专业课实验学时:16学时学分:2.5适用专业:计算机科学与技术一、实验教学目的和任务本课程是计算机及应用专业一门重要的专业课。
其教学内容直接面向生产。
同时,微机向小型化、超小型化方面发展愈来愈迅猛。
单片机应用已渗透社会各个领域,特别在通信技术中的应用,大大提高了通信技术水平。
学生应具备这方面的知识与技能,为今后参加工作,打下坚实的基础。
二、实验教学基本要求本课程是一门很注重实践的课程。
以研究MCS-51系列单片机入手,掌握其硬件结构、指令系统和程序设计,以及常用接口技术和典型应用实例。
三、实验教学内容实验项目一:清零程序1、实验目的及要求要求学生掌握软件的结构和键盘的调试。
2、实验内容及学时分配(2学时)(1)了解MCS-51软件的构造(2)掌握清零程序的输入方法(3)了解起始伪指令的输入方法实验项目二:拼字和拆字程序1、实验目的及要求要求学生掌握存储器分配和汇编语言的简单应用。
2、实验内容及学时分配(2学时)(1)进一步掌握MCS-51软件的基本使用方法(2)掌握指令的寻址方式(3)掌握数据传送指令和地址内容的分配实验项目三:数据区传送子程序1、实验目的及要求要求学生掌握RAM数据存储器实际操作。
2、实验内容及学时分配(2学时)(1)掌握MCS-51逻辑运算指令和位操作指令(2)进一步掌握数据传送子程序的简单方法(3)掌握查表程序的编写实验项目四:数据排序实验1、实验目的及要求要求学生掌握汇编语言的应用和实际操作。
2、实验内容及学时分配(2学时)(1)掌握MCS51逻辑运算指令和位操作指令(2)进一步掌握简单顺序程序的编写和调试方法(3)掌握查表程序的编写实验项目五:查找相同个数1、实验目的及要求熟悉汇编语言程序,使用环移指令和加1指令。
2、实验内容及学时分配(2学时)(1)掌握赋值指令(2)掌握带进位的环移指令和加1程序的编写实验项目六:双字节无符号数的乘法实验1、实验目的及要求要求学生掌握MCS-51汇编语言设计和调试方法。
实验三 P0,P1口应用试验1.实验目的:学习并掌握单片机开发系统操作方法,练习P0,P1口应用。
2.实验内容:(1)万利仿真器开发环境Medwin使用练习。
(2)练习单片机对端口操作的方法和延时的方法。
3.实验仪器:PC机一台,万利仿真器一套及其开发环境,清华TMC-1开放式单片机实验系统一套。
4.试验要求:(1)P0口输入,P1口输出实验P0端口接逻辑电平开关(输入设备),P1口接LED显示电路(输出设备),无条件地将逻辑电平开关输入的数据传送给LED显示电路。
程序代码:ORG 0000HMAIN: MOV P0, #0FFH ;向p0端口锁存器写,0FFH,准备输入MOV A,P0 ;从p0口输入数据MOV P1,A ;将数据传送到p1口显示SJMP MAINEND(2)流水灯实验P1口作为输出,控制LED指示灯从左到右,然后从右到左依次循环显示。
程序代码:LED1 EQU P1.0 ;第1个数码管对应的引脚LED2 EQU P1.1 ;第2个数码管对应的引脚LED3 EQU P1.2 ;第3个数码管对应的引脚LED4 EQU P1.3 ;第4个数码管对应的引脚LED5 EQU P1.4 ;第5个数码管对应的引脚LED6 EQU P1.5 ;第6个数码管对应的引脚LED7 EQU P1.6 ;第7个数码管对应的引脚LED8 EQU P1.7 ;第8个数码管对应的引脚ORG 0000H ;程序开始LJMP MAIN ;跳转到主程序ORG 0030H ;主程序从30H开始MAIN: MOV SP, #30H ;初始化堆栈LCALL REST ;调用初始化程序,进行初始化LCALL PRO_LED ;调用LED显示程序LJMP MAINREST: MOV P0, #00H ;初始化程序MOV P1, #0FFHRETPRO_LED: SETB LED8 ;LED显示程序开始, 熄灭第一个LEDCLR LED1 ;显示后一个LEDLCALL DELAY ;延时SETB LED1 ;进入第二个循环,熄灭第二个LED CLR LED2 ;显示后一个LEDLCALL DELAY ;延时SETB LED2 ;如此反复,直到所有的LED都循环过CLR LED3LCALL DELAYSETB LED3CLR LED4LCALL DELAYSETB LED4CLR LED5LCALL DELAYSETB LED5CLR LED6LCALL DELAYSETB LED6CLR LED7LCALL DELAYSETB LED7CLR LED8LCALL DELAYSETB LED1 ;开始另外一种显示方式CLR LED8LCALL DELAYSETB LED8CLR LED7LCALL DELAYSETB LED7CLR LED6LCALL DELAYSETB LED6CLR LED5LCALL DELAYSETB LED5CLR LED4LCALL DELAYSETB LED4CLR LED3LCALL DELAYSETB LED3CLR LED2LCALL DELAYSETB LED2CLR LED1LCALL DELAYRETDELAY: PUSH PSW ;保护PSW寄存器CLR PSW.3SETB PSW.4 ;重新设置寄存器组别MOV R0, #02H ;延时常数MOV R1, #0F9H ;延时常数MOV R2, #02H ;延时常数DL1: DJNZ R0, DL1 ;延时循环1MOV R0, #0F9HDL2: DJNZ R1, DL1 ;延时循环2MOV R0, #0F9HMOV R1, #0F9HDL3: DJNZ R2, DL1 ;延时循环3NOP ;修正演示精度POP PSW ;恢复PSW寄存器RETEND问题: 1 若延时功能由定时器来实现,试改写程序。
实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
单片机实验报告班级:09050541学号:0905054116姓名:王昆鹏实验1 P1口实验一、实验目的:1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。
作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。
软件延时,如果用c编程时,通过使用keil的软件模拟,调试观察子函数(delay)延时时间。
(具体延时可以自行设定)使用汇编语言的软件延时,可以计算其指令的周期数,大概估算其软件延时。
五、实验原理图:P1口输出、输入实验六、实验步骤:执行程序:P1.0~P1.7接发光二极管L1~L8。
七、程序框图:循环点亮发光二极管(具体延时可以自行设定)八、程序代码NAME T1_1ORG 0000HLJMP STARTORG 0030HSTART: MOV A,#0FEH //将1111 1110赋给A LOOP: RL A //A循环左移MOV P1,A //把A赋给端口P1LCALL DELAY //延时0.16sJMP LOOP //循环;延时函数DELAY: MOV R1,#200DEL1: MOV R2,#200DEL2: DJNZ R2,DEL2DJNZ R1,DEL1RETEND实验2 中断口实验一、实验目的:1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:通过设定两个中断使能和触发方式,并编写相应的中断服务子函数,改变led灯的变化情况。
当按下KEYBOARD的按键时8个led都灭,当把k1向上拉再复位后,4个led亮,4个灭。
四、实验原理:参考《单片机原理及接口技术》第三版,北京航空航天大学出版社。
P1口转弯灯实验一、实验目的了解P1口的使用,学习汇编语言编程方法与调试技巧。
二、实验内容P1.0开关接5V 时右转弯灯闪亮,P1.1开关接5V 时左转弯灯闪亮,P1.0、P1.1开关同时接5V 或接地时,转弯灯均不闪亮。
标志位为1表示现在有灯亮。
四、实验接线图7047五、实验步骤P1.0,P1.1分别接拨动开关JP40的某两位,P1.4~P1.7依次接LED 指示灯JP32的某四位,连续运行本程序;应看到转弯灯正确闪亮,在用单步方式调试本程序时需修改延时子程序(例如可把延时程序第一个字节改成返回指令22H ),以便观察。
六、实验程序ORG 0000HLJMP PX00ORG 0C30HPX00: MOV P1, #0FFH ;初始化PX03: MOVA,P1MOV B,AANL A,#03HCJNE A, #01H, PX01 ;满足只是P1.0为高条件吗?JB 00H, PX04 ;闪烁标志位CLRP1.4CLR P1.5 ;开右灯SETB P1.6SETB P1.7 ;关左灯MOV R2,#20HLCALL DELY ;延时SETB 00H ;置标志位LJMP PX03 ;继续查状态PX04: SETB P1.4SETBP1.5SETB P1.6 ;关灯SETB P1.7MOV R2,#20HLCALL DELY ;延时CLR 00H ;清标志位AJMP PX03 ;继续查状态PX01: CJNE A,#02H,PX02 ;满足只是P1.1为高条件吗?JB 01H, PX05 ;判标志位SETB P1.4SETB P1.5 ;开左灯CLR P1.6CLR P1.7 ;关右灯MOV R2, #20H ;延时LCALL DELYSETB 01H ;置标志位LJMP PX03 ;继续查状态PX05: SETB P1.4SETB P1.5SETB P1.6 ;关灯SETB P1.7MOV R2,#20HLCALL DELY ;延时CLR 01H ;清标志位LJMP PX03 ;继续查状态PX02: SETB P1.4SETB P1.5SETB P1.6 ;关灯SETB P1.7LJMP PX03 ;继续ORG 0213HDELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2, DEL4POP 02HDJNZ R2, DEL3POP 02HDJNZ R2, DEL2POP 02HDJNZ R2, DELYRETEND七、实验现象与结论实验现象:P1.0开关接5V时右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮,P1.0、P1.1开关同时接5V或接地时,转弯灯均不闪亮。
实验三 P1口输入输出实验一、实验要求1.P1口做输入口,接八个扭子开关,以实验机上74LS273做输出口,编写程序读取开关状态,将此状态,在发光二极管上显示出来。
2.将K1作为输入数据标志,将前后输入的两个数相加,并通过发光二极管显示出来,并保持一段时间。
3.讨论延时子程序的延时计算。
二、实验目的1.学习P1口的使用方法2.学习延时子程序的编写和使用3.进一步增强分支程序的设计能力三、实验电路及连线接线说明:P1.0~P1.7接K1~K8;PO0~PO7接DL1~DL8。
/CS接8300H四、实验说明1.P1口是准双向口。
它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。
因为内部上拉电阻阻值是20KΩ~40KΩ,故不会对外部输入产生影响。
若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
2.本实验按照要求,应该按如下步骤操作:1)将8个扭子全拨动至L(下),L1闪烁,其他7LED灭,准备输入第一个数(例如76H)2)输入数据时,先从最低位输入,然后到最高位,对应的扭子是从K8到K2。
3)确定拨动的扭子没问题后,将K1拨动到H(上),并马上拨回到L(下),表示第一个数输入完成。
4)L1灯灭,其他7LED灯显示刚刚输入的数2秒钟,然后等待输入第二个数(例如6DH)5)输入数据时,同第1)和2) 步,通过K1的上下拨动,表示第二个数输入完成,并显示该数据2秒钟。
6)同时闪烁8个发光二极管后,稳定显示前后两个数的相加结果。
请手工将K2~K8扭子全部拨动到L(下)。
7)若此时K1再次上下拨动,这回到第1) 步重复进行。
3.本实验要求必须画出程序的流程图,并根据流程图编写代码。
4.请把输入的数据和显示的结果分别记录在实验数据中。
五、实验框图六、实验代码七、实验数据八、实验小结。
;======================P1口亮灯实验========================= ORG 0790H;----------------------------------------------------------SE18: MOV P1,#0FFH ;送P1口LO34: MOV A,#0FEH ;L1发光二极管点亮LO33: MOV P1,ALCALL SE19 ;延时RL A ;左移位SJMP LO33 ;循环;----------------------------------------------------------SE19: MOV R6,#0A0HLO36: MOV R7,#0FFHLO35: DJNZ R7,LO35DJNZ R6,LO36 ;延时RET;----------------------------------------------------------END;==================== 8255控制交通灯========================== ORG 0BB0HJOD0: MOV SP,#60HMOV DPTR,#0FFDBHMOV A,#88HMOVX @DPTR,A ;8255初始化MOV DPTR,#0FFD8HMOV A,#0B6HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;点亮4个红灯MOV R2,#25H ;延时LCALL DEL YJOD3: MOV DPTR,#0FFD8HMOV A,#75HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;东西绿灯亮,南北红灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD1: MOV DPTR,#0FFD8HMOV A,#0F3HMOVX @DPTR,AINC DPTRMOV A,#0CHMOVX @DPTR,A ;东西黄灯亮,南北红灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0F7HMOVX @DPTR,AINC DPTRMOV A,#0DHMOVX @DPTR,A ;南北红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD1 ;闪烁次数未到继续MOV DPTR,#0FFD8HMOV A,#0AEHMOVX @DPTR,AINC DPTRMOV A,#0BHMOVX @DPTR,A ;东西红灯亮,南北绿灯亮MOV R2,#55HLCALL DEL Y ;延时MOV R7,#05H ;闪烁次数JOD2: MOV DPTR,#0FFD8HMOV A,#9EHMOVX @DPTR,AINC DPTRMOV A,#07HMOVX @DPTR,A ;东西红灯亮,南北黄灯亮MOV R2,#20HLCALL DEL Y ;延时MOV DPTR,#0FFD8HMOV A,#0BEHMOVX @DPTR,AINC DPTRMOV A,#0FHMOVX @DPTR,A ;东西红灯亮MOV R2,#20HLCALL DEL Y ;延时DJNZ R7,JOD2 ;闪烁次数未到继续LJMP JOD3 ;循环;---------------------------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;---------------------------------------------END;===================== 工业顺序控制======================== ORG 0000HLJMP PO10ORG 0013HLJMP PO16;----------------------------ORG 0190HPO10: MOV P1,#7FHORL P3,#00HPO11: JNB P3.4,PO11 ;开工吗?ORL IE,#84HORL IP,#01HMOV PSW,#00H ;初始化MOV SP,#53HPO12: MOV P1,#7EH ;第一道工序ACALL PO1BMOV P1,#7DH ;第二道工序ACALL PO1BMOV P1,#7BH ;第三道工序ACALL PO1BMOV P1,#77H ;第四道工序ACALL PO1BMOV P1,#6FH ;第五道工序ACALL PO1BMOV P1,#5FH ;第六道工序ACALL PO1BMOV P1,#0FH ;第七道工序ACALL PO1BSJMP PO12;----------------------------PO16: MOV B,R2 ;保护现场PO17: MOV P1,#7FH ;关输出MOV 20H,#0A0H ;振荡次数PO18: SETB P1.7 ;振荡ACALL PO1A ;延时CLR P1.7 ;停振ACALL PO1A ;延时DJNZ 20H,PO18 ;不为0转CLR P1.7ACALL PO1A ;停振JNB P3.3,PO17 ;故障消除吗?MOV R2,B ;恢复现场RETIPO1A: MOV R2,#06HACALL DEL Y ;延时RETPO1B: MOV R2,#30HACALL DEL Y ;延时RET;----------------------------DELY: PUSH 02HDEL2: PUSH 02HDEL3: PUSH 02H ;延时DEL4: DJNZ R2,DEL4POP 02HDJNZ R2,DEL3POP 02HDJNZ R2,DEL2POP 02HDJNZ R2,DEL YRET;----------------------------END;=================== A/D转换实验======================== ORG 05A0HSE11: MOV SP,#53HMOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#00HMOV 7BH,#09HMOV 7AH,#10HMOV 79H,#10H ;显示缓冲区初值LO18: CALL DIS ;显示MOV A,#00HMOV DPTR,#0FFE0HMOVX @DPTR,A ;0809的0通道采样CALL DIS ;SSEEMOVX A,@DPTR ;取出采样值mov dptr,#0ffe4h ;new add --> 138 Y1cpl a ;new addmovx @dptr,a ;new add --> 驱动发光二极管cpl a ;new addMOV R0,#79HCALL PTDS ;采样值送显示缓冲区SJMP LO18 ;循环;---------------------------PTDS: MOV R1,A ;拆送显示缓冲区ACALL PTDS1MOV A,R1SW AP APTDS1: ANL A,#0FHMOV @R0,AINC R0RET;---------------------------DIS: PUSH DPHPUSH DPLSETB RS1MOV R0,#7EHMOV R2,#20HMOV R3,#00HMOV DPTR,#LS0LS2: MOV A,@R0MOVC A,@A+DPTRMOV R1,#0DCHMOVX @R1,AMOV A,R2inc R1MOVX @R1,ALS1: DJNZ R3,LS1CLR CRRC AMOV R2,ADEC R0JNZ LS2movx @r0,adec r0cpl amovx @r0,aCLR RS1POP DPLPOP DPHRET;-------------------------------------LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92HDB 82H,0F8H,80H,90H,88H,83H,0C6HDB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH;--------------------------------------END===================== D/A输出方波=========================;注意:进行本实验前,请先装载运行D/A 0V输出(调基准电压)程序Asm51\da_0v.asm ;使D/A输出端“AOUT”输出电压为0V,再进行本实验。
实验三运用定时中断方法控制P1口亮灯实验姓名:郑旅军学号:0656061指导老师:邹慧兰成绩:一、实验目的1学习内部定时/计数器的使用2学习定时中断处理程序的编程方法二、实验内容P1口作为输出口,接发光二极管,编写相应的程序使发光二极管点亮。
发光二极管亮灭的时间间隔可以由定时中断子程序进行控制。
要求0.5S中亮一个。
三、实验预备知识1.P1口是准双向口,可以定义为输入,也可以定义为输出2.本实验中采用定时器来实现中断四、程序框图五、实验电路图P1.0--------LED0P1.1--------LED1P1.2--------LED2P1.3--------LED3P1.4--------LED4P1.5--------LED5P1.6--------LED6P1.7--------LED7六、实验步骤1.按要求编写相应的程序#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned intuint num=4;uchar XX=0x01;void timer0() interrupt 1{n um--;TH0=0x0B;T L0=0xDC; //重新设置初值i f(num==0){XX=_crol_(XX,1); //或者是 XX=XX<<1num=4;}}void main(){T MOD=0x01; // set model oneT H0=0x0B;T L0=0xDC; //设置初值E A=1; //总中断允许E T0=1; //定时中断允许TR0=1; //定时开始f or(;;){P1=XX; //计时溢出时,退出循环,跳到中断子程序}}由于晶振是6 MHz ,所以机器周期为 s μ2,延时0.5 S,则是延时ss μ25.0=250000个机器2,所以考虑将250000分开4次循环计时,设置计数器num。
实验三 4.1 P3.3口输入、P1口输出实验系别专业:电子系12级电信2班学号:3121003210姓名:李书杰指导老师:刘志群老师4.1.1 实验要求1. 复习Keil C51调试硬件的操作方法。
2. 复习单片机作为通用I/O口的注意事项。
3. 复习单片机操作I/O口的程序设计方法。
4.1.2 实验设备PC 机一台,TD-NMC+教学实验系统4.1.3 实验目的1. 熟悉单片机仿真实验软件Keil C51调试硬件的方法。
2. 了解P3、P1口作通用I/O口的使用方法。
3. 掌握延时子程序的编写和使用方法。
4. 了解单片机对简单I/O的扩展方法。
4.1.4 实验内容实验1根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。
程序如下:KEY:MOV P1,#0F0H ;令所有行为低电平KEY1:MOV R7,#0FFH ;设置计数常数DJNZ R7,KEY1 ;延时MOV A, P1 ;读取P1口的列值ANL A,#0F0H ;判别有键值按下吗?CPL A ;求反后,有高电平就有键按下JZ EKEY ;无键按下时退出LCALL DEL20 ms ;延时20 ms去抖动SKEY:MOV A,#00 ;下面进行行扫描,1行1行扫MOV R0,A ;R0作为行计数器,开始为0MOV R1,A ;R1作为列计数器,开始为0MOV R3 #0FEH ;R3暂存行扫描字,低4位为行扫描字SKEY2:MOV A,R3MOV P1,A ;输出行扫描字,高4位全1NOPNOPNOPMOV A,P1 ;读列值MOV R1,A ;暂存列值ANL A,#0F0H ;取列值CPL A ;高电平则有键闭合S123:JNZ SKEY3 ;有键按下转SKEY3INC R0 ;行计数器加1SETB C ;准备将行扫描左移1位,;形成下一行扫描字,C=1保证输出行扫描字中高4位全为1,;为列输入作准备,低4位中只有1位为0MOV A,R3 ;R3带进位C左移1位RLC AMOV R3,A ;形成下一行扫描字→R3MOV A,R0CJNE A,#04H,SKEY1 ;最后一行扫(4次)完了吗?EKEY:RET;列号译码SKEY3:MOV A,R1JNB ACC.4,SKEY5JNB ACC.5,SKEY6JNB ACC.6,SKEY7JNB ACC.7,SKEY8AJMP EKEYSKEY5:MOV A,#00HMOV R2,A ;存0列号AJMP DKEYSKEY6:MOV A,#01HMOV R2,A ;存1列号AJMP DKEYSKEY7:MOV A,#02HMOV R2,A ;存2列号AJMP DKEYSKEY8:MOV A,#03HMOV R2,A ;存3列号AJMP DKEY;键位置译码DKEY:MOV A,R0 ;取行号ACALL DECODEAJMP EKEY;键值(键号)译码DECODE:MOV A,R0 ;取行号送AMOV B,#04H ;每一行按键个数MUL AB ;行号×按键数ADD A,R2 ;行号×按键数+列号=键值RET实验2根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P3.3口作状态输入口(接一个逻辑开关,即拨码开关),P1口做输入口(接八只发光二极管D0~D7)。
“任务三键控灯亮”实验报告
专业班级:姓名:
学号:实验日期:
一、实验目的
1. 了解MCS-51单片机4个并行I/O口的结构、功能和使用;
2. 掌握C51选择结构程序的设计。
二、实验内容
1. 利用开关控制LED的点亮与熄灭:当开关拨到1时,LED点亮;开关拨到0时,LED熄灭。
2. 利用开关控制LED的闪烁与点亮:当开关拨到1时,LED闪烁;当开关拨到0时,LED点亮。
3. 利用开关控制LED的闪烁与流水:当开关拨到1时,LED流水;当开关拨到0时,LED闪烁。
硬件连接:
外设单片机引脚
开关K0 P2.0
LED P1
三、实验结果
1. 画出单片机与开关、LED的连接原理图(请附上自己画的Proteus图的截图)。
2. 开关控制LED点亮与熄灭的程序(请附上C语言源程序的截图,并说明实验结果)。
3. 开关控制LED闪烁与点亮的程序(请附上C语言源程序的截图,并说明实验结果)。
4. 利用开关控制8个LED闪烁与流水的切换程序(请附上C语言源程序的截图,并说明实验结果)。
四、实验思考题
1. 若用单片机分别驱动继电器、蜂鸣器,电路如何设计?请查找资料,画出相应的电路原理图,并说明电路工作原理。
2. 单片机的准双向口和双向口的区别是什么?P0~P3口分别是准双向口还是双向口?
五、实验总结
请写一下实验心得体会,以及调试过程中遇到的问题,分析原因,如何解决?
1。
实验三、P1口亮灯实验
一、实验目的:
a)掌握keil及proteus的联合仿真方法
b)掌握并口的操作方法
c)掌握延时程序的编写
二、实验内容:
P1口做输出口,接八只发光二极管(低电平时发光),P0口接七段数码管,编
写程序,使发光二极管循环点亮。
请根据系统电路图,编写相应的程序并给予适
当的注释。
(一)实验要求:
z基本要求:
a)每个二极管每次点亮持续的时间约为一秒钟,假设使用的系统时钟频率为
12MHZ;
b)其中时间控制可以利用延时程序实现,也可以利用定时器实现;
c)正确连接电路,编写程序,调试运行,使发光二极管能够循环点亮;
d)通过Proteus7软件观察实验结果。
z提高要求:能够通过按键控制彩灯循环的模式。
(二)实验基本步骤:
1.打开Keil,新建工程:Project/New Project,输入工程名,并保存
2.选项选择器件:Atmel 的89C51
3.新建程序文本,并另存为该文件为汇编文件格式: (1)“File/New”,(2) File/Save
As/键入欲使用的文件名及后缀名,即“文件名.asm”。
再单击“保存”
4.添加该文件该工程:回到编辑界面后,单击“Target 1”前面的“+”号,然后
在“Source Group 1”上单击右键,单击“Add File to Group ‘Source Group 1’”
选择刚才新建的汇编文件。
5.设置工程该的options选项:projec / options for project,(1)output 选项卡中Create
HEX File 前打勾;(2)Debug 选项卡选择use“Proteus VSM simulator”。
6.用proteus的ISIS打开电路图P1.DSN
7.将proteus 里DEBUG /use remote debug monitor打勾
8.在keil的汇编文件中输入程序代码,并编译,调试。
(1)写完代码后单击“Project”
菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成
功后(0个errors),(每次修改程序后都要重新编译下,才能生效)。
(2)再单击
“Debug”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷
键Ctrl+F5),点击RUN进行运行。
9.观察运行结果:在proteus中点击运行按键,观测二极管是否循环点亮。
基本要求的参考代码
ORG 0000H
MAIN
LJMP
ORG
0030H
MAIN: MOV A, #01H
LP: MOV P1,A ; 点亮LED
LCALL DELAY; 延时
RL A;否则A左移,下一个灯闪烁
SJMP LP;循环不止
Delay: MOV R5,#0FH;;延时子程序DELAY1: MOV R3, #0FFH
DEL2: MOV R4,#0FFH
DJNZ R4, $
DJNZ R3, DEL2
DJNZ R5,DELAY1
RET
END。