内容发布更新时间 : 2024/12/23 16:08:36星期一 下面是文章的全部内容请认真阅读。
ORG 0000H
AJMP MAIN_START
ORG 0100H MAIN_START:
MOV R6, 0
UP: LCALL I2C_START
;启动IIC总线操作
MOV A, #10010000B ;访问PCF8591的D/A
LCALL WRB
MOV A, #01000000H
;设置控制字 LCALL WRB MOV A, R6
;从D/A输出采样值 LCALL WRB
LCALL I2C_START ;停止IIC总线操作 INC R6
CJNE R6, #0FFH,
UP
DOWN:
LCALL I2C_START ;启动IIC总线操作
MOV A, #10010000B ;访问PCF8591的D/A
LCALL WRB
MOV A, #01000000H
;设置控制字 LCALL WRB MOV A, R6
;从D/A输出采样值 LCALL WRB
LCALL I2C_START ;停止IIC总线操作 DEC R6
CJNE R6, #0, DOWN
NEXT_CYCLE: SJMP UP
第10章思考题及习题参考答案
1.C51支持的数据类型和存储器类型有哪些?
答:数据类型:字符型、整型、长整型、浮点型、位型、访问SFR。第 页 共 46 页
36
存储器类型:bdata 、data、 idata、 pdata 、xdata 、code 2.设x=4,y=8,说明下列各题运算后x,y,z的值分别是多少? (a)z=(++x)*(--y); (b)z=(++x)+(y--) (c)z=(x++)*(--y); (d)z=(x++)+(y--) 答:(a)x=5,y=7,z=35; (b)x=5,y=7,z=13; (c)x=5,y=7,z=28; (d)x=5,y=7,z=12;
3.C51中断函数是如何定义的?各个选项有和意义? 答:
interrupt n 用于定义中断函数,n为中断号,可以为0~31,通过中断号可以决定中断服务程序的入口地址。
常用的中断源对应的中断号
中断源 中断号 外中断0 0 定时器0 1 外中断1 2 定时器1 3 串行口 4 4. C51应用程序的参数传递有哪些方式?特点是什么?
答:参数传递可以采用寄存器、固定存储器位置方式。寄存器传递方式最多可以传递3个参数。这种参数传递可以产生高效的代码。当无寄存器可用时,参数可以采用固定的存储器位置传递。在SMALL模式下,参数传递在内部RAM中完成。在COMPACT和LARGER模式下,参数的传递要在外部RAM中完成。
5. 一般指针与基于存储器的指针有何区别? 答:
定义时未指定它所指向的对象的存储器类型时,该指针变量就被认为是一般指针。一般指针占用3个字节:第一个字节存放该指针的存储器类型编码(由编译模式的默认值确定),第二和第三个字节分别存放该指针的高位和低位地址偏移量。
定义时就指定了它所指向的对象的存储器类型时,该指针变量就属于基于存储器的指针。基于存储器的指针可以高效访问对象,类型由C51源代码中存储器类型决定,且在编译时确定。
6.设fsoc=12MHz,8051定时器0的方式0、方式1、方式2的最大定时间隔分别是多少?
答:fsoc=12MHz,故计数周期为1us,所以: 方式0最大计数为2=8192,T0=8192us; 方式1最大计数为2=65536,T1=65536us; 方式2最大计数为2=256,T1=256us;
7.用单片机内部定时器来产生矩形波, 设单片机时钟频率为l2MHz。要求在p1.0引脚上输出频率为1kHz。试写出有关的程序。
答:用定时器0的方式1编程,采用中断方式。
# include
void time0(void) interrupt 1 using 1 { P1_0=!P1_0;
TH0=(65536-500)/256); TL0=(65536-500)%256);
81613
第 页 共 46 页 37
}
void main(void) {
MODE=0x01;
TH0=(65536-500)/256); TL0=(65536-500)%256); EA=1; ET0=1; TR0=1; while (1); }
第11章思考题及习题参考答案
1. 简述单片机应用系统设计的一般方法及步骤。
解:
单片机应用系统设计的一般方法及步骤如图11.1所示。第 页 共 46 页
38
(1)明确设计任务 (2)器件选择 (3)总体设计
开 始明确任务、确定系统的功能与性能选型、软硬件划分硬件设计软件设计修改系统调试修改清除故障、修改程序或硬件固化程序、应用系统独立运行完 成图11-1 单片机应用系统设计的过程
2. 简述单片机应用系统设计中软、硬件设计原则。 解:
(1)硬件电路设计
在硬件设计时,要尽量应用最新单片机,采用新技术。要注意通用性的问题,尽可能选择典型电路,并符合单片机常规用法,为硬件系统的标准化、模块化打下良好的基础。系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。硬件系统设计应尽量朝“单片”(片上系统SOC)方向发展,以提高系统的稳定性。工艺设计时要考虑安装、调试、维修的方便。扩展接口的开发尽可能采用PSD等器件开发。
(2)软件设计
软件设计随单片机应用系统的不同而不同。图11.2给出了单片机软件设计的流程图。一般可分为以下几个方面。
① 总体规划
② 程序设计技术: 模块程序设计、自顶向下的程序设计。
39
第 页 共 46 页
图11.2 软件设计的流程图
③ 程序设计:建立数学模型、绘制程序流程图、程序的编制。 ④ 软件装配。
3. 单片机应用系统软、硬件设计应注意那些问题? 解:
硬件设计:
(1)存储器扩展:容量需求,在选择单片机时就考虑到单片机的内部存储器资源,如能满足要求就不需要进行扩展,在必须扩展时注意存储器的类型、容量和接口,一般尽量留有余地,并且尽可能减少芯片的数量。选择合适的方法、ROM和RAM的形式,RAM是否要进行掉电保护等。
(2)I/O接口的扩展:单片机应用系统在扩展I/O接口时应从体积、价格、负载能力、功能等几个方面考虑。应根据外部需要扩展电路的数量和所选单片机的内部资源(空闲地址线的数量)选择合适的地址译码方法。
(3)输入通道的设计:输入通道设计包括开关量和模拟输入通道的设计。开关量要考虑接口形式、电压等级、隔离方式、扩展接口等。模拟量通道的设计要与信号检测环节(传感器、信号处理电路等)结合起来,应根据系统对速度、精度和价格等要求来选择,同时还需要和传感器等设备的性能相匹配,要考虑传感器类型、传输信号的形式(电流还是电压)、线性化、补偿、光电隔离、信号处理方式等,还应考虑A/D转换器的选择(转换精度、转换速度、结构、功耗等)及相关电路、扩展接口,有时还涉及软件的设计。高精度的模数转换器价格十分昂贵,因而应尽量降低对A/D转换器的要求,能用软件实现的功能尽量用软件来实现。
(4)输出通道的设计:输出通道设计包括开关量和模拟量输出通道的设计。开关量要考虑功率、控制方式(继电器、可控硅、三极管等)。模拟量输出要考虑D/A转换器的选择(转换精度、转换速度、结构、功耗等)、输出信号的形式(电流还是电压)、隔离方式、扩展接口等。
(5)人机界面的设计:人机界面的设计包括输入键盘、开关、拨码盘、启/停操作、复位、显示器、打印、指示、报警等。输入键盘、开关、拨码盘应考虑类型、个数、参数及相关处理(如按键的去抖处理)。启/停、复位操作要考虑方式(自动、手动)及其切换。显示器要考虑类型(LED,LCD)、显示信息的种类、倍数等。此外还要考虑各种人机界面的扩展接口。
(6)通信电路的设计:单片机应用系统往往作为现场测控设备,常与上位机或同位机构成测控网络,需要其有数据通信的能力,通常设计为RS-232C、RS-485、红外收发等通信标准。
(7)印刷电路板的设计与制作:电路原理图和印刷电路板的设计常采用专业设计软件进行设计,如Protel,OrCAD等。设计印刷电路板需要有很多的技巧和经验,设计好印刷电路板图后应送到专业化制作厂家生产,在生产出来的印刷电路板上安装好元件,则完成硬件设计和制作。
(8)负载容限的考虑:单片机总线的负载能力是有限的。如MCS-51的P0口的负载能力为4mA,最多驱动8个TTL电路,P1~P3口的负载能力为2mA,最多驱动4个TTL电路。若外接负载较多,则应采取总线驱动的方法提高系统的负载容限。常用驱动器有:单向驱动器74LS244,双向驱动器74LS245等。
(9)信号逻辑电平兼容性的考虑:在所设计的电路中,可能兼有TTL和CMOS器件,也有非标准的信号电平,要设计相应的电平兼容和转换电路。当有RS-232,RS-485接口时,还要实现电平兼容和转换。常用的集成电路有MAX232,MAX485等。
第 页 共 46 页
40