单片机基础知识

上传人:仙*** 文档编号:148284954 上传时间:2022-09-04 格式:DOC 页数:45 大小:6.85MB
返回 下载 相关 举报
单片机基础知识_第1页
第1页 / 共45页
单片机基础知识_第2页
第2页 / 共45页
单片机基础知识_第3页
第3页 / 共45页
点击查看更多>>
资源描述
第一讲 单片机基础知识引言 商用微机 工控计算机智能仪器仪表单片机集散控制家用电器 C语言 高级语言 PASCAL FORTRAN计算机语言 汇编语言 (不同的CPU,汇编语言不同) 1位(几乎没有具体使用)4位(早期的产品)单片机 8位(当前应用最多,51系列)16位(部分使用,与8位相比较少,80196)32位(未来趋势)l 所有计算机的三总线结构相同;l 程序流程图相同。学习计算机的基础知识是数字电子技术:触发器、计数器、移位寄存器、译码器、编码器1.1 MCS-51单片机的特点 单片机(MICROCONTROLLER,又称微控制器)是在一块硅片上集成了各种部件的微型机算计,这些部件包括中央处理器CPU、数据存贮器RAM、程序存贮器ROM、定时器/计数器和多种I/O接口电路。 MCS-51单片机的基本结构如图1-1所示。51系列单片机结构特点:l 8位CPU;l 片内振荡器及时钟电路;l 32根I/O线;l 外部存贮器寻址范围ROM、RAM各64K;l 3个l6位的定时器/计数器;l 5个中断源,2个中断优先级;l 全双工串行口;l 布尔处理器。1.2 MCS-51单片机的内部结构图1-2是MCS-5l单片机片内部结构的总框图,它可以划分为CPU、存贮器、并行口、串行口、定时器计数器、中断逻辑几部分。图1-2 MCS-51的内部结构框图1.2.1 中央处理器MCS-51的中央处理器CPU由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。 CPU:8位;ALU:算术、逻辑运算单元中处理器 程序状态字PSW:8位宽度、F0、RS1和RS0 振荡周期、机器周期一、以ALU为中心的运算器算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。PSW的格式如图1-3所示,其各位的含义是: D7 D6 D5 D4 D3 D2 D1 D0CYACF0RS1RS0OVP图1-3 PSW的格式CY:进位标志。有进位借位时CY=1,否则CY=0;AC:半进位标志。当D3位向D4位产生进位借位时AC=1,常用于十进制调整运算中;F0:用户可设定的标志位,可置位复位,也可供测试。RS1、RS0:四个通用寄存器组的选择位,该两位的四种组合状态用来选择03寄存器组。见表1-2。表l-2 RS1、RS0与工作寄存器组的关系RS1RS0工作寄存器组000组(00-07)011组(08-0F)102组(10-17)113组(18-1F)OV:溢出标志。当带符号数运算结果超出-128+127范围时OV=1,否则OV=0。当无符号数乘法结果超过255时,或当无符号数除法的除数为0时,OV=1,否则OV=0。P:奇偶校验标志。每条指令执行完,若A中l的个数为奇数时P=1,否则P=0,即奇偶校验方式。二、控制器、时钟电路和基本时序周期控制逻辑主要包括定时和控制逻辑、指令寄存器、译码器以及地址指针 DPTR和程序计数器 PC等。1MCS-51的时钟时钟是时序的基础,MCS-51片内由一个反相放大器构成振荡器,可以由它产生时钟。XTAL1 XTAL2 外部时钟 XTAL2XTAL1 Vss (a) (b)图 l-4时钟产生电路(1) 内部方式:图1-4(a)(2) 外部方式:图1-4(b)2MCS-51的基本时序周期一条指令译码产生的一系列微操作信号在时间上有严格的先后次序,这种次序就是计算机的时序。MCS-51的主要时序将在存贮器扩展时讨论,这里先介绍它的基本时序周期。l 振荡周期:指振荡源的周期,若为内部产生方式时,为石英晶体的振荡周期。l 机器周期:一个机器周期含 6个时钟周期(S周期), 图1-5 基本时序周期12个震荡周期。l 指令周期:完成一条指令占用的全部时间。MCS-51的指令周期含l-4个机器周期,其中多数为单周期指令,还有2周期和4周期指令。1.2.2 存贮器结构计算机的存贮器的管理模式,大致可分为两类。第一类是将程序存贮器和数据存贮器分开,并有各自的寻址机构和寻址方式,这种结构形式称为哈佛型结构。另一类是存贮器逻辑空间统一管理,可随意安排ROM或RAM,访问时用同一种指令,这种结构形式称为普林斯顿型。MCS-51单片机的存贮器结构属于前者,一般微机属于后者。 程序:0000-0FFFFH内部 00-7F:工作寄存区、通用数据区 数据: 存贮器结构 80-FF:特殊功能寄存器、通用数据区 程序:1000-FFFFH(或0000-FFFF)外部 数据:0000-FFFFHl 存贮器组织结构: 图1-5 MCS-51存贮器组织结构数据存贮器RAM也有64KB寻址区,在地址上是和ROM重叠的。MCS-51通过不同的信号来选通ROM或RAM:当从外部ROM取指令时用选通信号,而从外部RAM读写数据时采用读写信号或来选通。因此不会因地址重叠而出现混乱。第二讲 MCS-51单片机的内部结构1.2.3 片内并行接口 P0:常用功能(数据/低8位地址)单片机 P1:常用并行端口(8051) P2:常用于地址高8位(A8-A15) P3:常用第二功能(RXD、TXD、INT0、INT1、T0、T1、WR、RD) 1.2.4 MCS-51的内部资源 串行口内部资源 定时器/计数器 中断系统:5个中断源(INT0、T0、INT1、T1和串口)1.2.5 MCS-51的芯片引脚 XTAL1、XTAL1:晶体、电容; ALE(地锁存信号):锁存P0口的地址低8位,频率=fSOC/6; PSEN(读指令信号):接程序存贮器的允许输端子; WR、RD:分别与外部数据存贮器的读、端子相连接 EA:接高电平(或接低电平)。图1-8 MCS-51引脚图1.2.6 单片机的工作方式单片机的工作方式包括:复位方式、程序执行方式、单步执行方式、低功耗操作方式以及EPROM编程和校验方式。1 复位方式:经典的上电复位电路2 程序执行方式:(1)执行内部程序;(2)执行外部程序3 单步执行方式:用于调试程序和系统4 低功耗操作方式5 编程和校验第三讲 定时器/计数器MCS-51子系列单片机有2个定时器/计数器,即定时器/计数器0和1,52子系列单片机(8032/8052)除了有上述2个定时器/计数器外,还有一个定时器/计数器2,后者的功能比前两者强。1.3.1 定时器计数器0和1在专用寄存器TMOD(定时器方式)中,有一个控制位(C/T),分别用于控制定时器/计数器0和1是工作在定时器方式还是计数器方式。1 输入信号基本要求:24个振荡周期,即两个机器周期;2 作为定时器时,计数速率是 振荡频率/12;3 由定时器/计数器模式控制寄存器设置工作方式。 模式0:13位宽度,主要保持与48系列兼容;工作 模式1:16位宽度,最大计数65535;模式 模式2: 8位自动重装载,用于周期性的作某件事; 模式3:定时器/计数器0和1不同,适合于额外定时器。1.3.2 定时器/计数器2(自己阅读)定时器/计数器2是一个具有16位自动重装载或捕获能力的定时器计数器。专用寄存器T2CON是它的控制寄存器。l 可用作波特率发生器l 定时/计数方式1.3.3 定时器计数器的控制和状态寄存器专用寄存器TMOD、TCON和T2CON用于控制和确定各定时器/计数器的功能和操作模式。这些寄存器的内容靠软件设置。系统复位时,寄存器的所有位都被清零。1 模式控制寄存器TMOD8位宽度,高四位和低四位分别控制定时器/计数器1和0,参阅图1-11、图1-12、图1-13。定时器1 定时器0 (MSB) (LSB)D7D6D5D4D3D2D1D0GATEC/M1M0GATEC/M1M0图1-16 定时器/计数器控制寄存器TMOD例MOVTOMD,#0010 0001B;定时器1,8位自动重装载MOVTH1,#56;时间常数MOVTL1,#56;时间常数SETBTR1;启动定时器开始工作表1-5 操作模式控制位M1 MO操 作 模 式0 0模式0。 TLx中低5位与THx中8位构成13位计数器, TLx相当一个5位定标器(见图1-11)。0 1模式10 TLx与了Hx构成全16位计数器,操作模式同上,但无定标器。1 0模式2。 8位自动重装载的定时器/计数器,每当计数露TLx溢出时,THx中的内容重新装载到TLx(见图1-12)。1 1模式3。对于定时器0,分成2个8位计数器(见图1-13)。对于定时器1,停止计数。2 控制寄存器TCON (MSB) (LSB)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0图1-17 定时器/计数器控制寄存器TCONl TF0、TR0:定时器/计数器0l TF1、TR1:定时器/计数器1l IE0、IT0:外部中断0l IE1、IT1:外部中断1例如可用以下语句:SETBIT0/外部中断0下降沿触发CLRIT1/外部中断1低电平触发3 定时器/计数器2控制寄存器T2CON(MSB) (LSB)D7D6D5D4D3D2D1D0TF2EXF2RCLKTCLKEXEN2TR2C/CP/图1-18 T2CON定时器/计数器2控制寄存器作为波特率发生器:l RCLK=TCLK=1(参考图1-15)l C/T2=0l TR2=1第四讲 串行口MCS-51中的串行接口使它增色不少。此串行接口是一个全双工通信接口,即能同时进行发送和接收。它可以作UART(通用异步接收和发送器)用,也可以作同步移位寄存器用。1.4.1 数据缓冲寄存器SBUFSBUF:输入、输出寄存器,可同时发送、接收。实际上,这两个寄存器共用了物理地址。1.4.2 串行口控制寄存器SCONSCON用于控制和监视串行口的工作状态。它的各位定义,见图1-19,并说明如下:(MSB) (LSB)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI图1-19 串行控制寄存器SCONSM0、SM1:工作模式,共4种;SM2:模式2和模式3方式时使用; REN:允许接收;TB8:发送数据的第8位;RB8:接收数据的第8位;TI: 发送完成(软件清除);RI: 接收数据就绪(软件清除);表1-6 串行口操作模式选择SM1 SM0模式功 能波 特 率0 00 11 01 l0123同步移位寄存器8位UART9位UART9位UARTfosc/l2可 变fosc64或fosc/32可 变1.4.3 模式0在操作模式0下,串行口作同步移位寄存器用,其波特率是固定的,为fosc/12,其中fosc是振荡器频率。这时数据由RXD(P3.0)端出入,同步移位时钟由TXD(P3.1)端输出。发送或接收的是8位数据,低位在先(参见图1-20)。汇编语言程序:ORG8000HMOVSCON,#00010000BMOVSBUF,#88HJNBTI,$;查询方式CLRTIENDC语言程序: #include /包含文件#include /包含文件 main()SCON=0X10;/初始化串行控制寄存器SBUF=0X88;/输出数据while(!TI);/查询方式TI=0;1.4.4 模式1串行口工作于模式1时,传输的是10位:1位起始位(0),8位宽度的数据(低位在先),1位停止位(1)。由TXD发送,由RXD接收。波特率是可变的,取决于定时器1或2的溢出速率(参见图1-22)。MOVSCON,#01010000B;通讯模式(11.0592MHz)MOVTMOD,#00100000B;定时模式(注意定时器0)MOVTL1,#0E8H;时间常数(RS232:1200)MOVTH1,#0E8H;时间常数SETBTR1;启动定时器(TH1) = ,fosc=11.0592MHz,SMOD=0定时器1作为波特率发生器时,常用时间常数及误差对照表 波特率(Hz) TH1 误差150 40H 0%300 A0H 0%600 D0H 0%1200 E8H 0%2400 F4H 0%4800 FAH 0%9600 FDH 0%1.4.5 模式2和3 操作模式2和3中,发送(通过TXD)和接收(通过RXD)的都是11位:1位起始位(0),8位数据(低位在先),1位可编程位(第9数据位)和1位停止位(1)。发送时,可编程位(TB8可赋予0或1。接收时可编程位进入SCON中的RB8。模式2和模式3的工作原理类同,唯一的差别是:模式2的波特率为fosc/32或fosc/64,而模式3的波特率是可变的,利用定时器1或定时器2作波特率发生器(参见图1-22和图1-23)。定时器1作为波特率发生器:定时器1的计数速率=fosc/12 SMOD=0时,n=32波特率=定时器1的计数速率/n PCON寄存器 SMOD=1时,n=16 波特率= =定时器2作为波特率发生器:波特率=第五讲 中断系统MCS-51系列中,有5个中断源(或6个中断源),可分为2个优先级,其中每一个中断源的优先级都可以由程序排定(图1-26)。1.5.1 允许中断寄存器IE(物理地址:A8,可按位寻址)图1-27示出允许中断寄存器各位的定义。现说明如下: (MSB) (LSB)D7D6D5D4D3D2D1D0EAET2ESET1EX1ET0EX0图1-27 IE允许中断寄存器1.5.2 中断优先级寄存器IP(物理地址:D8,可按位寻址)MCS-51的中断分为2个优先级。每个中断源的优先级都可以通过中断优先级寄存器IP中的相应位来设定。图1-28示出IP的,各位定义,其中: (MSB) (LSB)D7D6D5D4D3D2D1D0PT2PSPT1PX1PT0PX0图1-28 IP允许中断优先级寄存器例如SETBPX0;外部中断0为高优先级SETBES;串行中断SETBEA;开总中断 1.5.3 优先级结构靠IP寄存器把各中断源的优先级分为高低2级。它们遵循这样2条基本规则:1. 低优先级中断可被高优先级中断所中断,反之不能;2. 一种中断(不管是什么优先级)旦得到响应,与它同级的中断不能再中断它。 中断源 同级内的优先权 外部中断0 最高 定时器计数器0溢出 外部中断1 定时器计数器1溢出 串行口 定时器计数器2溢出 最低1.5.4 中断响应协议 当某中断源提出中断请求后,作为应答,CPU首先使相应的“优先级激活”触发器置位,以阻断同级和低级的中断。硬件中断服务子程序调用时,把当时程序计数器PC的内容压入堆栈(在MCS-51中,PC是16位的,占用了2个字节,没有自动保存程序状态字PSW的内容),同时还根据中断的来源,把相应的矢量单元地址装入PC中。这些矢量地址是: 中断源 矢量单元 外部中断0 0003H 最高 定时器0溢出 000BH 外部中断1 0013H 定时器1溢出 001BH 串行口 0023H 定时器2溢出或T2EX端出现负跳变 002BH 最低 注意:仿真器常常将中断入口地址映射到别的地址空间。1.5.5 外部中断外部中断的激活方式分为两种:种是电平激活,另一种是边沿激活。这两种方式可以靠TCON寄存器中的中断方式位ITl或IT0来控制。(MSB) (LSB)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT01.5.6 中断请求的撤除 CPU响应某中断请求后,在中断返回(RETI)前,该中断请求应该撤除,否则会引起另一次中断。定时器/计数器0和1:进入中断服务后自动清除中断申请标志位TF0或TFl; 边沿激活:自动清除IE0、IE1;外部中断0和1: 电平激活:采取措施,例如对信号进行整形等。1.5.7 中断响应时间从外部中断请求有效到开始执行服务程序的第一条指令,中间要隔3个机器周期,这是最短的响应时间。当对IE,IP寄存器进行操作或执行RETI指令时,不会立即相应中断源的申请。第六讲 MCS-51单片机系统扩展在很多应用场合,MCS-51自身的存贮器和I/O资源不能满足要求,这时就要进行系统扩展。1.6.1 外部总线的扩展以8051单片机最小系统为例,介绍数据总线、地址总线和控制总线。基本要求:熟练掌握最小系统的结构及三组总线。图1-29 MCS-51外部三总线示意图1.6.2 外部程序存贮器的扩展l 介绍简明取指令时序;l 在最小系统的基础上,以扩展2764为程序存贮器为例,介绍扩展方法。基本要求:熟练掌握程序存贮器的扩展方法及取指时序。图1-32 外部程序存贮器的简明操作时序图 l-33 外部程序存贮器的连接1.6.3 外部数据存贮器的扩展l 介绍简明数据存贮时序;l 在最小系统的基础上,以扩展6264为程序存贮器为例,介绍扩展方法。基本要求:熟练掌握数据存贮器的扩展方法及读写时序。 图1-36外部数据存贮器操作的简明时序图图1-38 扩展6264静态RAM第七讲 MCS-51单片机的指令系统1.7.1 寻址方式寻址方式就是根据指令中给出的地址寻找真实操作数地址的方式。MCS-51单片机的寻址方式有种:寄存器寻址、直接寻址、立即寻址、变址寻址、相对寻址、间接寻址和位寻址。l 寄存器寻址:MOV A,R0 ;A(R0)l 直接寻址:MOV A,4FH ;A4(4FH)l 立即寻址:MOV A,# 6FH ;A6FHl 间接寻址:MOV A,R1 ;A(R1)l 相对寻址:SJMP rel ;PC(PC)+ 2+ rel l 变址寻址:MOVC A,A十DPTR ;A4(A)十(DPTR)l 位寻址:SETBEA ;EA=11.7.2 指令说明MCS-51指令系统按其功能可分为:数据传送指令、转移指令、算术运算指令、逻辑运算指令和十进制指令。1.7.3 伪指令 汇编语言必须通过汇编器的处理,才能转换为计算机能识别和执行的机器语言。伪指令是汇编器用的指令。MCS-51汇编器常用的伪指令有以下几种: 一、 ORG伪指令(Origin) ORG0000H二、 DB伪指令(Define Byte) DB40H,56H,A 三、 DW伪指令(Define Word) DW1234H,5678,0AF0H 四、 EQU或伪指令(Equal) COUNT=100 SPACEEQU50H 五、 DATA伪指令(Data) ERRORDATA80H 六、 XDATA伪指令(External Data) ADCXDATA4000H 七、 BIT伪指令 LEDBIT30H 八、 END伪指令 1.7.4 汇编语言编程ORG0000H;定义程序首地址SJMPMAIN;跳转到主程序ORG0040H;主程序地址MAIN:MOVDPTR,#6400;省去人工转换MOVR2,#00H;被除数MOVR3,#00H;MOVR4,DPH;MOVR5,DPL;MOVDPTR,#16;除数MOVR6,DPH;MOVR7,DPL;LCALLDIVD;调用出除法子程序MOVDPH,R3;商的高8位?MOVDPL,R4;商的低8位?NOPSJMP$;-;标号: ;功能:双字节二进制无符号数除法 ;入口条件:被除数在R4 、 R5 中,除数在 R6 、 R7 中。 ;出口信息: OV=0 时,双字节商在 R2 、 R3 中, OV=1 时溢出。 ;影响资源: PSW 、 A 、 B 、 R1 R7 ;堆栈需求: 字节;-DIVD: CLR C ;比较被除数和除数 MOV A,R3 SUBB A,R7 MOV A,R2 SUBB A,R6 JC DVD1 SETB OV ;溢出 RET DVD1: MOV B,#10H ;计算双字节商 DVD2: CLR C ;部分商和余数同时左移一位 MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV A,R3 RLC A MOV R3,A XCH A,R2 RLC A XCH A,R2 MOV F0,C ;保存溢出位 CLR C SUBB A,R7 ;计算( R2R3 R6R7 ) MOV R1,A MOV A,R2 SUBB A,R6 ANL C,/F0 ;结果判断 JC DVD3 MOV R2,A ;够减,存放新的余数 MOV A,R1 MOV R3,A INC R5 ;商的低位置一 DVD3: DJNZ B,DVD2 ;计算完十六位商( R4R5 ) MOV A,R4 ;将商移到 R2R3 中 MOV R2,A MOV A,R5 MOV R3,A CLR OV ;设立成功标志 RET END1.7.4 C语言编程#include /包含文件#include /包含文件void main(void)/主函数 unsigned long int x;/长整型变量 unsigned int y,z;/整型变量 x=6400;/赋初值(被除数) y=16;/除数 z=x/y;/计算 while(1);第八讲 keil 51应用入门KEIL51软件是众多单片机应用软件开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计;界面友好,易学易用。2.1 KEIL51的集成环境2.2 简单的程调试2.3 建立一个项目2.4 项目中含有多个文件2.5 汇编语言2.6 机器代码的效率比较 (在实验室进行)第九讲 keil 51软件调试技巧这一章我们将简单地向读者介绍调试用户应用程序的调试技巧,并给出相应的程序清单,必要时还给出与之相应的操作方法及执行程序时的主要屏幕画面,以方便读者的学习。(在实验室进行)3.1P1口作为输入端口3.2P1口作为输出端口3.3外部中断3.4定时/计数器0作为定时器3.5定时/计数器0作为计数器3.6调试函数第十讲 MCS-51单片机系统扩展这一章将向读者介绍一些MCS-51单片机系统扩展的常用电路设计,其中有并行口、串并转换、静态数码管显示、动态数码管显示、A/D转换、D/A转换、时钟日历、IC卡等,举例中,均以C语言编程(为了兼顾初学者,部分地给出对应的汇编程序),不熟悉的读者,可参阅本书的第五、六、七、八、九章。4.1 扩展并行口(1)用闲置不用的口线作为选通信号 此种方式连线简单,编程方便灵活。如果使用74LS573(74LS373)且不对P1口进行驱动处理,则最多可扩展四个同样类型的并行输出端口,当然还需要与之对应4个选通信号。ORG8000HCLRP3.3;选通信号无效MOVP1,#00H;P1口设定为输出口MOVP1,#80H;欲输出的数据为80SETBP3.3;选通信号有效CLRP3.3;锁定数据,选通信号无效END下边是用C语言编写的同样功能的程序:#include /包含文件#include /包含文件sbit CLK =P33;main()CLK=0;/选通信号无效P1=0X00;/P1口设定为输出口P1=0X80;/欲输出的数据为80CLK=1;/选通信号有效CLK=0;/锁定数据,选通信号无效(2)部分地址译码法扩展并行输出端口利用地址译码法扩展并行输出端口需要占用单片机的数据存贮器空间,其优点是可扩展的端口数几乎不受限制,编程并不比前一种方法复杂,缺点是需要一些组合逻辑电路与之配合。图4-2就是基于这一种方法而实现的硬件电路。从图中可以看到所扩展的并行输出端口地址是0000H1FFFH,下边分别给出操作该端口的汇编语言和C语言源程序:ORG0000HMOVDPTR,#0000HMOVA,#80HMOVXDPTR,AENDC语言源程序如下:#include #include #include #define our_port XBYTE0x0000main()our_port=0x80;图中74HC138使用了地址总线的高三位,即A15A14A13,把64K地址空间分为8等份,其中新扩展的8位并行端口占用了0000H1FFFH地址空间,可见地址空间的浪费还是比较严重的,但在大多数情况下还是可以接受的。如果需要充分利用地址空间,可以使用全地址译码法。(3)全地址译码法扩展并行输出端口这一种方法需要借助于数字电子学中的一些门电路来实现,此处我们不再详述,而是采用大家已经比较熟悉的可编程逻辑器件来实现这一设计要求。首先设计一个全译码器,如下是实现这一要求的PLD设计文件(图4-3原理图):subdesign encoder(A15,A14,A13,A12,A11,A10,A9,A8:INPUT;A7,A6,A5,A4,A3,A2,A1,A0,WR:INPUT;ENABLE:OUTPUT;)BEGINENABLE=A15 & A14 & A13 & A12 & A11 & A10 & A9 & A8 & A7 & A6 &A5 & A4 & A3 & A2 & A1 &A0 & !WR;END;4.2 串并转换在8051系列单片机系统中,如果串行口闲置不用,则利用它来扩展并行输出或输入端口。这种扩展方法不占用外部数据存贮器的地址空间,而且也节省单片机的硬件资源,但操作速度较慢,级连的越多,速度越慢。(1)74HC164扩展并行输出端口(图4-4)扩展方法如图4-4所示,下边分别给出汇编语言和C语言程序。汇编语言程序:ORG0000HMOVSCON,#00000000BMOVSBUF,#88HENDC语言程序:#include /包含文件#include /包含文件 main()SCON=0X00;/初始化串行控制寄存器SBUF=0X88;/输出数据(2)用74HC165扩展并行输入端口扩展方法如图4-5所示,下边分别给出汇编语言和C语言程序。汇编语言程序:ORG0000HSETBP1.0;数据锁入无效CLRP1.0;锁入数据SETBP1.0;数据锁入无效MOVSCON,#00010000B;模式0工作方式,启动一次接收过程JNBRI,$;等待接收结束MOVA,SBUF;读取已接收的数据CLRRI;清除接收就绪标志ENDC语言程序:#include /包含文件#include /包含文件sbit load = P10;main()unsigned char x;load=1;/并行数据锁入无效load=0;/并行数据锁入使能load=1;/并行数据锁入无效SCON=0X10;/模式0工作方式,启动一次接收过程while(!RI);/等待数据移入x=SBUF;/读取已接收的数据RI=0;/清除接收就绪标志第十一讲 数码管显示4.3静态数码管显示数码管显示器,是各种仪器设备所不可缺少的重要组成部分,是仪器设备与人对话的一种重要形式,它告诉人们机器的运行状态、数据的处理结果、提示操作人员下一步要进行的操作等。按照显示方法的不同,可分为静态显示和动态显示两种,这一节讨论静态数码管显示的设计方法。汇编语言源程序:ORG0000HMOVSCON,#00H;初始化串行控制寄存器CLRTI;清除数据发送结束标志MOVSBUF,#01H;输出数据“8”JNBTI,$;等待数据发送结束CLRTI;清除数据发送结束标志MOVSBUF,#9FH;输出数据“1”JNBTI,$;等待数据发送结束CLRTI;清除数据发送结束标志ENDC语言源程序:#include /包含文件#include /包含文件main()SCON=0X00;/初始化串行控制寄存器TI=0;/清除数据发送结束标志SBUF=0X01;/输出数据“8”while(!TI);/等待数据发送结束TI=0;/清除数据发送结束标志SBUF=0X9F;/输出数据“1”while(!TI);/等待数据发送结束TI=0;/清除数据发送结束标志对于图4-6来讲,编写程序相对比较简单,一旦将欲显示的数据发送出去,只要当前显示的数据没有变化,就无须理睬数码管显示器,这就是静态数码管显示的好处。但是,如果显示的位数比较多,硬件的开销、电源的功耗等问题,将变得更加突出。4.4动态数码管显示动态数码管显示,可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。图4-7基于这种思想的8位动态显示电路。图中使用了两片74LS373作为7段码和位码驱动锁存器,8个数码管是共阴极数码管,一片ULN2803作为位增强驱动器。ULN2803是8反相驱动器,其最大驱动电流为500mA,假如数码管的8个二极管都点亮,则共有80mA电流从阴极流出,ULN2803完全有能力80mA的灌入电流。若S0和S1选通信号的地址分别为7F80H、7F90H,定时器1作为定时刷新定时器,定时时间常数为2.5mS,C语言源程序如下:#include #include #include #define SEGMENT XBYTE0x8000/段码寄存器地址#define BIT_LED XBYTE0x8001/位码寄存器地#define fosc 11.0592/晶振频率#define time02500/定时2500uSunsigned char data display_bit,display_buffer8;unsigned char data time0_h,time0_l;unsigned int idata time0_times;unsigned char get_code(unsigned char i);void display(void);main()BIT_LED=0;TMOD=0x21;/定时器/计数器0定时方式1time0_times=65536-time0*fosc/12;time0_h =(time0_times/256 );time0_l =(time0_times%256);TH0=time0_h;TL0=time0_l; /高8位和低8位时间常数TR0=1;/启动定时器0EA=ET0=1;/允许中断display_bit=0x01;/从第一个数码管开始显示display_buffer7=8;display_buffer6=7;display_buffer5=6;display_buffer4=5;display_buffer3=4;display_buffer2=3;display_buffer1=2;display_buffer0=1;while(1);void time0_int(void) interrupt 1/中断服务子程序TH0=time0_h;TL0=time0_l;display();/共需40m秒unsigned char get_code(unsigned char i)unsigned char p; switch (i) case 0: p=0x3F;break;/*0*/ case 1: p=0x06;break;/*1*/ case 2: p=0x5B;break;/*2*/ case 3: p=0x4F;break;/*3*/ case 4: p=0x66;break;/*4*/ case 5: p=0x6D;break;/*5*/ case 6: p=0x7D;break;/*6*/ case 7: p=0x07;break;/*7*/ case 8: p=0x7F;break;/*8*/ case 9: p=0x67;break;/*9*/ case 10: p=0x77;break;/*A*/ case 11: p=0x7C;break;/*B*/ case 12: p=0x39;break;/*C*/ case 13: p=0x5E;break;/*D*/ case 14: p=0x79;break;/*E*/ case 15: p=0x71;break;/*F*/default: break; return (p);void display(void)unsigned char i;switch (display_bit)case 1: i=0;break;case 2: i=1;break;case 4: i=2;break;case 8: i=3;break;case 16: i=4;break;case 32: i=5;break;case 64: i=6;break;case 128: i=7;break;default : break;BIT_LED=0;/关闭显示SEGMENT=get_code(display_bufferi);/送段码BIT_LED=display_bit;/送位码if (display_bit0x64) display_bit=display_bit*2;else display_bit=0x01;第十二讲 A/D转换(ADC0809)ADC0809是8通道8位逐次逼近型A/D转换器,典型时钟频率为640KHz,每一通道转换时间约为100S,即64个脉冲转换一次。一、等待连接方式电路如图4-10所示。图中,将ALE信号二分频作为时钟信号。如果单片机晶振6MHz,则ALE信号的频率为1MHz,故分频后送给ADC0809的时钟信号为500KHz。IN0-IN7接模拟信号,8通道轮流采集一次数据,并存贮与内部RAM中。A/D转唤起的地址为7FFFH。此种方式编程简单,但单片机的有效利用率不高,常常在只有单一任务时使用这一种方法。#include #include #define IN0 XBYTE0X7FFF /通道0地址typedef unsigned char uchar;void adc0809 (uchar idata *x); /ADC0809采样函数void delay (void); /延时函数void main (void)static uchar idata ad8; /定义数据存储区 adc0809(ad);void adc0809 (uchar idata *x) uchar i; uchar xdata *ad_adr; ad_adr=&IN0; for(i=0;i8;i+) /8个通道 *ad_adr=i; /启动AD转换 delay(); /延时等待 xi=*ad_adr; /取转换值 void delay(void) uchar j; for(j=0;j20;j+) ;二、中断连接方式将图4-11 ADC0809的EOC信号经过一反相器反相后接到MCS-51的外部中断输入端则形成另一种接口电路中断方式接口,即利用EOC信号产生中断,通知MCS-51转换结束。用中断方式处理A/D转换问题,可以大幅度地提高单片机的事务处理能力,使其可以更出色地执行多个任务。#include #include #define IN0 XBYTE0x7FFF /通道0地址typedef unsigned char uchar;uchar i=0;uchar xdata *ad_adr;static uchar idata x8;void main (void) IT1=0;EX1=1;EA=1; i=0; ad_adr=&IN0;
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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