松翰单片机指定位置,unsigned char 长度buffer[32] _at_0xE0,哪里错了

列表网公众号列表活动随时有扫我活动不错过
品牌 松雅型号 SD-312颜色分类 SD-313专业版
送豪礼 SD-312经典款 送豪礼 SD-313 专业版 SD-31
微信扫一扫快速获取电话
带开关电源双声道(立体声)
系列数字功放具有性能稳定、音质优美、信噪比高、全自动保护,效率高,低温工作,最大程度降低整
微信扫一扫快速获取电话
品牌 松雅型号 s-313颜色分类 SD-313专业版
送豪礼 SD-312经典款 送豪礼 SD-313 专业版 SD-312
微信扫一扫快速获取电话
系列数字功放具有性能稳定、音质优美、信噪比高、全自动保护,效率高,低温工作,最大程度降低整机生产成本,其功能可根据整机厂
微信扫一扫快速获取电话
系列数字功放具有性能稳定、音质优美、信噪比高、全自动保护,效率高,低温工作,最大程度降低整机生产成本,其功能可根据整机厂
微信扫一扫快速获取电话
功放采用本公司最新的功放+高速开关电源电路,具有显著的成本优势、保密性能和强有力的市场竞争潜质。自带跟踪式高效率的开关电源,具有
微信扫一扫快速获取电话
温工作,最大程度降低整机生产成本,其功能可根据整机厂的要求设计生产,是开发新产品、更新产品、节约开发周期的最佳配套产品。
微信扫一扫快速获取电话
品牌 松雅 songya型号 SY-703A颜色分类 网影RMVB组合音响(紅色) 网影RMVB组合音响(白色) 网影RMVB组
微信扫一扫快速获取电话
带开关电源双声道(立体声)
系列数字功放具有性能稳定、音质优美、信噪比高、全自动保护,效率高,低温工作,最大程度降低整
微信扫一扫快速获取电话
系列数字功放具有性能稳定、音质优美、信噪比高、全自动保护,效率高,低温工作,最大程度降低整机生产成本,其功能可根据整机厂
微信扫一扫快速获取电话
品牌 松雅型号 sy-605颜色分类 全新正品 品質保障 2013進化版 定時關機功能功能 DVD播放声道 2扩展接口 USB
微信扫一扫快速获取电话
1、在不同的模式下,设备按规定模式工作,对应的指示 符号灯会亮。标准与省电模式工作时,灯光、氧泵、杀菌可手动强制开和关,但过几分
微信扫一扫快速获取电话
回收ATMEL单片机IC 收购ATMEL艾特梅尔芯片 深圳回收ATMEGA8,惠州回收ATMEGA16 东莞收购ATME64 江
微信扫一扫快速获取电话
RO反渗透膜(有效滤除重金属、无机盐类、水垢、油烟、有机物等,过滤精度高达0.0001微米,自能有水分子通过)智能显屏(监控水质
微信扫一扫快速获取电话
欢迎-松雅集成灶售后服务维修网站各中心咨询电话-访问
24小时服务
服务范围各城区2.jpg欢迎访问~松雅集成灶售后服务网
微信扫一扫快速获取电话
烟台翔宇空调制冷工程有限公司主要经营格力品牌系列空调,家用电器等。格力旗下品牌--大松电器,此款加湿器产品特点:细腻雾化,经久耐
微信扫一扫快速获取电话
微信扫一扫快速获取电话
感谢您能在百忙之中关注并了解澳斯贝拉!我们将与您一起走进烹饪新纪元,谱写美味新乐章! 本公司主要生产中西餐、快餐,小吃等营业或时
微信扫一扫快速获取电话
也可以联系实全店
地址:东莞市虎门镇白沙管理区站前路1-8号(格力中央空调)
微信扫一扫快速获取电话
nbspnbspnbsp主要参数:产品名称: 吊顶(挂壁)工业除湿机产品型号:CD系列产品特点:风量范围 500mdash500
微信扫一扫快速获取电话
背部按摩能提高人体免疫,尤其适合于中老年的养生保健,其原理是:人体背部的脊柱两侧分布着丰富的脊神经和许多重要穴位,与人体内脏器官
微信扫一扫快速获取电话
中国著名品牌松维牌
微信扫一扫快速获取电话
注:邮费补差额地区(或不包邮地区)包括:新疆,内蒙古,甘肃,西藏,云南,台湾,香港,澳门,海外。偏远地区购买前请联系客服!
微信扫一扫快速获取电话
汉越 精彩为您 汉越 为您精彩南京汉越电子科技有限公司隶属南京汉越集团,南京汉越集团是一家集产品研发和生产,品牌代理,品牌营销,
微信扫一扫快速获取电话
腕式舒压助眠器型号:SD-C02-7nbspnbsp●nbsp功能说明自然睡眠机是一项全新专利保健产品,可有效改善失眠问题。依据
微信扫一扫快速获取电话
汉越 精彩为您 汉越 为您精彩
微信扫一扫快速获取电话
松霸科技成立于2003年,是一家集研发,生产,销售和品牌运作于一体的高新技术电器生产制造商,产品经过CE,UL,F
微信扫一扫快速获取电话
15W高档导轨灯(轨道灯)采用了整体散热设计,外壳参与散热,前置通风孔,与后端空隙形成对流,更有效的散热,整体外壳参与散热,散热
微信扫一扫快速获取电话
腕式舒压助眠器型号:SD-C02-7nbspnbsp●nbsp功能说明自然睡眠机是一项全新专利保健产品,可有效改善失眠问题。依据
微信扫一扫快速获取电话
大气式燃气灶具精湛的制造工艺带来非凡的品质nbspnbspJZ(Y.R.T)1-D2外形尺寸:420times320mm开孔尺寸
微信扫一扫快速获取电话
●促进血液循环,明显改善足底麻木●波浪型按摩手法nbsp●自然腿部美容●红外线加热nbspnbspnbspnbsp●腿部揉捏功能
微信扫一扫快速获取电话
电子生物止鼾器,腕式电子止鼾器型号:SD-C02-5工作原理nbspnbspnbsp止鼾器是一项革命性的创新设计,当患者鼾声响起
微信扫一扫快速获取电话
量大价优,请致24小时热线:陈S 苏R:QQ:MSNweishidun公司主页:http//www.weiston.connbs
微信扫一扫快速获取电话
商品名称水牛角按摩笔/点穴笔/拨筋棒/按摩器/松筋棒美容棒nbspnbspnbspnbspnbspnbsp商品编号G1-1商品规
微信扫一扫快速获取电话
室 一角此款翻转微电脑控制华夫饼机,适合家用,商用,量大批发客户可旺旺联系。。。。
微信扫一扫快速获取电话
nbspFD??号缺货,请选择另外一种型号nbsp也可以联系实体店
地址:东莞市虎门镇白沙管理区站前路1-8号(格力中央空调)
微信扫一扫快速获取电话
nbsp多功能汽车按摩垫nbspnbspnbspnbsp微电脑汽车按摩坐垫-家车两用nbsp本产品美国最为流行的按摩垫设计方案.
微信扫一扫快速获取电话
微信扫一扫快速获取电话
【产品信息】:产品品牌:hairwins/凯永斯产品型号:HW-821A产品颜色:灰色尺寸描述
产品总长27.5cm,发热体9
微信扫一扫快速获取电话
温度:50℃~230℃电压:220V功率:1250W产品尺寸:mm)纸箱规格:mm)毛重:6.7KG
微信扫一扫快速获取电话
松翰单片机相关厂家:
松翰单片机周边分类:
&2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-& 违法信息举报电话 400-当前位置: >>
单片机原理及应用(C语言版)(周国运)习题答案
单片机原理及应用(C 语言版) 思考题与习题答案第1章1.什么是单片机? 答:将中央处理器(Central Processing Unit,CPU) 、随机存储器、 只读存储器、 中断系统、 定时器/计数器以及 I/O 接口电路等微型计算 机的主要部件集成在一块芯片上,使其具有计算机的基本功能,就叫 做单片微型计算机(Single Chip Micro Computer,SCMC) ,简称单片 机。由于单片机的指令功能是按照工业控制的要求设计,所以单片机 又称为微控制器(Micro Controller Unit,MCU) 。单片机概述2.单片机有哪些特点? 答: (1)单片机的存储器 ROM 和 RAM 是严格区分的。ROM 称 为程序存储器,只存放程序、固定常数及数据表格。RAM 则为数据 存储器,用作工作区及存放用户数据。 (2)采用面向控制的指令系统。 (3)单片机的 I/O 引脚通常是多功能的。 (4)单片机的外部扩展能力强。 (5)单片机体积小,成本低,运用灵活,易于产品化。 (6)面向控制,能有针对性地解决从简单到复杂的各类控制任务, 因而能获得最佳的性能价格比。 (7)抗干扰能力强,适用温度范围宽。 (8)可以方便地实现多机和分布式控制,使整个控制系统的效率和 可靠性大为提高。3.单片机的应用有哪些? 答: (1)工业控制。单片机可以构成各种工业控制系统、数据采 集系统等。如数控机床、自动生产线控制、电机控制、测控系统等。 (2)仪器仪表。如智能仪表、医疗器械、数字示波器等。 (3)计算机外部设备与智能接口。如图形终端机、传真机、复印机、 打印机、绘图仪、磁盘/磁带机、智能终端机等。 (4)商用产品。如自动售货机、电子收款机、电子秤等。 (5)家用电器。如微波炉、电视机、空调、洗衣机、录像机、音响 设备等。 (6)消费类电子产品。 (7)通讯设备和网络设备。 (8)儿童智能玩具。 (9)汽车、建筑机械、飞机等大型机械设备。 (10)智能楼宇设备。 (11)交通控制设备。4.常见的单片机有哪些类型? 答: 1.AVR 单片机;2.Motorola 单片机;3.MicroChip 单片机; 4.Scenix 单片机;5.EPSON 单片机;7.GMS90 单片机;8.华邦 单片机 9.Zilog 单片机;10.NS 单片机;11.AX1001 单片机 第2章MCS-51 单片机结构与原理1.MCS-51 单片机内部包含哪些主要逻辑功能部件? 答:(1)1 个 8 位的微处理器 CPU。 (2)8KB 的片内程序存储器 Flash ROM(51 子系列的 Flash ROM 为 4KB) ,用于烧录运行的程序、常数数据。 (3)256B 的片内数据存储器 RAM(51 子系列的 RAM 为 128B) , 在程序运行时可以随时写入数据和读出, 用于存放函数相互传递的数 据、接收的外部数据、中间结果、最后结果以及显示的数据等。 (4)3 个 16 位的定时器/计数器(51 子系列仅有 2 个定时器) ,每个 定时器/计数器可以设置为计数方式,用于对外部事件信号进行计数, 也可以设置为定时方式,满足各种定时要求。 (5)有一个管理 6 个中断源(51 子系列 1 是 5 个中断源) 、两个优 先级的中断控制器。 (6)4 个 8 位并行 I/O 端,每个端口既可以用作输入,也可以用于输 出。 (7)一个全双工的 UART(通用异步接收发送器)串行 I/O 口,用 于单片机之间的串行通信,或者单片机与 PC 机、其它设备、其它芯 片之间的串行通信。 (8)片内振荡电路和时钟发生器,只需外面接上一晶振或输入振荡 信号就可产生单片机所需要的各种时钟信号。 (9)有一个可寻址 64KB 外部数据存储器、还可以寻址 64KB 外部 程序存储器的三总线的控制电路。2.MCS-51 单片机的 EA 引脚有何功能?信号为何种电平? 答: EA 为片外程序存储器选择输入端。该引脚为低电平时,使用 片外程序存储器,为高电平时,使用片内程序存储器。3.MCS-51 单片机的 ALE 引脚有何功能?信号波形是什么? 答: ALE 为地址锁存信号,每个机器周期输出两个正脉冲。在访 问片外存储器时,下降沿用于控制外接的地址锁存器锁存从 P0 口输 出的低 8 位地址。在没有接外部存储器时,可以将该引脚的输出作为 时钟信号使用。4. MCS-51 单片机的存储器分为哪几个空间?如何区分不同空间 的寻址? 答: MCS-51 单片机有 4 个存储空间,它们是片内程序存储器和数 据存储器,在片外可以扩展的程序存储器和数据存储器。这 4 个存储 空间可以分成三类:片内数据存储空间(256B 的 RAM 和 128B 的特 殊功能寄存器) 、片外数据存储空间(64KB) 、片内和片外统一编址 的程序存储空间(64KB) 。不同的存储空间,它们有各自的寻址方式 和访问指令。片内数据存储空间用 MOV 指令访问。片外数据存储空 间用 MOVX 指令访问。片内和片外统一编址的程序存储空间用 MOVC 指令访问。 5. 简述 MCS-51 单片机片内 RAM 的空间分配。 内部 RAM 低 128 字节分为哪几个主要部分?各部分主要功能是什么? 答: 片内数据存储器按照寻址方式,可以分为三个部分:低 128 字节数据区,高 128 字节数据区间,特殊功能寄存器区。低 128 字节 数据区分为三个区域:工作寄存器区,位寻找区和通用数据区。工作 寄存器区 4 组工作寄存器;位寻找区既可以做位操作,也可以字节操 作;通用数据区用于堆栈和存放程序运行时的数据和中间结果。6.简述 MCS-51 单片机布尔处理器存储空间分配,片内 RAM 包 含哪些可以位寻址的单元。 位地址 7DH 与字节地址 7DH 如何区别? 位地址 7DH 具体在片内 RAM 中的什么位置? 答:低 128 字节数据区的位寻找区和高 128 字节数据区的某些可位 寻址的特殊功能寄存器。 位地址 7DH 与字节地址 7DH 可通过不同的 指令来区别,位地址 7DH 用位寻址指令来访问,字节地址 7DH 用字 节寻址指令来访问,位地址 7DH 在低 128 字节数据区的位寻找区的 2FH 字节。7.MCS-51 单片机的程序状态寄存器 PSW 的作用是什么?常用 标志有哪些位?作用是什么? 答:PSW 是一个 8 位寄存器,用于设定 CPU 的状态和指示指令执 行后的状态。 CY(PSW.7) :进位标志。在执行加减运算指令时,如果运算结果 的最高位(D7)发生了进位或借位,则 CY 由硬件自动置 1。 AC(PSW.6) :半进位标志位,也称为辅助标志位。在执行加减运 算指令时,如果运算结果的低半字节(D3)发生了向高半字节进位 或借位,则 AC 由硬件自动置 1。 F0、F1(PSW.5 和 PSW.1) :用户标志位。用户可以根据需要对 F0、F1 赋予一定的含义,由用户置 1 和清 0,作为软件标志。 RS1、RS0(PSW.4 和 PSW.3) :工作寄存器组选择控制位。通过 对这两位设定, 可以从 4 个工作寄存器组中选择一组作为当前工作寄 存器。 OV(PSW.2) :溢出标志位,有两种情况影响该位。一是执行加 减运算时,如果 D7 或 D6 任一位,并且只一位发生了进位或借位, 则 OV 自动置 1, P(PSW.0) :奇偶标志位。每条指令执行完后,该位都会指示当 前累加器 A 中 1 的个数。如果 A 中有奇数个 1,则 P 自动置 1。8.MCS-51 单片机复位后,CPU 使用哪组工作寄存器?它们的 地址是什么?用户如何改变当前工作寄存器组? 答: MCS-51 单片机复位后,CPU 使用 0 组工作寄存器。它们的地 址是 00H~07H。通过程序状态字 PSW 中的 RS1、RS0 标志位改变当 前工作寄存器组。 9.什么叫堆栈?堆栈指针 SP 的作用是什么? 答: 堆栈是在 RAM 专门开辟的一个特殊用途的存储区。 堆栈是按 照“先进后出”(即先进入堆栈的数据后移出堆栈)的原则存取数据。 堆栈指针 SP 是一个 8 位寄存器,其值为栈顶的地址,即指向栈顶, SP 为访问堆栈的间址寄存器。10.PC 与 DPTR 各有哪些特点?有何异同? 答: PC 与 DPTR 都是 16 位的寄存器。 由两个 8 位的计数器 PCH PC 和 PCL 组成。PC 实际是程序的字节地址计数器,它的内容是将要执 行的下一条指令的地址,具有自加 1 功能。改变 PC 的内容就可以改 变程序执行的方向。DPTR 的高字节寄存器用 DPH 表示,低字节寄 存器用 DPL 表示。DPTR 既可以作为一个 16 位寄存器使用,也可以 作为两个独立的 8 位寄存器使用。DPTR 主要用于存放 16 位地址, 以便对 64KB 的片外 RAM 和 64KB 的程序存储空间作间接访问。11.测试哪个引脚,可以快捷地判断单片机是否正在工作? 答: 若要检查单片机是否工作,可以使用示波器查看 ALE 引脚是 否有脉冲信号输出。12.读端口锁存器和“读引脚”有何不同?各使用哪些指令? 答: 一种是读取锁存器原来的输出值,另一种情况是打开端口的 缓冲器读取引脚上的信号,读端口锁存器,用 MOV A,Pi 指令。“读 引脚”,要先用 MOV Pi,#0FFH 对相应端口写 FFH,使输出场效应管 T 截止,才能够正确输入,再用 MOV A,Pi 指令。13. MCS-51 单片机的 P0~P3 口结构有何不同?用作通用 I/O 口 输入数据时应注意什么? 答: P2 口是一个双功能口,一是通用 I/O 口,二是以总线方式访 问外部存储器时作为高 8 位地址口。其端口某一位的结构如图 2-11 所示,对比图 2-10 知,与 P1 口的结构类似,驱动部分基本上与 P1 口相同,但比 P1 口多了一个多路切换开关 MUX 和反相器 3。P3 口 是一个多功能口,其某一位的结构见图 2-12。与 P1 口的结构相比不 难看出,P3 口与 P1 口的差别在于多了“与非门”3 和缓冲器 4。正是 这两个部分,使得 P3 口除了具有 P1 口的准双向 I/O 口的功能之外, 还可以使用各引脚所具有的第 2 功能。P0 多了一路总线输出(地址/ 数据) 、总线输出控制电路(反相器 3 和与门 4) 、两路输出切换开关 MUX 及开关控制 C,并且把上拉电阻换成了场效应管 T1,以增加总 线的驱动能力。用作通用 I/O 口输入数据时应注意要先用 MOV Pi,#0FFH 对相应端口写 FFH,使输出场效应管 T 截止,才能够正确 输入。14.P0 口用作通用 I/O 口输出数据时应注意什么? 答: P0 口与其它端口不同,它的输出级无上拉电阻。当把它用作 通用 I/O 口时,输出级是开漏电路,故用其输出去驱动 NMOS 输入 时外接上拉电阻,这时每一位输出可以驱动 4 个 LS 型 TTL 负载。用 作输入时,应先向端口锁存器写 1。15.什么叫时钟周期?什么叫机器周期?什么叫指令周期?时钟 周期、机器周期与振荡周期之间有什么关系? 答: 时钟周期即振荡周期:为晶振的振荡周期,是最小的时序单 位。状态周期:是振荡频率 2 分频后的时钟周期。显然,一个状态周 期包含 2 个振荡周期。机器周期(MC) 个机器周期由 6 个状态周 :1 期、即 12 个振荡周期组成,是量度指令执行时间的单位。指令周期: 是执行一条指令所需要的时间。一个指令周期由 1~4 个机器周期组 成。16.MCS-51 单片机常用的复位电路有哪些?复位后机器的初始 状态如何? 答: 复位电路有两种方式:上电自动复位电路和手动复位电路。 复位后,程序计数器 PC 变为 0000H,使单片机从程序存储器地址 0000H 单元开始执行。除 P0~P3 为 FFH;SP 为 07H;SBUF 为不确 定。大部分特殊功能寄存器清零。17.MCS-51 单片机有几种低功耗工作方式?如何实现,又如何 退出? 答: MCS-51 单片机有空闲和掉电两种低功耗工作方式。当 CPU 执行完置 IDL=1 的指令后,系统就进入空闲方式。进入空闲方式之 后,有两种方法可以退出。一种是任何中断请求被响应都可以由硬件 将 IDL 位清 0 而结束空闲方式。另一种退出空闲方式的方法是硬件 复位。当 CPU 执行完置 PD=1 的指令后,系统就进入掉电工作方式。 对于一般的单片机来说,退出掉电方式的唯一方法是由硬件复位。 第3章MCS-51 指令系统及汇编程序设计1.简述 MCS-51 汇编指令格式。 答: MCS-51 汇编语言指令由四部分组成,其一般格式如下: [标号:] 操作码 [操作数] [;注释]格式中的方括号意为可以没有相应部分,可以没有标号、操作数和注 释,至少要有操作码。其操作数部分最多可以是两项: [第 1 操作数] [,第 2 操作数]2.何谓寻址方式?MCS-51 单片机有哪些寻址方式,是怎样操作 的?各种寻址方式的寻址空间和范围是什么? 答: MCS-51 单片机有 7 种寻址方式:立即数寻址、寄存器寻址、 直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。可以分 为两类:操作数寻址和指令寻址。 立即数寻址的寻址空间和范围是: 在程序存储空间, 随指令读入 MOV A,#46H 直接寻址的寻址空间和范围是:片内 RAM 中,低 128 字节和 SFR MOV A,46H 寄存器寻址的寻址空间和范围是:使用 R0~R7、A、B、C、DPTR MOV A,R2 寄存器间接寻址的寻址空间和范围是:片内 RAM:使用@Ri,SP; 范围为 256B,不含 SFR,片外 RAM:使用@Ri,@DPTR;范围为 64KB MOV A,@R0 MOVX A,@DPTR 变址寻址的寻址空间和范围是:使用@A+PC,@A+DPTR;在程序 存储器中; 范围分别为 PC 之后 256B 之内和 64KB 全空间 MOVC @A+DPTR 位寻址的寻址空间和范围是:使用位地址;在位寻址空间;RAM 的 20H~2FH 和 SFR SETB 36H A ,指令绝对寻址的寻址空间和范围是:操作数是目标地址;在程序存储 空间; 范围为 2KB 或 64KB 全空间 AJMP FIRST LJMP SECON指令相对寻址的寻址空间和范围是:操作数是相对地址;在程序存储 空间;范围128~127 SJMP LOOP3. 访问片内 RAM 低 128 字节使用哪些寻址方式?访问片内 RAM 高 128 字节使用什么寻址方式?访问 SFR 使用什么寻址方式? 答: 访问片内 RAM 低 128 字节使用直接寻址,寄存器间接寻址, 位寻址;访问片内 RAM 高 128 字节使用寄存器间接寻址;访问 SFR 使用直接寻址,位寻址。4.访问片外 RAM 使用什么寻址方式? 答: 访问片外 RAM 使用寄存器间接寻址 5. 访问程序存储器使用什么寻址方式?指令跳转使用什么寻址方 式? 答: 访问程序存储器使用指令绝对寻址,指令相对寻址。指令跳 转使用指令绝对寻址,指令相对寻址。6.分析下面指令是否正确,并说明理由。 MOV R3,R7 MOV B,@R2 DEC DPTR 错,两个操作数不能同时为工作寄存器 对 错,不存在 错,位传送指令必须用 CMOV 20H.8,F0 PUSH DPTR CPL 36H错,不存在MOV PC,#0800H 错,PC 不能访问7.分析下面各组指令,区分它们的不同之处。 MOV A,30H 与 MOV A,#30H前者表示: (30H)→A 后者表示:30H→A MOV A,R0 与 MOV A,@R0前者表示: (R0)→A 后者表示:(R0) ( )→A MOV A,@R1 与 MOVX A,@R1前者表示:在片内数据存储器( (R1) )→A 后者表示:在片外数据存储器( (R1) )→A MOVXA,@R0与MOVXA,@DPTR前者 R0 表示 8 位地址 后者 DPTR 表示 16 位地址 MOVX A,@DPTR 与 MOVC A,@A+DPTR前者表示:(DPTR) ( )→A 后者表示:(DPTR)+(A) ( )→A8. MCS-51 单片机的片内 RAM 中, 在 已知 (30H) =38H, (38H) =40H, (40H)=48H, (48H)=90H。请说明下面各是什么指令和寻 址方式,以及每条指令执行后目的操作数的结果。 MOV A,40H MOV R0,A MOV P1,#0FH MOV @R0,30H ;数据传送,直接寻址, (A)=48H ;数据传送,寄存器寻址, (R0)=48H ;数据传送,立即数寻址, (P1)=0FH ;数据传送,直接寻址, (48H)=38HMOV DPTR,#1234H ;数据传送,立即数寻址, (DPTR)=1234H MOV 40H,30H MOV R0,38H MOV P0,R0 MOV 28H,#30H MOV A,@R0 ;数据传送,直接寻址, (40H)=38H ;数据传送,直接寻址, (R0)=40H ;数据传送,直接寻址, (P0)=40H ;数据传送,立即数寻址, (28H)=30H ;数据传送,寄存器间接寻址, (A)=38H9.已知(A)=23H, (R1)=65H, (DPTR)=1FECH,片内 RAM (65H)=70H, ROM(205CH)=64H。试分析下列各条指令执行 后目标操作数的内容。 MOV A,@R1 MOVX MOVC @DPTR,A A,@A+DPTR; (A)=70H ; (1FECH)=70H ; (A)=64HXCHD A,@R1; (A)=65H10.已知(A)=76H, (R1)=76H, (B)=4,CY=1,片内 RAM (76H)=0D0H, (80H)=6CH。试分析下列各条指令执行后目标操 作数的内容和相应标志位的值。 ADD A,@R1 ; (A)=46H,CY=1 ; (A)=0D0H,CY=1 ; (A)=40H, (B)=03H ; (A)=15H, (B)=01H ; (76H)=50HSUBB A,#75H MUL DIV ANL ORL XRL AB AB76H,#76HA,#0FH ; (A)=1FH 80H,A ; (80H)=73H11.已知(A)=83H, (R0)=17H, (17H)=34H,试分析当执 行完下面程序段后累加器 A、R0、17H 单元的内容。 ANL ORL XRL CPL A,#17H ; (A)=03H 17H,A ; (17H)=37HA,@R0 ; (A)=34H A ; (A)=0CBH 12.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV R7,#10 CLR LOOP: MOV @R0,A INC INC A R0 ADJNZ R7,LOOP SJMP $ 答:把 0,1,2,3……数列送到 40H 开始的 10 个单元中。13.阅读下面程序段,说明该段程序的功能。 MOV R0,#40H MOV A,R0 INC ADD R0 A,@R0MOV 43H,A CLR AADDC A,#0 MOV 42H,A SJMP $ 答:40H 加 41H 单元的数,结果送 42H:43H14.阅读下面程序段,说明该段程序的功能。 MOV A,30H MOV B,#5 MUL ADD AB A,31HMOV 33H,A CLR AADDC A,B MOV 32H,A SJMP $ 答:(30H)× 5+(31H)→(32H:33H)15.编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2) ∨P1.3”的逻辑功能。 MOV C,P1.1 ANL C,P1.2 ORL C,P1.0 ORL C,P1.3 MOV P1.3,C 16.编写程序,若累加器 A 的内容分别满足下列条件,则程序转 到 LABLE 存储单元。设 A 中存放的的无符号数。 (1)A≥10; (1) CJNE A,#10,NEXT LJMP LABLE NEXT: JNC LABLE (2) CJNE A,#10,NEXT LJMP NEXT2 NEXT: JNC LABLE NEXT2: (3) CJNE A,#10,NEXT LJMP LABLE NEXT: JC LABLE (2)A>10; (3)A≤10。17.编写程序,查找片内 RAM 的 30H~50H 单元中是否有 55H 这一数据,若有,则 51H 单元置为 FFH;若未找到,则将 51H 单元 清 0。 MOV R0,29H NEXT: INC R0 CJNE R0,#51H,NEXT2 MOV 51H,#0FFH AJMP OVER NEXT2: CJNE @R0,#55H,NEXT MOV 51H,#0 OVER:18.编写程序,查找片内 RAM 的 30H~50H 单元中出现 0 的次 数,并将查找的结果存入 51H 单元。 MOV R0,30H MOV 51H,#0 NEXT: CJNE @R0,#00H,NEXT2 INC 51H NEXT2: INC R0 CJNE R0,#51H,NEXT19.在片外 RAM 中有一个数据块,存有若干字符、数字,首地 址为 SOURCE 要求将该数据块传送到片内 RAM 以 DIST 开始的区 域,直到遇到字符“$”时结束($也要传送,它的 ASCII 码为 24H) 。 MOV DPTR,#SOURCE MOV R0,#DIST NEXT: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 CINE A,#24H,NEXT20.片内 RAM 的 30H 和 31H 单元中存放着一个 16 位的二进制 数,高位在前,低位在后。编写程序对其求补,并存回原处。 CLR C MOV A,#0 SUBB A,31H MOV 31H,A MOV A,#0 SUBB A,30H MOV 30H,A21. 片内 RAM 中有两个 4 字节压缩的 BCD 码形式存放的十进制 数, 一个存放在 30H~33H 单元中, 另一个存放在 40H~43H 单元中。 编写程序将它们相加,结果的 BCD 码存放在 30H~33H 中。 CLR C MOV R0,#30H MOV R1,#40H MOV R2,#4 NEXT: MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,NEXT22.编写程序,把片外 RAM 从 2000H 开始存放的 16 字节数据, 传送到片内从 30H 开始的单元中。 MOV DPTR,#2000H MOV R0,#30H MOV R1,#0 NEXT: MOVX A,@DPTR MOV @R0,A INC DPTR INC R0 INC R1 CINE R1,#16H,NEXT 第4章单片机 C 语言及程序设计1.用 C51 编程较汇编语言有哪些优势? 答:(1)编程容易 (2)容易实现复杂的数值计算 (3)容易阅读、调试、维护程序 (4)容易实现模块化开发 (5)程序可移植性好2.C51 字节数据、 整型数据以及长整型数据在存储器中的存储方 式各是怎样的? 答:字符变量(char)无论是 unsigned char 数据还是 signed char 数 据,均为 1 个字节,即 8 位,因此被直接存储在 RAM 中,可能存储 在 0~0x7f 区域(包括位寻址区域) ,也可能存储在 0x80~0xff 区域, 与变量的定义有关。 整型变量(int)不管是 unsigned int 数据还是 signed int 数据,均为 2 个字节,即 16 位,其存储方法是高位字节保存在低地址(在前面) , 低位字节保存在高地址(在后面) 。 长整型变量(long)为 4 个字节,即 32 位,其存储方法与整型数据 一样,是最高位字节保存的地址最低(在最前面) ,最低位字节保存 的地址最高(在最后面) 。 3. C51 定义变量的一般格式是什么?变量的 4 种属性是什么?特 别要注意存储区属性。 答:[存储类型] 数据类型 [存储区] 变量名 1[=初值] [,变量名 2[=初 值]] [,…] 变量的 4 种属性是存储类型,数据类型,存储区,变量名4. C51 的数据存储区域类型有哪些?各种存储区域类型是哪种存 储空间,存储范围是什么?如何将变量定义存储到确定的位置? 答:bit 片内数据区的位寻找区,位地址 0x00~0x7f,128 位(字节 地址 0x20~0x2f) data 直接寻址片内数据区的低 128 字节bdata 片内数据区的位寻址区 0x20~0x2f,也可字节访问,16 字节 idata 间接寻址片内数据区的 256 字节,与 MOV @Ri 对应pdata 分页寻址片外数据区的 256 字节,与 MOVX @Ri 对应,P2 不变 xdata 片外数据区的全空间,64KB code 全部程序存储空间,64KB绝对定位关键字_at_ ,指针,库函数的绝对定位宏。5. C51 位变量的定义格式是什么?如何定义 bdata 型字节变量的 位变量? 答:[存储类型] bit 位变量名 1[=初值] [, 位变量名 2[=初值]] [,…] sbit 位变量名 = bdata 型变量名^位号常数6.如何定义 8 位字节型特殊功能寄存器?如何定义 16 位特殊功 能寄存器?如何定义特殊功能寄存器的位变量? 答:sfr sfr16 sbit 特殊功能寄存器名 = 地址常数 特殊功能寄存器名 = 地址常数 位变量名 = 特殊功能寄存器名^位号常数7. C51 专用指针定义的一般格式是什么?如何确定专用指针定义 的指向空间和指针变量本身存储的空间? 答:[存储类型] 数据类型 指向存储区 *[指针存储区] 指针名 1 [,*[指针存储区] 指针名 2,…] *的左面是指向存储区,*的右面是指针存储区8. C51 函数定义的一般形式是什么?如何定义中断处理程序?如 何选择工作寄存器组? 答:返回类型 函数名(形参表) [函数模式] [reentrant][interrupt m] [using n] { 局部变量定义 执行语句 } [interrupt m]字段中的 m 定义中断处理程序的中断号 [using n]字段中的 n 选择工作寄存器组9.在 C51 中,对汇编语言函数的命名规则是怎样的,具体地说: 不传递参数的函数名格式是什么?通过寄存器传递参数的函数名格 式是什么?传递参数重入函数的函数名格式是什么? 答:?PR?函数名?模块名 ?PR?_函数名?模块名 ?PR?_?函数名?模块名 //不传递参数 //通过寄存器传递参数 //对重入函数通过堆栈传递参数10.在 C51 中,函数返回值传递的规则是什么? 答:(1)调用时参数的传递 分三种情况:少于等于 3 个参数时通过寄存器传递(寄存器不够用时 通过存储区传递) ,多于 3 个时有一部分通过存储区传递,对于重入 函数参数通过堆栈传递。通过寄存器传递速度最快。 (2)函数返回值的传递 当函数有返回值时,其传递都是通过寄存器11.在 C51 中,怎样嵌入汇编语言程序?怎样进行处理实现混合 编程? 答:其方法是用编译控制指令“#pragma src”、“#pragma asm”和 “#pragma endasm”实现。编译控制命令“#pragma src”是控制编译器将 C 源文件编译成汇编文件, “#pragma src”要放在文件的开始; “#pragma asm”和“#pragma endasm”指示汇编语言程序的开始和结束,分别放在 汇编程序段的前面和后面。 对于函数的调用方法,与调用汇编语言中的函数一样, 在 C 语言文件中调用汇编语言中的函数,必须先声明再调用。声明 格式如下: extern 返回值类型 函数名(参数表) ;12. C51 中如何定义模块名?在 C51 文件中的模块名是什么? 在 答:模块定义格式如下: NAME 模块名13.在汇编语言文件中:怎样声明函数段?怎样声明公共函数? 怎样声明引用函数?怎样声明引用变量?定义函数的格式是什么? 答:对本模块定义的函数段作声明,其格式为: ?PR?函数名?模块名 SEGMENT CODE 公共函数声明。声明格式为: PUBLIC 函数名引用声明。声明格式为: EXTRN CODE(函数名) 引用声明。声明格式为: EXTRN存储区域类型(变量名)汇编语言函数的格式如下: RSEG ?PR?函数名?模块名 函数名:14.在 C51 中怎样把函数定义到确定的位置? 答:对函数的定位方法, CSEG AT 001BH15.如何在 C51 文件和汇编语言文件中相互调用对方文件中的函 数? 答:汇编语言文件中对于函数的调用方法,与调用汇编语言中的函 数一样,如: LCALL DISPLAY在 C 语言文件中调用汇编语言中的函数,必须先声明再调用。声明 格式如下: extern 返回值类型 例如: extern unsigned 函数名(参数表) ; char right_shift ( char, char );16.在 C51 中,如何访问 DATA 空间、PDATA 空间、XDATA 空间、CODE 空间某个确定地址单元? 答:用指针定义的访问存储器的宏 使用时需要用预处理命令把该头文件包含到文件中, 形式为: #include &absacc.h&。 (1)按字节访问存储器宏的形式 宏名[地址] (2)按整型数访问存储器宏的形式 宏名[下标]17.在某程序中需要定义如下变量: ( 1 ) 定 义 数 码 管 的 显 示 0~9 的 共 阴 极 显 示 代 码 ( 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07, 0x7f, 0x6f ) 数 组 dis_code,将其定义在 CODE 区。 (2)定义定时器/计数器 0 的赋计数值的高、低字节变量 TL0_L 和 TH0_H,将其定义在 DATA 去区的 0x30、0x31 处。 (3)定义长度为 20 的无符号字符型数组 data_buf 于 IDATA 区中。 (4) 定义长度为 100 的无符号字符型数组 data_array 于 XDATA 区中。 (5)先定义一个无符号字符型变量 status 于 BDATA 区中,再定义 8 个 与 status 的 8 个 位 对 应 的 位 变 量 flag_lamp1 、 flag_lamp2 、 flag_machine1 、flag_machine2 、flag_port1 、flag_port2 、flag_calcu1 和 calcu2(从低位到高位) 。 答 : ( 1 ) unsigned char code dis_code[10]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f}; (2)unsigned char data TL0_L _at_ 0x30, TH0_H _at_ 0x31; (3)unsigned (4)unsigned (5)unsigned char char char idata data_buf[20];xdata data_array[100]; bdata status;sbit flag_lamp1=status^0; sbit flag_lamp2=status^1; sbit flag_machine1=status^2; sbit flag_machine2=status^3; sbit flag_port1=status^4; sbit flag_port2=status^5; sbit flag_calcu1=status^6; sbit flag_calcu2=status^7;18.在 89C52 单片机中增加了定时器/计数器 2(T2) ,修改头文 件“REG51.H”,添加如下内容: (1)特殊功能寄存器 T2CON、T2MOD、RCAP2L、RCAP2H、TL2、 TH2,地址分别为 0xc8~ 0xcd。 (2)对 T2CON 的 8 个位分别定义位变量 CP_RL2、C_T2、TR2、 EXEN2、TCLK、RCLK、EXF2、和 TF2(从低位到高位) 。 (3)定义位变量 T2、T2EX 对应于 P1 口的第 0 位和第 1 位;定义位 变量 ET2 对应于 EI 的第 5 位;定义位变量 PT2 对应于 IP 的第 5 位; (4)对 P1 口的 8 个位分别定义位变量 P0_0、P0_1、P0_2、P0_3、 P0_4、P0_5、P0_6 和 P0_7(从低位到高位) 。 答:(1) sfr T2CON=0xc8; sfr T2MOD=0xc9; sfr RCAP2L=0 sfr RCAP2H=0 sfr TL2=0 sfr TH2=0 (2) sbit CP_RL2=T2CON^0; sbit C_T2=T2CON^1; sbit TR2=T2CON^2; sbit EXEN2=T2CON^3; sbit TCLK=T2CON^4; sbit RCLK=T2CON^5; sbit EXF2=T2CON^6; sbit TF2=T2CON^7; (3) sbit T2=P1^0; sbit T2EX=P1^1; sbit ET2=EI^5; sbit PT2=IP^5; (4) sbit P0_0=P0^0; sbit P0_1=P0^1; sbit P0_2=P0^2; sbit P0_3=P0^3; sbit P0_4=P0^4; sbit P0_5=P0^5; sbit P0_6=P0^6; sbit P0_7=P0^7;19.编写一 C51 函数,把从键盘输入的 5 位十进制数数转换成一 个无符号整型数(假设未超出整型数范围) 。设从键盘输入的数存放 在一无符号数组中,低位数为低下标元素。 unsigned char data key_buffer[5]; unsigned int trans_int(void) {
unsigned int data temp=0; for(i=0;i&5;i++) { temp=temp*10+key_buffer[i]-0x30; }
}20.编写一 C51 函数,把一整型数按十进制数将其各位分离,分 离后放在一无符号数组中, 便于显示。 要求把低位数作为低下标元素。 unsigned char data shu[5]; void main(unsigned int x) { for(i=0;i&4;i++) { shu[i]=temp%10; temp=temp/10; } shu[4]= }21.编写一 C51 函数,使用专用指针,把片外数据存储器中从 0x100 开始的 30 个字节数据,传送到片内从 0x40 开始的区域中。 void main() { unsigned char data i,* unsigned char xdata * dpt=0x40; xdpt=0x100; for(i=0;i&30;i++) *(dpt+i)=*(xdpt+i); }22.编写一 C51 程序,实现从 P1 口输出产生的流水灯,要求用 汇编语言函数实现数据左移或右移。 #pragma src #include &at89x52.h& void main() { unsigned char temp,i; while(1) { temp=0x55; P1= delay(); #pragma asm MOV A,temp RR A MOV temp,A #pragma endasm P1= delay(); } }23. 某单片机系统的 P2 口接一数模转换器 DAC0832 输出模拟量, 现在要求从 DAC0832 输出连续的三角波,实现的方法是从 P2 口连 续输出按照三角波变化的数值,从 0 开始逐渐增大,到某一最大值后 逐渐减小,直到 0,然后再从 0 逐渐增大,一直这样输出。试编写一 函数,使从 P2 口输出的值产生三角波,并且使三角波的周期和最大 值通过入口参数能够改变。 #include&absacc.h& #define DAC0832 XBYTE[0x7FFF] void san(unsigned char max1,unsigned char zhou1) { unsigned char i,j,max, max=max1; zhou=zhou1; while(1) { for(i=0;i&=max,i++) { DAC0832=i; for(j=0;j&zhou/j++) delay(); } for(i=max-1;i&0,i--) { DAC0832=i; for(j=0;j&zhou/j++) delay(); } }24.在数字滤波中有一种叫做“中值滤波”技术,就是对采集的数 据按照从大到小或者从小到大进行排序, 然后取其中在中间位置的数 作为采样值。试编写一函数,对存放在片内数据存储器中从 0x50 开 始的 20 个单元的采样数据用冒泡法排序进行中值滤波,把得到的采 样数据存放到 0x4f 单元中。 void midf() { unsigned char data temp,i,j,*ptr,*ptr1; ptr=0x50; ptr1=0x4f; for(j=20;j&1,j--) { for(i=0;i&j;i++) { if(*(ptr+i)&*(ptr+i+1)) { temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)= } } } *ptr1=*(ptr+20/2); }25.在数字滤波中有一种叫做“去极值平均滤波”技术,就是对采 集的数据按照从大到小或者从小到大进行排序, 然后去掉相同数目的 极大值和极小值,对中间部分数据求算术平均值作为采样值。试编写 一函数,对存放在片外数据存储器中从 0x150 开始的 16 个单元的采 样数据,用选择法进行“去极值平均滤波”,把得到的采样数据存放到 0x14f 单元中。 void teaf() { unsigned char xdata * unsigned char data temp,i,j,*ptr1; ptr=0x150; ptr1=0x4f; for(j=16;j&1,j--) { for(i=0;i&j;i++) { if(*(ptr+i)&*(ptr+i+1)) { temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)= } } } temp=0; for(i=0;i&16-2;i++) temp=temp+*(ptr+i+1); *ptr1=temp/(16-2); }26. 利用库函数_getkey 编写一函数, 实现从单片机串行口接收数 据的 C51 程序,把接收的数据存放在片内数据存储器从 0x40 开始的 区域,遇到回车符 CR(ASCII 码是 0x0d)结束。 include &stdio.h& void main() { unsigned char data * unsigned char i=0, dpt=0x40; while(1) { temp=_getchar(); if(temp==0x0d) *(dpt+i)= i++; } } 27.利用库函数 scanf 编写一函数,实现从单片机串行口接收数 据的 C51 程序,把接收的数据存放在片外数据存储器从 0x240 开始 的区域,遇到回车符 CR(ASCII 码是 0x0d)结束。 include &stdio.h& void main() { unsigned char xdata * unsigned char i=0, xdpt=0x240; while(1) { scanf(“%c”,&temp); if(temp==0x0d) *(xdpt+i)= i++; } }28.利用库函数 putchar 编写一函数,实现从单片机串行口发送 数据的 C51 程序,发送的数据存放在片内数据存储器从 0x50 开始的 区域,遇到回车符 CR(ASCII 码是 0x0d)结束。 include &stdio.h& void main() { unsigned char data * unsigned char i=0; dpt=0x50; while(*(dpt+i)!=0x0d) { putchar(*(dpt+i)); i++; } }29.利用库函数 printf 编写一函数,实现从单片机串行口发送数 据的 C51 程序,发送的数据存放在片外数据存储器从 0x100 开始的 区域,遇到回车符 CR(ASCII 码是 0x0d)结束。 include &stdio.h& void main() { unsigned char xdata * unsigned char i=0; xdpt=0x100; while(*(xdpt+i)!=0x0d) { printf(“%c”,*(xdpt+i)); i++; } }30. 编写一定时器/计数器 0 定时 100ms 中断处理函数, 使函数实 现时钟的功能,即产生时钟的秒、分钟和小时。设定时初值的高、低 字节分别为 TIMER_H 和 TIMER_L。 设 fosc=6mhz #include &reg52.h& sfr TIMER_H=0x8b; sfr TIMER_L=0x8a; unsigned char data shi,fen,miao,void main() { TMOD=0x01; TIMER_H=15536/16; TIMER_L=15536%16; ET0=1; EA=1; TR0=1; while(1); }void time0_int() interrupt 1 { TIMER_H=15536/16; TIMER_L=15536%16; bfm++; if(bfm==10) { bfm=0; miao++; } if(miao==60) { miao=0; fen++; } if(fen==60) { fen=0; shi++; } if(shi==24) { shi=0; } }31.在 Keill C 的调试状态下,如何使用跟踪运行、单步运行、跳 出函数运行命令? 答:Step 命令和 Step Over 命令的区别:当遇到调用函数时,前者 将跟踪进入函数,而后者是一步执行完函数。 如果用全速运行命令 Go,可以使用 Stop Running 命令停止运行。 欲退出调试状态,可以再次点击 Debug 菜单下的 Start/Stop Debug Session 命令或相应的按钮。32.在 Keill C 的调试状态下,如何设置断点和删除断点? 答:方法 1:用鼠标双击。在需要设置的行的最前面,双击鼠标左 键,即可设置或清除断点。 方法 2:用命令或命令按钮。先将光标移到需要设置的行,然后点击 Debug 菜单下的 Insert/Remove Breakpoint 命令或工具栏中的相应按 钮,即可设置或清除断点。 另外还有断点禁用和全部清除命令及按钮。33.在 Keill C 的调试状态下,如何观察和修改寄存器? 答:寄存器窗口、在线帮助窗口和工程管理器是同一个窗口,在工 程管理器窗口下包含 3 个标签,即包含 3 个区域。在调试状态下,点 击 View 菜单下的 Project Window 命令或对应的按钮,就会显示或隐 藏工程管理器窗口,然后点击窗口下边的寄存器标签,即显示出寄存 器窗口。 除了 sec 和 states 之外,其它寄存器的值都可以改变。改变的方式有 两种:一是用鼠标直接点击左键进行修改;二是在调试命令窗口直接 输入寄存器的值, 如输入“A=0x32”, 则寄存器 A 的值立即显示 0x32。34.在 Keill C 的调试状态下,如何观察和修改变量? 答:在调试状态下, 点击 View 菜单下的 Watch & Call Stack Window 命令或对应的按钮,就会显示出或隐藏起变量窗口。变量窗口包含有 4 个标签,即 4 个显示区,可以分别显示局部变量(Locals 标签) 、 指定变量(Watch #1 和 Watch #2 两个标签) 、及堆栈调用(Call Stack 标签) 。 在局部变量区,显示的是当前函数中的变量,这些变量不用设置,自 动出现在窗口中。为了观察其它变量,可以在 Watch#1 或 Watch#2 标签按 F2 输入变量名。在程序运行中,可以观察这些显示的变量的 变化,也可以用鼠标点击修改它们的值。 另外还有更简单的方法观察变量的值,在程序停止运行时,将光标放 到要观察的变量上停大约 1 秒,就会出现对应变量的当前值,如 operate=0x32。35. Keill C 的调试状态下, 在 如何观察和修改 data 区、 idata 区、 xdata 区的数据?如何观察 code 区的数据? 答:在调试状态下, 点击 View 菜单下的 Memory Window 命令或对 应的按钮,就会显示出或隐藏起存储器窗口。存储器窗口包含 4 个标 签,即 4 个显示区,分别是 Memory#1、…、Memory#4。 在 4 个显示区上边的“Address”栏输入不同类型的地址,可以观察不 同的存储区域。 1)设置观察片内 RAM 直接寻址的 data 区,在 Address 栏输入 D:xx (xx 为十六进制的两位数,下同) ,便显示从 xx 地址开始的数据。 高 128 字节显示的是特殊功能寄存器的内容。 2)设置观察片内 RAM 间接寻址的 idata 区,在 Address 栏输入 I:xx, 便显示从 xx 地址开始的数据。 128 字节显示的也是数据区的内容, 高 而不是特殊功能寄存器的内容。 3)设置观察片外 RAM xdata 区,在 Address 栏输入 X:xxxx,便显示 从 xxxx 地址开始的数据。 4)设置观察程序存储器 ROM code 区,在 Address 栏输入 C:xxxx, 便显示从 xxxx 地址开始的程序代码。 在显示区域中,默认的显示形式为十六进制的字节。 除了程序存储器中的数据不能修改之外, 其它 3 个区域的数据均可修 改。修改方法是,用鼠标对准欲修改的单元,点击鼠标右键,在弹出 的菜单中对 Modify Memory at 0x…命令点击鼠标左键,会弹出的文 本输入栏输入数据,然后用鼠标左键点击“OK”即可。36.在 Keill C 的调试状态下,如何观察各个片内外设的运行状 态?如何修改它们的设置? 答:在调试状态下,点击 Peripherals 菜单下的不同外设选项命令, 就会显示或隐藏对应外设的观察窗口。如显示定时器 0 窗口,点击 Peripherals 菜单下的 Timer 下面的 Timer0 选项,便会显示出定时器/ 计数器 0 状态窗口。 在程序运行时,各个片内外设的状态会不断地变化,为了随时观察它 们的变化,可以启用 View 菜单下的 Periodic Windows Update 命令, 让 Keil C 自动周期刷新各个调试窗口。 另外, 也可以在窗口中对设备 直接进行设置,与程序中的命令设置一样,并且立即生效。 第5章MCS-51 单片机的中断系统1.什么是中断和中断系统?计算机采用中断系统带来了哪些优越 性? 答:当 CPU 当 CPU 正在处理某事件的时候,外部或者内部发生的 某一事件请求 CPU 迅速去处理,于是 CPU 暂时中止当前的工作,转 去处理所发生的事件。中断服务处理完该事件后,再返回到原来被中 止的地方继续原来的工作,这样的过程称为中断。 1.CPU 与外设同步工作 2.实时处理 3.故障处理2.MCS-51 共有几个中断源?各中断标志是如何产生的, 又如何清 零的?CPU 响应中断时,中断入口地址各是多少? 答:MCS-51 共有 5 个中断源。 各中断标志是通过中断请求产生的, 通过指令或硬件清零的。CPU 响应中断时,中断入口地址各是 03H,0BH,13H,1BH,23H。3.编写一段对中断系统那个初始化的程序, 使之允许 INT0、 INT1、 T1、串行口中断,且使串行口中断为高优先级。 EX0=1; EX1=1; ET1=1; ES=1; EA=1; PS=1;4.什么是中断优先级?什么是中断嵌套?处理中断优先级的原则 是? 答:中断响应的优先次序是中断优先级。当一个中断处理的过程中 又响应了更高优先级的中断是中断嵌套。 处理中断优先级的原则是先 高级中断,后低级中断。同级的按自然优先级排序。5.MCS-51 在什么情况下可以响应中断?中断响应的过程是? 答:响应中断的条件 (1)中断源有中断请求; (2)中断总允许位 EA=1; (3)请求中断的中断源的中断允许位为 1; 在满足以上条件的基础上,若有下列任何一种情况存在,中断响应都 会受到阻断。 (1)CPU 正在执行一个同级或高优先级的中断服务程序。 (2)正在执行的指令尚未执行完。 (3)正在执行中断返回指令 RETI 或者对专用寄存器 IE、IP 进行读/写 的指令。CPU 在执行完上述指令之后,要再执行一条指令,才能响 应中断请求。 中断请求被响应后,有内部长调用(LCALL)将程序转向对应的中 断矢量地址,执行执行中断服务程序。6.中断响应过程中,为什么通常要保护现场?如何保护和哪些信 息要进行保护? 答:因为中断服务程序会用到寄存器和存储器的数据会被覆盖,而 中断是要返回的,所以通常要保护现场。方法是把要保护的内容压入 到堆栈。7.MCS-51 的 ROM 中,应如何安排程序区? 答:程序区从 00H 到 32H 的存储区依次存放主程序入口和各中断 服务程序的入口。8.外部中断触发方式有几种?它们的特点是什么? 答:外部中断触发方式有 2 种。 它们的特点是低电平触发方式,边沿 触发方式,上一个机器周期检测为高电平,接下来的下一个机器周期 为低电平。9.中断系统的初始化一般包括哪些内容? 答:开相应中断允许,开总中断允许,设置中断优先级。 10.中断响应的时间是否使确定不变的?为什么?在实际以用中 应如何考虑这一因素? 答:中断响应的时间不是确定不变的。因为中断发生的位置是不确 定的。在实际应用中对实时性要求高的场合要考虑这一因素,合理安 排程序。11.在中断请求有效并开中断的状况下,能否保证立即响应中断? 有什么条件? 答:在中断请求有效并开中断的状况下,不能保证立即响应中断。 如果要立即响应中断必须是当前指令的最后周期, 没有同级或更高级 中断发生,下一条指令不是 RETI 或者对专用寄存器 IE、IP 进行读/ 写的指令。12.中断服务程序与普通子程序有什么根本的区别? 答:中断服务程序是随机发生的,结束后要返回断点。 普通子程序是安排好的,没有断点。13.为什么要用 RETI 指令结束中断服务程序?RETI 指令的功能 是什么?为什么不用 RET 指令作为中断服务程序的返回指令? 答:中断服务程序返回指令 RETI,除了具有“RET”指令的功能外, 还将开放中断逻辑的作用。 14.哪些中断源的中断请求标志位是由硬件自动复位的?哪些中 断的中断请求标志必须通过软件编程进行复位? 答:外部中断和定时器中断是由硬件自动复位的。串行口中断的中 断请求标志必须通过软件编程进行复位。 第6章MCS-51 单片机的定时器/计数器1.MCS-51 单片机内部有几个定时器/计数器, 有几种工作方式? 答: 89C52 内部有 3 个定时器/计数器, 定时器 0 有 4 种工作方式, 定时器 1 有 3 种工作方式,定时器 2 有 4 种工作方式。2.定时器/计时器用作定时器用时,其定时时间和哪些因素有关? 作计数器时,对外界计数频率有何限制? 答:定时器的定时时间和单片机的振荡频率和定时初值有关。做 计数器时候,其外界计数频率最大不能超过 Fosc/12。3. MCS-51 单片机的定时器/计数器的定时和计数两种功能各有 什么特点? 答:定时是对时钟脉冲进行计数。 计数是对外部计数脉冲进行计数。4.MCS-51 单片机的 T0、T1 定时器/计数器四种工作方式各有什 么特点? 答:方式 0:13 位计数模式。 方式 1:16 位计数模式。 方式 2:8 位自动重装入计数模式。 方式 3:只有 T0 有的双 8 位计数模式。 5.根据定时器/计数器 0 方式 1 逻辑结构图,分析门控位 GATE 取不同值时,启动定时器的工作过程。 答:当 GATE=0:软件启动定时器,即用指令使 TCON 中的 TR0 置 1 即可启动定时器 0。 GATE=1:软件和硬件共同启动定时器,即用指令使 TCON 中的 TR0 置 1 时,只有外部中断 INT0 引脚输入高电平时才能启动定时器 0。6.当定时器/计数器的加 1 计数器计满溢出时, 溢出标志位 TF1 由硬件自动置 1,简述对该标志位的两种处理方法。 答:一种是以中断方式工作,即 TF1 置 1 并申请中断,响应中断 后,执行中断服务程序,并由硬件自动使 TF1 清 0;另一种以查询方 式工作,即通过查询该位是否为 1 来判断是否溢出,TF1 置 1 后必须 用软件使 TF1 清 0。7.设 MCS-51 单片机 fosc=12MHz,要求 T0 定时 150? s,分别计 算采用定时方式 0、方式 1 和方式 2 时的定时初值。 答:方式 0 的定时初值:IF6AH 方式 1 的定时初值:FF6AH 方式 2 的定时初值:6AH8. 设 MCS-51 单片机 fosc=6MHz, 问单片机处于不同的工作方式 时,最大定时范围是多少? 答:方式 0 的最大定时范围:131,072? s 方式 1 的最大定时范围:16,384? s 方式 2 的最大定时范围:512? s9.设 MCS-51 的单片机晶振为 6MHZ,使用 T1 对外部事件进行 计数,每计数 200 次后,T1 转为定时工作方式,定时 5ms 后,又转 为计数方式,如此反复的工作,试编程实现。 #include &reg52.h& bit F0=0; void { TMOD=0x60; TL1=56; TH1=56; TR1=1; ET1=1; EA =1; While(1); } void serve() interrupt 3 { main() if (!F0) { TMOD=0x10; TL1=63036%16; TH1=63036/16; F0=~F0; } else { TMOD=0x60; TL1=56; TH1=56; F0=~F0; } }10. 用方式 0 设计两个不同频率的方波, P1.0 输出频率为 200Hz, P1.1 输出频率为 100Hz,晶振频率 12MHz。 #include &at89x52.h&void {main()TMOD=0x00; TL0=0x1c; TH0=0xb1; TR0=1; F0=0; ET0=1; EA =1; While(1); }void serve() interrupt 1 { TL0=0x1c; TH0=0xb1; P1_0=~P1_0; if(F0==0) F0=1; else { F0=0; P1_1=~P1_1; } } 11.定时器 T0 已预置为 156,且选定用于方式 2 的计数方式,现 在 T0 输入周期为 1ms 的脉冲,问此时 T0 的实际用途是什么?在什 么情况下计数器 0 溢出? 答:T0 的实际用途是定时 1s,每隔 1s 计数器 0 溢出一次。12.P1.0 输出脉冲宽度调制(PWM)信号,即脉冲频率为 2kHz、 占空比为 7:10 的矩形波,晶振频率 12MHz。 #include &reg52.h& unsi void { TMOD=0x02; TL0=206; TH0=206; TR0=1; ET0=1; EA =1; count=0; While(1); } main() void serve() interrupt 1 { count++; if(count&=7) P1_0=1; else P1_0=0; if(count==10) count=0; }13.两只开关分别接入 P3.0、P3.1,在开关信号 4 种不同的组合 逻辑状态,使 P1.0 分别输出频率 0.5kHz、1kHz、2kHz、4kHz 的方 波,晶振频率为 12MHz。 #include &at89x52.h& un un unvoid {main()TMOD=0x02; TL0=131; TH0=131; TR0=1; ET0=1; EA =1; cou=0; While(1); }void serve() interrupt 1 { P3=0 temp=P3&0 if(temp!=sta) { sta= cou=0; } if(sta=0x00) mag=7; else if(sta=0x01) mag=3; else if(sta=0x10) mag=1; else if(sta=0x11) mag=0; if(cou==mag) { P1_0=~P1_0; cou=0; } else cou++; }14. MCS-51 单片机 P1 端口上, 经驱动器连接有 8 只发光二极管, 若 fosc=6MHz,试编写程序,使这 8 只发光二极管每隔 2s 循环发光 一次(要求 T0 定时) 。 #include &at89x52.h& un uvoidmain() { TMOD=0x02; TL0=16; TH0=16; TR0=1; ET0=1; EA =1; P1=0; cou=0; tim=1; While(1); }void serve() interrupt 1 { tim++; if(tim==500) { P1=0x01&& tim=1; cou++; if(cou==8) cou=0; } }15.设 fosc=12MHz。试编写一段程序,对定时器 T1 初始化,使 之工作在模式 2,产生 200? 定时,并用查询 T1 溢出标志的方法, s 控制 P1.1 输出周期为 2ms 的方波。 #include &at89x52.h&void {main()unsigned char i,j; TMOD=0x20; TL1=56; TH1=56; TR1=1; while(1) { while(TF1=1) { TF1=0; i++; if(i==5) { P1_1=~P1_1; i=0; } } } }16.使用一个定时器,如何通过软、硬件结合的方法,实现较长 时间的定时? 答:先使用硬件实现单位时间的定时,通过软件设置计数来实现 较长时间的定时。 第7章MCS-51 单片机的串行口1.什么是串行异步通信,它有哪些作用? 答:单位信息的各位数据被分时一位一位依次顺序传送的通信方 式称为串行通信, 通过起始位和停止位来进行同步的串行通信称为串 行异步通信。适用于速度较慢的数据传输。2. 89C52 单片机的串行口由哪些功能部件组成?各有什么作用? 答:89C52 通过引脚 RXD(P3.0,串行数据接收端)和引脚 TXD (P3.1,串行数据发送端)与外界进行通信,单片机内部的全双工串 行接口部分,包含有串行发送器和接收器,有两个物理上独立的缓冲 器,即发送缓冲器和接收缓冲器 SBUF。发送缓冲器只能写入发送的 数据,但不能读出;接收缓冲器只能读出接收的数据,但不能写入。 控制状态寄存器 SCON ,用于定义串行通信口的工作方式和反映串 行口状态。3.简述串行口接收和发送数据的过程。 答:在发送过程中, 当执行一条将数据写入发送缓冲器 SBUF 99H) ( 的指令时,串行口把 SBUF 中 8 位数据以 fosc/l2 的波特率从 RXD (P3.0)端输出,发送完毕置中断标志 TI=1。写 SBUF 指令在 S6P1 处产生一个正脉冲,在下一个机器周期的 S6P2 处,数据的最低位输 出到 RXD(P3.0)脚上;再在下一个机器周期的 S3、S4 和 S5 输出 移位时钟为低电平时, S6 及下一个机器周期的 Sl 和 S2 为高电平, 在 就这样将 8 位数据由低位至高位一位一位顺序通过 RXD 线输出。并 在 TXD 脚上输出 fosc/12 的移位时钟。在“写 SBUF”有效后的第 10 个机器周期的 SlPl 将发送中断标志 TI 置位。 接收时,用软件置 REN=1(同时,RI=0) ,即开始接收。当使 SCON 中的 REN=1(RI=0)时,产生一个正的脉冲,在下一个机器周期的 S3P1~S5P2,从 TXD(P3.1)脚上输出低电平的移位时钟,在此机 器周期的 S5P2 对 P3.0 脚采样.并在本机器周期的 S6P2 通过串行口 内的输入移位寄存器将采样值移位接收。在同一个机器周期的 S6P1 到下一个机器周期的 S2P2,输出移位时钟为高电平。于是,将数据 字节从低位至高位接收下来并装入 SBUF。在启动接收过程(即写 SCON,清 RI 位) ,将 SCON 中的 RI 清 0 之后的第 l0 个机器周期的 SlPl 将 RI 置位。这一帧数据接收完毕,可进行下一帧接收。4. 89C52 串行口有几种工作方式?有几种帧格式?各工作方式的 波特率如何确定? 答:89C52 串行口有 4 种工作方式,有 2 种帧格式。 方式 0 的波特率=fosc/12 方式 2 的波特率=2 SMOD 64× fosc × (T1 溢出速率)串行口方式 1、方式 3 的波特率=2 SMOD 325. 若异步通信接口按方式 3 传送, 已知每分钟传送 3 600 个字符, 其波特率是多少? 答:波特率是 =5400bit/s。6.89C52 中 SCON 的 SM2、TB8、RB8 有何作用? 答:SM2:多机通信控制位。 TB8:发送数据的第 9 位。 RB8:接收数据的第 9 位。7.设 fsoc=11.059 2MHz,试编写一段程序,其功能为对串行口 初始化,使之工作于方式 1,波特率为 1 200b/s;并用查询串行口状 态的方法,读出接收缓冲区的数据并回送到发送缓冲区。 #include &at89x52.h&void main() { SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; while(RI==0); temp=SBUF; RI=0; SBUF= }8.若晶振为 11.059 2MHz,串行口工作于方式 1,波特率为 4 800b/s。写出用 T1 作为波特率发生器的方式字和计数初值。 SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8;9.为什么定时器 T1 用作串行口波特率发生器时,常选用工作模 式 2?若已知系统时钟频率和通信用波特率,如何计算其初值? 答:工作模式 2 有自动重装入功能。( ) X=256- fosc? SMOD ? 1 384? 波特率10. 若定时器 T1 设置成模式 2 作波特率发生器, 已知 fosc=6MHz, 求可能产生的最高和最低的波特率。 答:最高波特率为 8Mb/s。 最低波特率为 15625b/s。 11.简述单片机多机通信的原理。 答:若置 SM2=1,则允许多机通信。多机通信协议规定,第 9 位数 据(D8)为 1,说明本帧数据为地址帧;若第 9 位为 0,则本帧为数 据帧。当一片 89C52(主机)与多片 89C5l(从机)通信时,所有从 机的 SM2 位都置 l。 主机首先发送的一帧数据为地址, 即某从机机号, 其中第 9 位为 1,所有的从机接收到数据后,将其中第 9 位装入 RB8 中。各个从机根据收到的第 9 位数据(RB8 中)的值来决定从机可否 再接收主机的信息。若(RB8)=0,说明是数据帧,则使接收中断标 志位 RI=0, 信息丢失; (RB8) 若 =1, 说明是地址帧, 数据装入 SBUF 并置 RI=1,中断所有从机,被寻址的目标从机清除 SM2,以接收主 机发来的一帧数据。其他从机仍然保持 SM2=1。12.当 89C52 串行口按工作方式 1 进行串行数据通信时,假定波 特率为 1 200b/s,以中断方式传送数据,请编写全双工通信程序。 #include &at89x52.h& unsi unsivoid main() { SCON=0x50; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; ES=1; EA=1; }void comre() { rebuf=SBUF; }void comtx() { SBUF= }void serial_server() interrupt 4 { if(TI) TI=0; else { RI=0; comre(); } }13.当 89C52 串行口按工作方式 3 进行串行数据通信时,假定波 特率为 1 200b/s,第 9 位数据作奇偶校验位,以中断方式传送数据, 请编写通信程序。 #include &at89x52.h& unsi unsivoid main() { SCON=0xd0; TMOD=0x20; TH1=0xE8; TL1=0xE8; TR1=1; ES=1; EA=1; }void comre() { ACC=SBUF; if(RB8==P) rebuf=ACC; else error(); }void comtx() { ACC= SBUF=ACC; TB8=P; }void serial_server() interrupt 4 { if(TI) TI=0; else { RI=0; comre(); } }void error() { F0=1; } 第8章单片机系统扩展1.假定一个存储器有 4096 个存储单元,其首地址为 0,则末地 址为多少? 答:末地址为 4095。2.6 根地址线和 11 根地址线各可选多少个地址? 答:6 根地址线可选 26 个地址。 11 根地址线可选 211 个地址。3.用 2K× 位的数据存储器芯片扩展 4K× 位的数据存储器需要 4 8 多少片?地址总线是多少位?画出连线图。 答:需要 4 片,地址总线是 12 位。数据总线 D0~D3 数据总线 D4~D72K*4b 89C52 2K*4b2K*4b 2K*4b地址总线 A0~A10 地址总线 A11 4.用两片 74HC573 芯片扩展 89C52 的 P1 端口实现 6 位发光二 极管的开关控制和点亮。74HC573 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 D0 D1 D2 D3 D4 D5 D6 D7 LE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q774HC Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 LE + D0 D1 D2 D3 D4 D5 D6 D7+WR P2.0 RD5.用 2K× 位的数据存储器芯片扩展 64K× 位的数据存储器需 8 8 要多少根地址线? 答:需要 16 根地址线。6.I2C 和 SPI 各有什么特点? 答:I2C 总线是二线制,采用器件地址的硬件设置方法,通过软件 寻址完全避免了器件的片选线寻址方法, 从而使硬件系统具有简单灵 活的扩展方法。I2C 总线简单, 结构紧凑,易于实现模块化和标准化。 SPI 是 Motorola 公司推出的一种同步串行通讯方式, 是一种三线同步 总线。有多个 SPI 接口的单片机时,应为一主多从,在某一时刻只能 由一个单片机为主器件;在扩展多个 SPI 外围器件时,单片机应分别 通过 I/O 口线来分时选通外围器件。7. P1 口模拟 SPI 从外部先发送从片内 RAM 中 30H 开始的 10 用 个字节,再接收 30 个字节存放在 40H 开始的片内 RAM 中。引脚自 定义。 unsigned char data txbuf[10] _at_ 0x30; unsigned char data rebuf[30] _at_ 0x40;void main() { for(i=0;i&10;i++) spiout(txbuf[i]); for(i=0;i&30;i++) rebuf[i]=spiin(); }8.用 P1 口模拟 I2C 从外部接收一组数据,遇到“$”结束。引脚自 定义。 unsigned char xdata buffer[100] ; void main() { unsigned char temp=0; unsigned char i=0; temp=rxbyt(); while(temp!=’$’) { buffer[i]= i++; } } 第9章单片机系统配置及接口1.为什么要消除键盘的机械抖动?有哪些方法? 答: 键抖动会引起一次按键被误读多次。为了确保 CPU 对键的一 次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的 状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可 用硬件或软件两种方法消除。如果按键较多,常用软件方法去抖动, 即检测出键闭合后执行一个延时程序,产生 12~20 ms 的延时,让前 沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则 确认为真正有键按下。当确认有键按下或检测到按键释放后,才能转 入该键的处理程序。2.试说明非编码键盘的工作原理。如何判断按键释放? 答: 非编码键盘的单片机系统中,键盘处理程序首先执行有无键 按下的程序段,当确认有按键按下后,下一步就要识别哪一个按键被 按下。 对键的识别常用逐行扫描查询法或行列反转法。 在获取键号后, 继续扫描端口,直到状态改变,去抖动后,再次确认状态改变,即可 判断按键释放。3.试述 A/D 转换器的种类和特点。 答: 模/数(A/D)转换电路的种类很多,例如,计数比较型、逐 次逼近型、双积分型等等。逐次逼近型 A/D 转换器.在精度、速度 和价格上都适中,是最常用的 A/D 转换器件。双积分 A/D 转换器, 具有精度高、抗干扰性好、价格低廉等优点,但转换速度低。4.设计一个 2× 的行列式键盘(同在 P1 口)电路并编写键扫描程 2 序。+5V89C52 P1.0 P1.1 P1.2 P1.3#include&reg52.h& unsigned char key() { unsigned char row,col=0,k =-1; P1=0xf0; if((P1&0xf0)==0xf0) return(k); delay20ms(); if((P1&0xf0)==0xf0) return(k); for(row=0;row&2;row++) { P1=~(1&&row); k=P1&0xf0; if(k!=0xf0) { while(k&(1&&(col+2))) col++; k=row*2+ P1=0xf0; while((P1&0xf0)!=0xf0); } } return(k); }5.试设计一个 LED 显示器/键盘电路。 +5V 100Ω P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
+5V 5.1kΩ P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 a b 7407 e f g dp c d74066.在一个 fosc 为 12MHz 的 89C52 系统中接有一片 ADC0809,它 的地址为 7FFFH,试编写 ADC0809 初始化程序和定时采样通道 2 的 程序(假设采样频率为 1ms/次,每次采样 4 个数据) 。 #include&reg52.h& #include&absacc.h& define DAC0809 XBYTE[0x7fff] unsigned char xdata buffer[4] _at_ 0xa0;void main() { TMOD=0x01; TH0=0xFC; TL0=0x18; EA=1; ET0=1; TR0=1; DAC0809=2; while(1); } void time0_srv() interrupt 1 { TH0=0xFC; TL0=0x18; for(i=0;i&4;i++) buffer[i]=DAC0809; }7.试说明 TLC2543 的特点和与 89C52 的接口方式。 答:TLC2543 的特性如下: 12 位 A/D 转换器(可 8 位、12 位和 16 位输出) ; 在工作温度范围内转换时间为 l0μs; 11 通道输入; 3 种内建的自检模式; 片内采样/保持电路; 最大± 096 的线性误差; l/4 内置系统时钟; 转换结束标志位; 单/双极性输出; 输入/输出的顺序可编程(高位或低位在前) ; 可支持软件关机: 输出数据长度可编程。TLC2543 与 89C52 的接线很简单,用 SPI 接口。8.DAC0832 与 89C52 单片机连接时有哪些控制信号?其作用是什 么? 答:ILE:数据锁存允许信号,高电平有效。CS :输入寄存器选择信号,低电平有效。 WR1 :输入寄存器的“写”选通信号,低电平有效。WR2 :DAC寄存器的“写”选通信号,低电平有效。XFER :数据传送信号,低电平有效。9.在一个 89C52 单片机与 DAC0832 组成的应用系统中, DAC0832 的地址为 7FFFH,输出电压为 0~5V。试编写产生矩形波,其波形占 空比为 1:4,高电平时电压为 2.5V,低电平时电压为 1.25V 的转换 程序。 #include&absacc.h& #define DAC0832 XBYTE[0x7FFF] void main() { while(1) { DAC; delay(); DAC0832=63; for(i=0;i&3;i++) delay(); } }10.试说明 TLC5615 的特点。 答:10 位 CMOS 电压输出; 5 V 单电源工作; 与微处理器 3 线串行接口(SPI) ; 最大输出电压是基准电压的 2 倍; 输出电压具有和基准电压相同的极性; 建立时间 12.5μs; 内部上电复位; 低功耗,最高为 l.75 mW; 引脚与 MAX515 兼容。11.以 DAC0832 为例,说明 D/A 的单缓冲与双缓冲有何不同。 答:若应用系统中只有一路 D/A 转换或虽然是多路转换, 但并不要 求同步输出时,则采用单缓冲器方式接口,当地址线选通 DAC0832 后,只要输出控制信号,DAC0832 就能一步完成数字量的输入锁存 和 D/A 转换输出。 对于多路 D/A 转换接口,要求同步进行 D/A 转换输出时,必须采用 双缓冲器同步方式接法。DAC0832 采用这种接法时,数字量的输入 锁存和 D/A 转换输出是分两步完成的,即 CPU 的数据总线分时地向 各路 D/A 转换器输入要转换的数字量并锁存在各自的输入寄存器中, 然后 CPU 对所有的 D/A 转换器发出控制信号, 使各个 D/A 转换器输 入寄存器中的数据同时打入 DAC 寄存器,实现同步转换输出。
单片机原理与应用 实验指导书 周国运 鲁庆宾 编 计算机硬件教研室 对学生实验的...具有多 种语言(M51 汇编语言、C 语言、PLM 语言等)的编辑、编译、连接、软...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 unsigned char x 的文章

 

随机推荐