MCU(微控制器)综合课程设计第三次实验

合集下载

实验三 微控制器实验

实验三 微控制器实验

实验三微控制器实验一. 实验目的1. 掌握时序产生器的组成原理。

2. 掌握微程序控制器的组成原理。

3. 掌握微程序的编制、写入,观察微程序的运行。

二. 实验设备CCT-IV计算机组成原理教学实验系统一台。

三.实验内容实验所用的时序电路原理如图3-1所示,可产生4个等间隔的时序信号TS1-TS4,其中Φ为时钟信号,由实验台右上方的方波信号源提供,可产生频率及脉宽可调的方波信号。

学生可根据实验自行选择方波信号的频率及脉宽。

为了便于控制程序的运行,时序电路发生器也设置了一个启停控制触发器Cr,使TS1-TS4信号输出可控。

图中STEP(单步)、STOP(停机)分别是来自实验板上方中部的一个微动开关START的按键信号。

当STEP开关为0时(EXEC),一旦按下启动键,运行触发器Cr一直处于“1”状态,因此时序信号TS1-TS4将周而复始地发送出去。

当STEP为1(STEP)时,一旦按下启动键,机器便处于单步运行状态,即此时只发送一个CPU周期的时序信号就停机。

利用单步方式,每次只读一条微指令,可以观察微指令的代码与当前微指令的执行结果。

另外,当机器连续运行时,如果STOP开关置“1”(STOP),也会使机器停机。

由于时序电器的内部线路已经连好,所以只需将时序电路与方波信号源连接(即将时序电路的时钟脉冲输入端Φ接至方波信号发生器输出端H23),时序电路的CLR已接至实验板左下方的CLR模拟开关上。

2. 微程序控制电路与微指令格式(1)微程序控制电路微程序控制器的组成见图3-2,其中控制存储器采用3片2816的E2PROM,具有掉电保护功能,微命令寄存器18位,用两片8D触发器(273)和一片4D(175)触发器组成。

微地址寄存器6位,用三片正沿触发的双D触发器(74)组成。

它们带有清“0”端和预置端。

在不判别测试的情况下,T2时刻打入微地址寄存器的内容即为下一条微指令地址。

当T4时刻进行测试判别时,转移逻辑满足条件后输出的负脉冲通过强置端将某一触发器置为“1”状态,完成地址修改。

《微控制器应用综合实验》实验指导书

《微控制器应用综合实验》实验指导书

《微控制器应用综合实验》实验指导书实验一 Altium Designer软件的基本操作一、实验目的1、熟悉软件的设计编辑界面。

2、熟悉原理图的菜单栏、工具栏及工作面板3、熟悉PCB编辑器的菜单栏、工具栏及工作面板4、学会并掌握原理图库文件中原理图符号的绘制方法。

5、学会创建PCB新元件。

二、实验内容本实验学习软件自带的参考设计 4 Port Serial Interface.PRJPCB,打开其中的原理图文件、PCB版图文件,原理图库文件和PCB库文件,了解相应的工作面板和工具栏,以及元器件属性的设置方法。

通过原理图符号以及PCB新元件的绘制,进一步掌握工具栏和菜单栏的使用。

三、实验设备和仪器1、PC机一台2、正版Altium Designer软件一套四、实验步骤参考实验指导书附录部分。

五、实验报告1、叙述实验步骤中图纸平移、缩放,对象的连线拖动和不连线拖动等操作的实现方法。

2、详述查找元器件TL16C554的具体步骤,和加载包含此元器件的集成库的方法。

3、详述在库面板中查找电阻、电容、二极管的具体步骤4、详述布线宽度的设置方法和电气设计中安全间距规则的设置方法4、详述绘制元器件1488_1的具体步骤。

5、详述绘制PCB元件DIP8的具体步骤。

附录:实验步骤1.打开PCB工程文件4 Port Serial Interface.PRJPCB, 该工程文件在\Altium Designer\ Examples\Reference Designs\4 Port Serial Interface 文件夹中2. 打开此工程中的原理图文件ISA Bus and Address Decoding.SchDoc3. 尝试使用视图菜单(View 菜单)的快捷键和工具栏来实现图纸显示区域的设置。

4. 使用鼠标进行图纸的平移和缩放。

5. 分别进行单个对象和多个对象的选择6. 分别实现所中对象的连线拖动和不连线拖动7. 双击其中一个元器件。

MCU及接口技术实验教程课程设计

MCU及接口技术实验教程课程设计

MCU及接口技术实验教程课程设计1. 简介本篇文档是关于MCU及接口技术实验教程课程设计的详细内容阐述。

该课程设计旨在帮助学生通过实践学习MCU的基本原理和应用,包括常见单片机架构、编程原理和MCU与外界接口的应用等方面。

2. 实验内容本课程设计共分为三个实验,分别是:•实验一:LED闪烁控制•实验二:按键中断控制LED亮灭•实验三:外部中断应用2.1 实验一:LED闪烁控制2.1.1 实验目的本实验旨在帮助学生熟悉MCU的基本编程方法,并掌握LED闪烁的控制方法。

2.1.2 实验原理LED是一种电子元件,主要用于信号指示、显示灯等。

为了控制LED的亮灭,需要连上MCU的GPIO口,并按照高、低电平控制LED的亮灭。

2.1.3 实验步骤1.确定MCU的GPIO口,将LED连接到GPIO口2.编写程序,配置GPIO口初值3.在主程序中设置循环控制,控制LED的亮灭4.下载程序,观察LED的闪烁状态2.1.4 实验结果经过实验,LED应该能够按照编写的程序进行闪烁,证明程序编写及控制方法正确。

2.2 实验二:按键中断控制LED亮灭2.2.1 实验目的本实验旨在帮助学生进一步掌握中断编程方法,了解按钮中断的使用方法。

2.2.2 实验原理按键中断控制LED亮灭是一种基础应用,可用于实现按钮控制开关灯等功能。

当MCU检测到按键按下时,会产生中断请求,MCU会在中断服务函数里面处理相关操作。

通过中断服务函数可以实现按钮控制LED 开关等功能。

2.2.3 实验步骤1.将按键与MCU的GPIO口相连2.配置按键对应GPIO口的中断方式3.编写程序,实现中断服务函数和控制LED亮灭的主函数4.下载程序,观察LED的亮灭状态2.2.4 实验结果经过实验,当按键按下时,LED灯能够根据设置的程序进行亮灭,证明按键中断控制LED亮灭方法正确。

2.3 实验三:外部中断应用2.3.1 实验目的本实验主要是让学生进一步了解外部中断的使用方法,并掌握外部中断的应用方法。

计算机组成原理实验报告三微程序控制器实验

计算机组成原理实验报告三微程序控制器实验

微程序控制器实验报告一、实验目的(1)掌握微程序控制器的功能、组成知识。

(2)掌握为程序的编制、写入、观察微程序的运行二、实验设备:PC机一台,TD-CM3+实验系统一套三、实验原理:微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以控制的硬件逻辑部件的为命令序列,完成数据传送和个汇总处理操作,他的执行方法是将控制各部件的微命令的集合进行编码,即将微命令的集合仿照及其指令一眼,用数字代码的形式表示,这种表示陈伟微指令。

这样就可以用一个微指令序列表示一条机器指令,这种为指令序列称作为程序。

微程序存储在一种专用的存储器中,成为控制储存器四、实验步骤1.对为控制器进行读写操作:(1)手动读写:①按图连线:②将MC单元编程开关置为“编程”档,时序单元状态开关置为“单步”档,ADDR 单元状态开关置为“置数”档③使用ADDR单元的低六位SA5…SA0给出微地址MA5…MA0,微地址可以通过MC 单元的MA5…MA0微地址灯显示④CON单元SD27…SD20,SD17…SD10,SD07…SD00开关上置24位微代码,待写入值由MC单元的M23…M024位LED灯显示⑤启动时序电路(按动一次TS按钮),即将微代码写入到E2PROM2816的相应地址对应单元中⑥重复③④⑤三步,将下图微代码写入2816芯片中二进制代码表(2)联机读写:①将微程序写入文件,联机软件提供了微程序下载功能,以代替手动读写微控制器,但微程序得以指定的格式写入本次试验的微程序如下:://************************************************************// :// // :// 微控器实验指令文件 // :// // ://************************************************************// ://***************Start Of MicroController Data****************//$M 00 000001;NOP$M 01 007070;CON(INS)->IR,P<1>$M 04 002405;R0->A$M 05 04B201;R0->B$M 30 001404;A加B->RO$M 32 183001;IN->R0$M 33 280401;R0->OUT$M 35 000035;NOP;//***************End Of MicroController Data*******************// ②写入微程序用联机软件的“【转存】-【装载数据】”功能将改格式文件装载入试验系统。

东南大学MSP实验报告第三,四次解析

东南大学MSP实验报告第三,四次解析

东南大学自动化学院实验报告课程名称: MCU技术及综合课程设计第 3 次实验实验名称:实验三:定时器输出PWM波形院(系):自动化学院专业:自动化姓名:杨淳元学号:08012131实验室:实验组别:同组人员:实验时间:2015年5月7日评定成绩:审阅教师:目录一、实验目的和要求 (2)二、实验原理 (2)三、实验方案与实验步骤 (6)四、实验设备与器材配置 (7)五、实验记录 (7)七、思考题或讨论题 (8)八、附上源代码 (9)一、实验目的和要求1) 实验目的(1) 学习MP430单片机的时钟原理和定时器使用方法。

(2) 认识学习PWM波形的作用及原理。

2) 实验要求编写程序输出1s周期的PWM波形,产生两路PWM波形从引脚P1.2和P1.3分别输出。

CCR0中的值定义了PWM信号的周期,CCR1,CCR2中的值定义了PWM信号的占空比。

定时使用32.768KHz的ACLK作为输入时钟源,P1.2上的占空比为75%,P1.3上的占空比为25%。

二、实验原理1)Timer_A定时器模块框图如图3-1所示。

由图3-1可知,Timer_A 模块可以有三种时钟源输入。

分别是ACLK,SMCLK,TAxCLK。

时钟源的选择通过TASSEL 信号来完成。

被选择的时钟源可以直接送给TIMER 模块,或者通过ID 信号进行2,4,8分频。

选择的时钟信号还可以通过TAIDEX 信号进一步做2,3,4,5,6,7 或者8 分频。

当TACLK 信号被设置的时候,TIMER 的时钟分频逻辑被复位。

图3-1 Timer_A 模块框图2)Timer A 控制寄存器TA0CTL详细定义如图3-2所示。

图3-2 Timer A 控制寄存器TA0CTL3)定时器中断的中断向量中包含一个独立中断和若干个共源中断,Timer_A模块的中断分类如图3-3所示。

图3-3 Timer_A模块的中断向量分类图1)独立中断源的中断处理TA0CCTL0 = CCIE; //CCR0 中断使能#pargma vector = TIMER0_A0_VECTOR //中断向量定义,可查询头文件得到__interrupt void TIMER0_A0_ISR(void){//添加中断处理代码}2)共源中断向量寄存器TAxIV图3-4共源中断向量寄存器TAxIV共源中断程序switch处理方式:#pragma vector=TIMER0_A0_VECTOR //共源中断入口__interrupt void TIMER0_A0_ISR(void){switch(__even_in_range(TA0IV,14)) //共源中断处理{case 0: fun_no(); break; // No interruptcase 2: fun_CCR1(); break; // CCR1 interruptcase 4: fun_CCR2(); break; // CCR2 interruptcase 6: fun_CCR3(); break; // CCR3 interruptcase 8: fun_CCR4(); break; // CCR4 interruptcase 10: fun_CCR5(); break; // CCR5 interruptcase 12: fun_CCR6(); break; // CCR6 interruptcase 14: fun_overflow(); break; // overflowdefault: fun_default(); break; // default}}3)PWM原理PWM 技术的三个要素,具体如图3-5所示, PWM频率计算见图3-6。

08011331郭劲廷mcu综合课程设计报告

08011331郭劲廷mcu综合课程设计报告

东南大学自动化学院MCU(微控制器)综合课程设计报告院(系):自动化专业:自动化姓名:郭劲廷学号:08011331实验室:电工电子MCU 实验组别:同组人员:实验时间:2014年 6 月2 日评定成绩:审阅教师:目录一、课程设计目的与要求(含设计指标) (3)二、原理设计(或基本原理) (3)三、方案论证(架构设计) (4)四、方案实现与测试 (6)五、分析与总结 (6)六、参考书目 .......................... 错误!未定义书签。

七、 C语言源代码....................... 错误!未定义书签。

一、课程设计目的与要求(含设计指标)1.设计目的秒表是常见的计时工具,生活中经常会用到。

具有开始计时,暂停,置零等功能。

如果是用于长跑计时的秒表,那么一般会具有可以计多个人的时间的功能,这一点可以再加一个按键然后使用数组存储数据实现。

通过使用c语言进行单片机语句的编写,要用到定时中断等知识。

2.设计功能要求本次课程设计以实现一个可以准确计时,可实现暂停置零和纪录多个时间为最终目的,并且计时精度要求达到0.1秒。

学会使用c语言进行编写,通过对各种指令的合理运用,熟悉对于各种指令的用法,学会会使用c语言设计各个模块。

要用到的模块有独立按键、数码管、定时中断、蜂鸣器。

3.功能简介BST-V51单片机实物图1.可实现计时功能,最大计时时间为99小时,最小计时单位为0.1秒。

2.支持暂停功能,按键盘中左下角的K1键,可暂停计时;按下K2,可继续计时。

3.支持置零功能,按下键盘左下角K3,可实现置零,无论是否暂停。

同时清除已纪录的时间。

4.每过一分钟蜂鸣器会发出一次很短的声音,代表已经计时一分钟,每次按键也有声音提示。

5.计时进行的同时再次按K2,可以记录当前时间,最多支持记录20个时间。

6.按K4可以查看已经纪录的时间,可暂停后查看,也可以直接查看。

7.晶振为11.0592M。

实验三 微控制器实验

实验三  微控制器实验

5. 微指令的基本格式 微指令的格式大体分成两类:水平型微指令和 垂直型微指令。水平型微指令的基本结构如下图 所示。微指令是由操作控制和顺序控制两大部分 组成 。
6 微程序控制器原理框图 微程序控制器主要由控制存储器、微指 令寄存器和地址转移逻辑三大部分组成。
数据通路结构框图
实验箱中的微指令格式
② 校验 A.将编程开关设置为READ(校验)状态。 B.将实验板的“STEP”开关置为“STEP”状 态。“STOP”开关置为“RUN”状态。 C.用二进制开关置好微地址MA5—MA0。 D.按动“START”键,启动时序电路,读出微 代码,观察显示灯MD24—MD1的状态(灯 亮为“0”,灭为“1”),检查读出的微代码 是否与写入的相同。如果不同,则将开关 置于PROM编程状态,重新执行①UA0)
三、实验仪器 TDN—CM+计算机组成原理教学实验系统一 台,排线若干,表笔一副。 四、实验步骤 (1) 准备表4-2的二进制代码表。 (2) 按图3-6连接实验线路,仔细查线无误后 接通电源。 (3) 观测时序信号 ⑷ 程序控制器的 工作原理(重点)
③ 单步运行 A.将编程开关置于“RUN”(运行)状态。 B.实验板上的“STEP”及“STOP”开关保持 原状。 C.操作CLR开关(拨动开关在实验板右下角) 使CLR信号1→0→1,微地址寄存器MA5— MA0清零,从而明确本机的运行入口微地 址00(八进制),000000(二进制)。 D.按动“START”键,启动时序电路,则每按 动一次启动键,读出一条微指令后停机, 此时实验台上的微地址显示灯和微命令显 示灯将显示所读出的一条指令。
④连续运行 A.将编程开关置为“RUN”(运行)状态。 B.将实验板的单步开关“STEP”置为“EXEC” 状态。 C.使CLR从1→0→1,此时微地址寄存器清 “0”,从而给出取指微指令的入口地址为 00(八进制)开始执行,000000(二进 制)。 D.启动时序电路,则可连续读出微指令。

mcu技术及课程设计

mcu技术及课程设计

mcu技术及课程设计一、课程目标知识目标:1. 理解MCU(微控制器单元)的基本概念、结构与功能;2. 掌握MCU在工程应用中的基本原理;3. 学习并掌握与MCU相关的编程语言及开发环境;4. 了解我国在MCU领域的发展现状及趋势。

技能目标:1. 能够运用所学知识进行简单的MCU程序设计;2. 能够利用开发工具对MCU程序进行调试和优化;3. 能够运用MCU技术解决实际问题,具备初步的创新意识和实践能力;4. 能够进行团队协作,共同完成项目任务。

情感态度价值观目标:1. 培养学生对MCU技术及相关领域的兴趣和热情;2. 培养学生严谨的科学态度和良好的学习习惯;3. 增强学生的国家意识,认识到我国在科技领域取得的成就;4. 培养学生的创新精神、团队合作精神和责任感。

分析课程性质、学生特点和教学要求,本课程旨在使学生在掌握MCU技术基本知识的基础上,提高实际操作能力和解决实际问题的能力。

通过本课程的学习,学生将能够独立完成简单的MCU程序设计,并为后续深入学习打下坚实基础。

同时,注重培养学生的情感态度和价值观,使他们在学习过程中形成正确的科技观念和价值观。

将课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. MCU概述- 了解MCU的发展历程、分类及应用领域;- 学习MCU的基本结构、功能及性能参数。

2. MCU编程语言及开发环境- 掌握C语言基础,为MCU编程打下基础;- 学习并熟练使用主流的MCU开发工具及环境。

3. MCU原理与设计- 学习MCU的工作原理、指令系统及外围电路设计;- 掌握I/O口、定时器、中断等MCU资源的使用。

4. MCU程序设计与调试- 学习并实践简单的MCU程序设计;- 掌握程序调试方法,如断点调试、单步执行等。

5. MCU应用案例分析- 分析并学习典型的MCU应用案例,如智能家居、物联网等;- 结合实际案例,培养学生的创新意识和实践能力。

6. 团队协作与项目实践- 分组进行项目实践,培养学生的团队合作精神;- 完成项目任务,提高学生解决实际问题的能力。

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

东南大学自动化学院实验报告课程名称: MCU(微控制器)综合课程设计第三次实验实验名称:定时中断实验、键盘输入与显示综合实验院(系):自动化专业:自动化姓名:学号:08009000实验室:电工电子MCU 实验组别:同组人员:实验时间:2012年 5 月2 日评定成绩:审阅教师:目录一、实验目的和要求(如合作完成,需注明分工) (3)二、实验原理 (3)三、实验方案与实验步骤 (4)四、实验设备与器材配置 (7)五、实验记录(自行设计记录方式) (7)六、实验总结(包括实验数据处理、实验结果分析讨论等) (9)七、思考题或讨论题(若干) (9)八、附上源代码(注意实验只能采用汇编语言实现) (10)一、实验目的和要求(如合作完成,需注明分工)1. 掌握定时器的使用2. 掌握中断的使用,并能够使用定时器进行定时中断3. 掌握中断程序编写的方法和注意点4. 掌握键盘扫描的实现、编程5. 在上次实验基础上,实现数码管的显示6. 掌握CPLD控制LED灯的方法7. 能够使用汇编语言实现复杂的逻辑功能8. 学习模块化编程分工:定时中断实验(包括扩展部分):****编写代码,共同调试键盘输入与显示综合实验:****编写代码,共同调试二、实验原理1. 定时中断实验利用单片机定时器中断,控制单片机P0.0口输出一50Hz的方波。

结果可采用示波器显示。

提高要求(选做可加分):实现50Hz的PWM波的输出,可以采用某个拨码开关选择不同的PWM占空比(例如某个拨码状态为0时表示占空比为40%,状态为1时表示占空比为80%),拨码开关地址为0F500H,位于LED灯下排。

2. 键盘输入与显示综合实验利用4*4键盘输入,在通过CPLD译码与CPU总线相连的8位LED上显示键码值(实验箱上有两排LED,这里指的是下面一排,无需连线),并在8位数码管上显示输入的数字。

电路如图3-1所示。

键盘矩阵输入电路采用行列扫描法实现。

将行线接输出口,列线接到输入口,采用列扫描法,先将某一行输出为低电平,其它行输出为高电平,用输入口来查询列线上的电平,逐次读入列值,如果行线上的值为0时,列线上的值也为0,则表明有按键按下。

否则,接着读入下一列,直到找到该行有按下的键为止。

如该行没有找到有按键按下,就按此方法逐行找下去,直到扫描完全部的行和列。

4*4键盘示意图与CPU总线相连的8位LED地址为0F600H,数码管段控地址为0F300H,位控地址为0F400H。

4*4键盘地址为0F700H,其中行线对应该地址的低4位数据,只可以写不可以读;而列线对应高4位数据,只可以读不可以写。

键码表如下所示:(由于键盘可能会调整,不一定正确,请按照实际情况自己确定,这里仅键码表中,ExH 表示键码值的高4位为E ,低4位未知,这表示的是选通第1条行线。

xEH 表示低4位为E ,高4位未知,表示的是选通第1条列线。

故而第一条行线和第一条列线交叉处的键C 的键码值为0EEH 。

其它键以此类推。

三、 实验方案与实验步骤1. 定时中断实验简单的实现,无扩展部分扩展部分的流程图:2. 键盘输入与显示综合实验四、实验设备与器材配置1. PC机一台2. 红色仿真盒一个3. 实验平台一个键盘拨码盘下排LED灯数码管五、实验记录(自行设计记录方式)1. 定时中断实验接线方式:使用了拨码盘,由于内部寻址读取不可用,将拨码盘连接I/O口P3,通过P3第四位读取拨码盘的第四位,进行控制。

可变占空比的方波,输出波形:10%30%50%70%90%2. 键盘输入与显示综合实验六、实验总结(包括实验数据处理、实验结果分析讨论等)本次实验,主要针对定时器使用和键盘使用。

编程方面,主要针对中断的使用。

第一个实验,基础部分针对定时器和定时器的中断,需要对定时器进行初始值、控制寄存器设定,还需要将特殊的控制字比如允许中断的控制字等进行相应的设置。

在编程时,还需要在中断向量的地方给出具体的中断向量,编写相应的中断处理程序。

对于中断程序,必须要进行堆栈设置,因为中断产生需要保存断点,将PC的值入栈,待中断结束再将PC值出栈。

第一个程序的扩展部分,需要对程序灵活操作,由于拨码盘的地址无法读入拨码盘,因此将拨码盘通过通用I/O口读入。

键盘综合程序,主要进行了键盘的扫描。

除了键盘扫描,编程中需要将键盘码转换成具体的数字,因此需要查表转换,需要一定的变成灵活性。

程序中还需要使用数码管,使用方法和之前程序相同,而且不需要扫描输出,因此比较简单。

七、思考题或讨论题(若干)1. 数据可以放在哪里?放在哪里合适?为什么?答:数据可以放在除了系统保留、中断向量区、堆栈区以外的地方。

数据最好放在整个程序的最尾部。

我们在调试代码时,需要对某一些语句进行跟踪观察执行结果,因此,我们总希望代码的地址更好地查询,而且能够更快的得到。

但是,数据一般占用较多的地方,如果把数据放在程序的开始部位或者是中间部位,都会使得代码的地址很难确定,因而在调试时会使得查找某条具体语句变得复杂。

当数据放在所有的代码之后,此时就不会过多的影响前面的代码。

2. 设置堆栈有什么用处?答:1. 中断产生时,用于保存断点,即PC的值,以便于中断程序返回时,能够回到原来的需要执行程序。

2. 中断产生时,用于保护中断之前的现场,需要结合push语句使用,需要注意,在中断结束时,也需要相应的pop语句恢复现场,否则会出现堆栈错误。

3. 用于程序中需要临时存储变量的时候。

3. 如何一次性判断是否有按键?答:给行对应的四位都写低,此时,从电路上看,如果有按键按下,那么,肯定会有某一列的输出时低电平,这时,读入列值,将会有一列是低电平,其他列是高电平,那么,列值对应的四位就不是全为1,那么读入的列值四位将小于F。

如果没有按键,那么所有列读入的值都是1,列值就是F,所以,只需要将列值跟F对比,只要不是F,或者说,只要小于F,就有按键,等于或者不小于F时,就没有按键。

对应的代码如下:MOV A,#0F0H ;给行值全部输出为0,即低电平MOV DPTR,#0F700H ;键盘地址MOVX @DPTR,A ;输出到行值MOVX A,@DPTR ;读入列值ANL A,#0F0H ;忽略低位,只看列值读入的值CJNE A,#0F0H,NEW_KEY ;比较,如果有按键,那就有不是高电平的位,则和F不相等,或者说是比F小,那就跳转出去LJMP BEGIN ;没有读到有按键,继续循环4. 如何实现根据拨码盘的输入输出不同的占空比波形?答:我们在中断程序里主要是给定时器新的计时初值,并且将输出反转。

对于不同的占空比,高电平输出时间和低电平输出的时间是不同,因此,我们必须要解决在不同的电平输出时给定时器不同的计数初值。

解决这个问题,可以通过判断原来的输出值,来决定给下一个计数初值。

我们将一个占空比对应的高电平计数初值、低电平计数初值放在一起,共有四字节,当判断要输出高字节,那就取前二字节,否则就取后二字节。

根据读入拨码盘的数值,取计数初值。

但是由于一个占空比的计数初值共有四字节,因此,读入的拨码盘值需要变成四倍。

这样就能够实现变占空比的波形输出。

八、附上源代码(注意实验只能采用汇编语言实现)1. 定时中断实验ORG 0000HLJMP MAIN ;主程序ORG 001BHLJMP INTORG 0100HMAIN:MOV SP,60H ;预设堆栈区MOV TMOD,#01HMOV R7,#0D8HMOV R6,#0F0HMOV TH1,R7 ;计时10 000周期即1101 1000 1111 0000B MOV TL1,R6SETB EA ;开中断SETB ET1 ;定时器1允许中断SETB TR1 ;定时开始HERE: ;CALL DELAY;CPL P0.0SJMP HEREINT:MOV TH1,R7 ;计时10 000周期即1101 1000 1111 0000B MOV TL1,R6CPL P0.0 ;取反RETIEND定时中断实验扩展部分代码:ORG 0000HLJMP MAIN ;主程序ORG 001BH ;LJMP INTORG 0100HPWM:DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0F8H,30H,0B9H,0B0H ;10%DB 0F0H,60H,0C1H,80H ;20%DB 0E8H,90H,0C9H,50H ;30%DB 0E0H,0C0H,0D1H,20H ;40%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D1H,20H,0E0H,0C0H ;60%DB 0C9H,50H,0E8H,90H ;70%DB 0C1H,80H,0F0H,60H ;80%DB 0B9H,0B0H,0F8H,30H ;90%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D8H,0F0H,0D8H,0F0H ;50%DB 0D8H,0F0H,0D8H,0F0H ;50%;10%:63536,47536,F830H,B9B0H;20%,61536,49536,F060H,C180H;30%,59536,51536,E890H,C950H;40%,57536,53536,E0C0H,D120H;50%,55536,D8F0HMAIN:MOV SP,60H ;预设堆栈区MOV TMOD,#01H ;计数方式1MOV R7,#0D8HMOV R6,#0F0HMOV TH1,R7 ;计时10 000周期即1101 1000 1111 0000BMOV TL1,R6SETB EA ;开中断SETB ET1 ;定时器1允许中断SETB TR1 ;定时开始CLR CBEGIN:;MOV DPTR,#0F500H;MOVX A,@DPTRMOV A,P3ANL A,#0FH ;避免高位扰动MOV R5,AADD A,R5ADD A,R5ADD A,R5 ;给首址;MOV R4,AJMP BEGININT:MOV DPTR,#PWMMOV C,P0.0JC ZEROMOV A,R4MOVC A,@A+DPTRMOV R7,AMOV A,R4INC AMOVC A,@A+DPTRMOV R6,ASJMP OKZERO:MOV A,#02HADD A,R4MOVC A,@A+DPTRMOV R7,AMOV A,R4INC AMOVC A,@A+DPTRMOV R6,AOK:MOV TH1,R7MOV TL1,R6CPL P0.0 ;按位取反RETIEND2. 键盘输入与显示综合实验ORG 0000HLJMP MAINORG 0100HKEY_CODE: DB 7EH,7DH,7BH,77H,0BEH,0BDH,0BBH,0B7H,0DEH,0DDH,0DBH,0D7H,0EEH,0EDH,0EBH,0 E7HTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;段码;由于读进来的是一种键盘码的码,需要和代表的数字对应起来,只能是查表;本数据是按照0-F的顺序排列的,位置就是数字值MAIN:MOV SP,#60HBEGIN:MOV A,#0F0HMOV DPTR,#0F700H;键盘地址MOVX @DPTR,AMOVX A,@DPTRANL A,#0F0H ;忽略低位CJNE A,#0F0H,NEW_KEY ;比较,如果有按键,那就有不是高电平的LJMP BEGIN;没有按键,继续循环NEW_KEY:MOV A,#0FEH ;1111 1110MOV R7,#04HKEY_LOOP:PUSH ACCMOV DPTR,#0F700HMOVX @DPTR,AMOVX A,@DPTRANL A,#0F0HCJNE A,#0F0H,NEW_KEY1 ;如果有按键,那么就不是都是高电平,跳转POP ACCRL A ;移位DJNZ R7,KEY_LOOP ;判断,只有四位,循环四次JMP BEGIN ;没找到按键,回到最初NEW_KEY1:MOV R6,A ;找到按键,保存目前的列值POP ACC ;弹出原来保存的行值ANL A,#0FH ;清空高位ADD A,R6;得到键盘码MOV R5,A ;保存起来MOV DPTR,#0F600H ;输出给LED灯CPL AMOVX @DPTR,AMOV DPTR,#KEY_CODE ;开始循环查找键盘码对应的数字MOV R7,#10H ;循环16次MOV R6,#00H ;记录是第几个按键,也可以不用,最后用16-R7也可以,但还得用这个作为偏移量LOOP:MOV DPTR,#KEY_CODEMOV A,R6 ;偏移量MOVC A,@A+DPTR ;取数据MOV R4,A ;MOV A,R5 ;CLR C ;SUBB A,R4 ;JZ KEY_OK ;INC R6DJNZ R7,LOOPJMP BEGINKEY_OK:MOV A,R6MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0F300HMOVX @DPTR,AMOV A,#00HMOV DPTR,#0F400HMOVX @DPTR,AJMP BEGINEND。

相关文档
最新文档