单片机基础知识说课讲解_第1页
单片机基础知识说课讲解_第2页
单片机基础知识说课讲解_第3页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一讲单片机基础知识引言商用广微机 WI工控计算机弋 智能仪器仪表1单片机 集散控制家用电器X.cC语言严咼级语言pascalFORTRAN L计算机语言 V汇编语言(不同的CPU汇编语言不同)y ( 位(几乎没有具体使用)4位(早期的产品)单片机 < 8位(当前应用最多,51系列)16位(部分使用,与8位相比较少,80196)I 32位(未来趋势)所有计算机的三总线结构相同;程序流程图相同。学习计算机的基础知识是数字电子技术:触发器、计数器、移位寄存器、译码器、编码器1.1 MCS-51单片机的特点单片机(MICROCONTROLLER ,又称微控制器)是在一块硅片上集成了各种部件的微

2、型机算计,这些部件包括中央处理器CPU、数据存贮器RAM、程序存贮器ROM、定时器/计数器和多种I/O接口电路。MCS-51单片机的基本结构如图1-1所示。PO Pl P2 F3 TXDR3 丽祁而T51系列单片机结构特点:8 位 CPU ;片内振荡器及时钟电路;32根I/O线;外部存贮器寻址范围 ROM、RAM各64K ;3个16位的定时器/计数器;5个中断源,2个中断优先级;全双工串行口; 布尔处理器。1.2 MCS-51单片机的内部结构图1-2是MCS-5I单片机片内部结构的总框图,它可以划分为CPU、存贮器、并行口、串行口、定时器/计数器、中断逻辑几部分。RST ALE EA PSEN

3、PO Pl P2 P3图1-2 MCS-51的内部结构框图1.2.1 中央处理器MCS-51的中央处理器 CPU由运算器和控制逻辑构成, 其中包括若干特殊功能 寄存器(SFR)。rCPU: 8位;ALU算术、逻辑运算单元中处理器 '程序状态字 PSW 8位宽度、FO、RS1和RS0I振荡周期、机器周期一、以ALU为中心的运算器算术逻辑单元 ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。PSW的格式如图1-3所示,其各位的含义是:D7D6 D5D4 D3D2D1 DOCYACF0RS1RSOOVP图1-3 PSW的格式CY :进位标志。有进

4、位/借位时CY=1,否则CY=O ;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范围时0V=1,否则OV=0。 当无符号数乘法结果超过 255时,或当无符号数除法的除数为0时,0V

5、=1,否则OV=0。P:奇偶校验标志。每条指令执行完,若A中I的个数为奇数时P=1,否则P=0, 即奇偶校验方式。二、控制器、时钟电路和基本时序周期控制逻辑主要包括定时和控制逻辑、指令寄存器、译码器以及地址指针DPTR和程序计数器 PC等。1 . MCS-51的时钟时钟是时序的基础, MCS-51片内由一个反相放大器构成振荡器,可以由它产 生时钟。外部时钟XTAL1XTAL2Vss(b)图I-4时钟产生电路(1)内部方式:图1-4 (a)外部方式:图1-4 (b)2. MCS-51的基本时序周期一条指令译码产生的一系列微操作信号在时间上有严格的先后次序,这种次序就是计算机的时序。MCS-51的

6、主要时序将在存贮器扩展时讨论,这里先介绍它的基本时序周期。S1S1S3SiscS651P1IMPLfl PlP2 PlP2PlP2| n km伉rdruriruhju图1-5基本时序周期振荡周期:指振荡源的周 期,若为内部产生方式时, 为石英晶体的振荡周期。机器周期:一个机器周期 含6个时钟周期(S周期),12个震荡周期。指令周期:完成一条指令占用的全部时间。MCS-51的指令周期含1-4个机器周期,其中多数为单周期指令,还有2周期和4周期指令。存贮器结构计算机的存贮器的管理模式,大致可分为两类。第一类是将程序存贮器和数据存贮器分开,并有各自的寻址机构和寻址方式,这种结构形式称为哈佛型结构。另

7、一类是存贮器逻辑空间统一管理,可随意安排ROM或RAM,访问时用同一种指令,这种结构形式称为普林斯顿型。MCS-51单片机的存贮器结构属于前者,一般微机属于后者。程序:OOOO-OFFFFHf内部彳 00-7F:工作寄存区、通用数据区I数据:*存贮器结构80-FF I:特殊功能寄存器、通用数据区r 程序:1000-FFFFH (或 OOOO-FFFF)1外部*L 数据:0000-FFFFH存贮器组织结构:FFFF外部1000 ROMFF803020SFRItAMFFFF位寻址区OEEF內部ROM0000EA1ROMeS=c工作寄存器组外部RAM000000图1-5 MCS-51存贮器组织结构数

8、据存贮器 RAM也有64KB寻址区,在地址上是和 ROM重叠的。MCS-51 通过不同的信号来选通 ROM或RAM :当从外部ROM取指令时用选通信号 PSEN 而从外部RAM读写数据时采用读写信号 RD或WF来选通。因此不会因地址重叠而出现混乱。第二讲MCS-51单片机的内部结构片内并行接口P3P0单片机(8051)常用功能(数据/低8位地址)常用并行端口常用于地址高 8位(A8-A15)常用第二功能(RXD TXD INTO、INT1、TO、T1、WR RD)1.2.4 MCS-51 的内部资源串行口内部资源定时器/计数器-中断系统:5个中断源(INTO、TO、INT1、T1和串口)1.2

9、.5 MCS-51的芯片引脚 XTAL1、XTAL1:晶体、电容; ALE (地锁存信号):锁存P0 口的地址低8位,频率=f soC6 ;PSEN(读指令信号):接程序存贮器的允许输端子;WR RD分别与外部数据存贮器的读、端子相连接EA:接高电平(或接低电平)(T2) P1.0friE)口 Pi.iP1.2Pl.3ri 4Pl.51叫6Pl.7IST/VPI)(RXD) P3.0丽询P3.2(mTT| P33C) P3. I(Tl) F35P3.6 念功P3.7 XTAL2TCTAI 47£910lll2l3gl5l6l7l8旧铀VCC PO.DPO+1P0.2P(OP0.1P0

10、.5P0.6P0.7i 1T- AyjWUADIAD2AD3ADIA 05AD6AD7AL5二1陀5A14P2.5Al 3Al 2All二A10ZZh*2.iA9二lP£.廿AS-JPSFN图1-8 MCS-51引脚图单片机的工作方式单片机的工作方式包括:复位方式、程序执行方式、单步执行方式、低功耗操 作方式以及EPROM编程和校验方式。1. 复位方式:经典的上电复位电路2. 程序执行方式:(1 )执行内部程序;(2)执行外部程序3. 单步执行方式:用于调试程序和系统4. 低功耗操作方式5. 编程和校验第三讲定时器/计数器MCS-51子系列单片机有 2个定时器/计数器,即定时器/计数

11、器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位自动重装载,用于周期性的作某件事; 模式

12、3:定时器/计数器0和1不同,适合于额外定时器。1.3.2 定时器/计数器2 (自己阅读)定时器/计数器2是一个具有16位自动重装载或捕获能力的定时器/计数器。 专用寄存器T2CON是它的控制寄存器。可用作波特率发生器定时/计数方式1.3.3 定时器/计数器的控制和状态寄存器专用寄存器TMODTCOF和 T2CON用于控制和确定各定时器/计数器的功能和操 作模式。这些寄存器的内容靠软件设置。系统复位时,寄存器的所有位都被清零。1. 模式控制寄存器TMOD8位宽度,高四位和低四位分别控制定时器/计数器1和0,参阅图1-11、图 1-12、图 1-13。MOVTOMD #0010 0001B;定时

13、器1, 8位自动重装载MOVTH1, #56;时间常数MOVTL1, #56;时间常数SETBTR1;启动定时器开始工作定时器1图1-16定时器/计数器控制寄存器 TMOD定时器0D7D6D5D4D3D2D1D0GATEc/TM1M0GATEc/TM1M0(MSB)(LSB)例表1-5操作模式控制位M1 MO操作模式0 0模式0。TLx中低5位与THx中8位构成13位计数器,TLx相当一 个5位定标器(见图1-11)。0 1模式10 TLx与了 Hx构成全16位计数器,操作模式同上,但无定标尹1 0模式2o 8位自动重装载的定时器/计数器,每当计数露TLx溢岀时,THx中的内容重新装载到TLx

14、(见图1-12) o1 1模式3。对于定时器0,分成2个8位计数器(见图1-13)。对于定时 器1,停止计数。2. 控制寄存器TCON(MSB)(LSB)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0图1-17定时器/计数器控制寄存器 TCONTF0、TR0:定时器/计数器0TF1、TR1:定时器/计数器1IE0、IT0 :外部中断0IE1、IT1 :外部中断1例如可用以下语句:SETBIT0/外部中断0下降沿触发CLRIT1/外部中断1低电平触发3. 定时器/计数器2控制寄存器T2C0N(MSB( LSB)D7D6D5D4D3D2D1D0TF2EXF2RCL

15、KTCLKEXEN2TR2C/T2CP/ RL 2图1-18 T2C0N定时器/计数器2控制寄存器作为波特率发生器:RCLK=TCLK=1(参考图 1-15)C/T2=0TR2=1第四讲串行口MCS-51中的串行接口使它增色不少。此串行接口是一个全双工通信接口,即 能同时进行发送和接收。它可以作UART通用异步接收和发送器)用,也可以作同步移位寄存器用。1.4.1 数据缓冲寄存器 SBUFSBUF输入、输出寄存器,可同时发送、接收。实际上,这两个寄存器共 用了物理地址。1.4.2 串行口控制寄存器 SCONSCON用于控制和监视串行口的工作状态。它的各位定义,见图1-19,并说明如下:(MSB

16、( LSB)D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI图1-19串行控制寄存器SCONSM0 SM1工作模式,共 4种;SM2模式2和模式3方式时使用;REN允许接收;TB8:发送数据的第8位;RB8接收数据的第8位;TI :发送完成(软件清除);RI :接收数据就绪(软件清除);表1-6串行口操作模式选择SM1 SM0模式功能波特率0 00同步移位寄存器fosc/120 118 位 UART可变1 029 位 UARTfosc / 64 或 fosc/321 l39 位 UART可变1.4.3 模式0在操作模式0下,串行口作同步移位寄存器用, 其波特率是固定

17、的,为fosc/12, 其中fosc是振荡器频率。这时数据由RXD(P3.0)端出入,同步移位时钟由TXD(P3.1) 端输出。发送或接收的是 8位数据,低位在先(参见图1-20 )。汇编语言程序:C语言程序:ORG8000HMOVSCON, #00010000BMOVSBUF, #88HJNBTI,$;查询方式CLRTIEND#in elude <reg52.h>包含文件#i nclude <stdio.h>包含文件main ()SCON=0X10;/初始化串行控制寄存器SBUF=0X88;/输出数据while(!TI);/查询方式TI=0;时器1或2的溢出速率(参见

18、图1-22 )。MOVSCON,#01010000B;通讯模式(11.0592MHz)MOVTMOD,#00100000B;定时模式(注意定时器0)MOVTL1,#0E8H;时间常数(RS232:1200)MOVTH1,#0E8H;时间常数SETBTR1启动定时器时,传输的是10位:1位起始位(0),8位宽度的数据(低144 模式1串行口工作于模式位在先),1位停止位(1)。由TXD发送,由RXD接收。波特率是可变的,取决于定(TH1) =256fosc32 12波特率,fosc=11.0592MHz,SMOD=0定时器1作为波特率发生器时,常用时间常数及误差对照表误差15040H300A0H

19、600D0H1200E8H2400F4H4800FAH9600FDH0%波特率(Hz)TH10%0%0%0%0%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作为波特率发生器:定时

20、器1的计数速率=fosc/12SMpD=0 时,n=32波特率=定时器1的计数速率/n PCON寄存器-SMOD=1时,n=16SMOD波特率=-(定时器/计数器1溢出速率)322SMODosc3212 256 (TH 1)定时器2作为波特率发生器:波特率fosc2 16 65536 (RCAP2H,RCAP 2L)第五讲中断系统MCS-51系列中,有5个中断源(或6个中断源),可分为2个优先级,其中每 一个中断源的优先级都可以由程序排定(图1-26 )。1.5.1 允许中断寄存器IE (物理地址:A8,可按位寻址)图1-27示出允许中断寄存器各位的定义。现说明如下:(MSB)(LSB)D7D

21、6D5D4D3D2D1DOEAXET2ESET1EX1ETOEXO图1-27 IE 允许中断寄存器1.5.2 中断优先级寄存器IP (物理地址:D8,可按位寻址)MCS-51的中断分为2个优先级。每个中断源的优先级都可以通过中断优先级 寄存器IP中的相应位来设定。图 1-28示出IP的,各位定义,其中:(MSB)(LSB)D7D6D5D4D3D2D1D0XXPT2PSPT1PX1PT0PX0图1-28 IP 允许中断优先级寄存器例如SETBPX0;外部中断0为高优先级SETBES;串行中断SETBEA;开总中断1.5.3 优先级结构靠IP寄存器把各中断源的优先级分为高低2级。它们遵循这样2条基

22、本规则:1. 低优先级中断可被高优先级中断所中断,反之不能;2. 一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。中断源同级内的优先权外部中断0最高定时器/计数器0溢出外部中断1定时器/计数器1溢出串行口1f定时器/计数器2溢出最低1.5.4 中断响应协议当某中断源提出中断请求后,作为应答,CPU首先使相应的“优先级激活”触发器置位,以阻断同级和低级的中断。硬件中断服务子程序调用时, 把当时程序计数器 PC的内容压入堆栈(在MCS-51 中,PC是16位的,占用了 2个字节,没有自动保存程序状态字 PSW的内容),同 时还根据中断的来源,把相应的矢量单元地址装入PC中。这

23、些矢量地址是:中断源矢量单元外部中断00003H最咼定时器0溢出000BH外部中断10013H定时器1溢出001BH串行口0023H定时器2溢出或T2EX端出现负跳变002BH最低注意:仿真器常常将中断入口地址映射到别的地址空间。夕卜部中断外部中断的激活方式分为两种:一种是电平激活,另一种是边沿激活。这两种 方式可以靠TCON寄存器中的中断方式位 ITI或ITO来控制。(MSB)(LSB)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT01.5.6 中断请求的撤除CPU响应某中断请求后,在中断返回(RETI)前,该中断请求应该撤除,否则会引起另一次中断。定时器/计

24、数器0和1:进入中断服务后自动清除中断申请标志位TF0或TFI ;边沿激活:自动清除IE0、IE1 ;外部中断0和1: q、电平激活:采取措施,例如对信号进行整形等。1.5.7 中断响应时间从外部中断请求有效到开始执行服务程序的第一条指令,中间要隔3个机器周期,这是最短的响应时间。当对 IE,IP寄存器进行操作或执行 RETI指令时,不会 立即相应中断源的申请。第六讲MCS-51单片机系统扩展在很多应用场合,MCS-51自身的存贮器和I/O资源不能满足要求,这时就要 进行系统扩展。外部总线的扩展以8051单片机最小系统为例,介绍数据总线、地址总线和控制总线。基本要求:熟练掌握最小系统的结构及三

25、组总线。P0ALEPSENWRRD锁存器-D0-D7-A0A7DEUSABUSCBUS图1-29 MCS-51外部三总线示意图162外部程序存贮器的扩展介绍简明取指令时序;在最小系统的基础上,以扩展2764 为程序存贮器为例,介绍扩展方法。基本要求:熟练掌握程序存贮器的扩展方法及取指时序。PSEN 厂竺叹地址有效数据有效图1-32外部程序存贮器的简明操作时序rm ra111K£i皿!UITTIEi iTpKj|H3丁TE-EFMMlUlM|iHPnFa応uri-1图1-33外部程序存贮器的连接11JM1!41Ofl'l' 4 /外部数据存贮器的扩展 介绍简明数据存贮时

26、序; 在最小系统的基础上,以扩 展6264为程序存贮器为例, 介绍扩展方法。基本要求:熟练掌握数据存贮器 的扩展方法及读写时序。坐叹地址有效_数据有效Il v!r:土亠亠-H土土:图 1-381* 叩川 4图1-36外部数据存贮器操作的简明时序图11驯凡袒尼和山春ArN'3 mALLhl-i遊応ME口 .'扩展6264静态RAM第七讲MCS-51单片机的指令系统1.7.1 寻址方式寻址方式就是根据指令中给出的地址寻找真实操作数地址的方式。MCS-51单片机的寻址方式有种:寄存器寻址、直接寻址、立即寻址、变址寻址、相对寻址、间接寻址和位寻址。寄存器寻址:MOVA,R0;A (RO

27、)直接寻址:MOVA,4FH;A4 (4FH)立即寻址:MOVA, #6FH;A 6FH间接寻址:MOVA,R1;A (R1)相对寻址:SJMPrel;PC (PC)+ 2+ rel变址寻址:MOVCA,A 十 DPTR;A4 (A)十(DPTR)位寻址:SETBEA;EA=1指令说明MCS-51指令系统按其功能可分为:数据传送指令、转移指令、算术运算指令、 逻辑运算指令和十进制指令。1.7.3 伪指令汇编语言必须通过汇编器的处理,才能转换为计算机能识别和执行的机器语言。伪指令是汇编器用的指令。 MCS-51 汇编器常用的伪指令有以下几种:一、ORG伪指令(Origin)ORG 0000H二、

28、DB 伪指令 (Define Byte)DB40H,56H,' A'三、DW伪指令(Define Word)DW1234H,5678,0AF0H四、EQU或=伪指令(Equal)COUNT=100SPACE EQU50H五、DATA 伪指令 (Data)ERROR DATA80H六、XDATA伪指令(External Data)ADCXDATA4000H七、BIT 伪指令LEDBIT30H八、END 伪指令1.7.4 汇编语言编程6400 16 ?ORG0000H; 定义程序首地址SJMPMAIN; 跳转到主程序ORG0040H; 主程序地址MAIN:MOVDPTR,#6400

29、; 省去人工转换MOVR2,#00H; 被除数MOVR3,#00HJMOVR4,DPHJMOVR5,DPLJMOVDPTR,#16; 除数MOVR6,DPHJMOVR7,DPLJLCALLDIVD; 调用出除法子程序MOVDPH,R3; 商的高 8 位 ?MOVDPL,R4; 商的低 8 位 ?NOPSJMP $;标号:DIVD; 功能:双字节二进制无符号数除法时溢出。; 入口条件:被除数在 R4 、 R5 中,除数在 R6 、 R7 中。 ; 出口信息: OV=0 时,双字节商在 R2 、 R3 中, OV=1;影响资源:PSW、A、B、R1R7;堆栈需求:2字节JDIVD:CLRC; 比较

30、被除数和除数MOVA, R3SUBBA, R7MOVA, R2SUBBA, R6JCDVD1SETBOV; 溢出RETDVD1:MOVB, #10H; 计算双字节商DVD2:CLRC; 部分商和余数同时左移一位MOVA, R5RLCAMOVR5, AMOVA, R4RLCAMOVR4, AMOVA, R3RLCAMOVR3, AXCHA, R2RLCAXCHA, R2MOVF0, C; 保存溢出位CLRCSUBBA, R7; 计算( R2R3 R6R7 )MOVR1, AMOVA, R2SUBBA, R6ANLC, /F0JCDVD3MOVR2, AMOVA, R1MOVR3, AINCR5D

31、VD3: DJNZB, DVD2MOVA, R4MOVR2, AMOVA, R5MOVR3, ACLROVRETEND; 结果判断; 够减,存放新的余数; 商的低位置一计算完十六位商( R4R5 ); 将商移到 R2R3 中; 设立成功标志1.7.4 C 语言编程#include <reg52.h> #include <stdio.h>void main(void)unsigned long int x; unsigned int y,z; x=6400;y=16;z=x/y;/ 包含文件/ 包含文件/ 主函数/ 长整型变量/ 整型变量/ 赋初值(被除数)/ 除数/ 计

32、算while(1);第八讲 keil 51 应用入门KEIL51 软件是众多单片机应用软件开发的优秀软件之一,它集编辑、编译、 仿真于一体,支持汇编、 PLM 语言和 C 语言的程序设计;界面友好,易学易用。2.1 KEIL51 的集成环境2.2 简单的程调试2.3 建立一个项目2.4 项目中含有多个文件2.5 汇编语言2.6 机器代码的效率比较(在实验室进行)第九讲 keil 51 软件调试技巧这一章我们将简单地向读者介绍调试用户应用程序的调试技巧, 并给出相应的 程序清单, 必要时还给出与之相应的操作方法及执行程序时的主要屏幕画面, 以方 便读者的学习。(在实验室进行)3.1 P1 口作为

33、输入端口3.2 P1 口作为输出端口3.3 外部中断3.4 定时/ 计数器 0作为定时器3.5 定时/ 计数器 0作为计数器3.6 调试函数第十讲 MCS-51 单片机系统扩展这一章将向读者介绍一些 MCS-51 单片机系统扩展的常用电路设计, 其中有并 行口、串并转换、静态数码管显示、动态数码管显示、A/D 转换、 D/A 转换、时钟日历、 IC 卡等,举例中,均以 C 语言编程(为了兼顾初学者,部分地给出对应的 汇编程序),不熟悉的读者,可参阅本书的第五、六、七、八、九章。4.1 扩展并行口( 1)用闲置不用的口线作为选通信号此种方式连线简单,编程方便灵活。如果使用74LS573 ( 74

34、LS373)且不对P1 口进行驱动处理, 则最多可扩展四个同样类型的并行输出端口,当然还需要与之对应4 个选通信号。ORG8000HCLRP3.3;选通信号无效MOVP1, #00H; P1 口设定为输出口MOVP1, #80H;欲输出的数据为 80SETBP3.3;选通信号有效CLRP3.3;锁定数据,选通信号无效END下边是用 C 语言编写的同样功能的程序:#include <reg52.h>/包含文件#include <stdio.h>/包含文件sbit CLK =P3A3;main()CLK=0;/选通信号无效P1=0X00;/P1 口设定为输出口P1=0X80

35、;/ 欲输出的数据为 80CLK=1;/选通信号有效CLK=0;/锁定数据,选通信号无效(2)部分地址译码法扩展并行输出端口 利用地址译码法扩展并行输出端口需要占用单片机的数据存贮器空间, 其优点 是可扩展的端口数几乎不受限制, 编程并不比前一种方法复杂, 缺点是需要一些组 合逻辑电路与之配合。图 4-2 就是基于这一种方法而实现的硬件电路。从图中可以 看到所扩展的并行输出端口地址是0000H1FFFH ,下边分别给出操作该端口的汇编语言和 C 语言源程序:ORG 0000HMOVDPTR ,#0000HMOVA , #80HMOVX DPTR ,AEND C 语言源程序如下:#include

36、 <reg52.h>#include <stdio.h> #include <absacc.h> #define our_port XBYTE0x0000main()our_port=0x80;图中 74HC138 使用了地址总线的高三位, 即 A 15A 14A 13,把 64K 地址空间分为 8 等份,其中新扩展的 8 位并行端口占用了 0000H1FFFH 地址空间,可见地址空 间的浪费还是比较严重的, 但在大多数情况下还是可以接受的。 如果需要充分利用 地址空间,可以使用全地址译码法。( 3)全地址译码法扩展并行输出端口这一种方法需要借助于数字电子学

37、中的一些门电路来实现,此处我们不再详述,而是采用大家已经比较熟悉的可编程逻辑器件来实现这一设计要求。 首先设计一个全译码器,如下是实现这一要求的subdesign encoder(A15,A14,A13,A12,A11,A10,A9,A8A7,A6,A5,A4,A3,A2,A1,A0,WRENABLE)BEGINPLD 设计文件(图 4-3 原理图)::INPUT;:INPUT;:OUTPUT;ENABLE=A15 & A14 & A13 & A12 & A11 &A10 & A9 & A8 & A7 & A6 &

38、A5 & A4 & A3 & A2 & A1 &A0 & !WR;END;4.2 串并转换在 8051 系列单片机系统中,如果串行口闲置不用,则利用它来扩展并行输出 或输入端口。 这种扩展方法不占用外部数据存贮器的地址空间, 而且也节省单片机 的硬件资源,但操作速度较慢,级连的越多,速度越慢。(1) 74HC164扩展并行输出端口(图4-4)扩展方法如图 4-4 所示,下边分别给出汇编语言和 C 语言程序。汇编语言程序:ORG 0000HMOVSCON, #00000000BMOVSBUF , #88HENDC 语言程序:#include <

39、;reg52.h>#include <stdio.h>/包含文件/包含文件main()SCON=0X00;SBUF=0X88;/初始化串行控制寄存器/输出数据(2)用74HC165扩展并行输入端口扩展方法如图 4-5 所示,下边分别给出汇编语言和 C 语言程序。 汇编语言程序:ORG0000HSETBP1.0;数据锁入无效CLRP1.0;锁入数据SETBP1.0;数据锁入无效MOVSCON,#00010000B;模式 0 工作方式,启动一次接收过程JNBRI,$;等待接收结束MOVA , SBUF;读取已接收的数据CLRRI;清除接收就绪标志ENDC 语言程序:#includ

40、e <reg52.h>/包含文件#include <stdio.h>/包含文件sbit load = P1A0;main()unsigned char x;load=1;/并行数据锁入无效load=0;/并行数据锁入使能load=1;/并行数据锁入无效SCON=0X10;/模式 0 工作方式,启动一次接收过程while(!RI);/等待数据移入x=SBUF;/读取已接收的数据RI=0;/清除接收就绪标志第十一讲 数码管显示4.3 静态数码管显示数码管显示器, 是各种仪器设备所不可缺少的重要组成部分, 是仪器设备与人 对话的一种重要形式, 它告诉人们机器的运行状态、数据的

41、处理结果、 提示操作人 员下一步要进行的操作等。 按照显示方法的不同, 可分为静态显示和动态显示两种, 这一节讨论静态数码管显示的设计方法。汇编语言源程序:ORG0000HMOVSCON,#00H;初始化串行控制寄存器CLRTI;清除数据发送结束标志MOVSBUF,#01H;输出数据“ 8”JNBTI,$;等待数据发送结束CLR TIMOV SBUF,#9FH JNBTI, $CLR TIENDC 语言源程序:;清除数据发送结束标志;输出数据“ 1” ;等待数据发送结束 ;清除数据发送结束标志#include <reg52.h>#include <stdio.h>/包含

42、文件/包含文件main()SCON=0X00;TI=0;SBUF=0X01; while(!TI);TI=0;SBUF=0X9F; while(!TI);TI=0;/初始化串行控制寄存器 /清除数据发送结束标志 / 输出数据“ 8” /等待数据发送结束/清除数据发送结束标志 / 输出数据“ 1” /等待数据发送结束 /清除数据发送结束标志对于图 4-6 来讲,编写程序相对比较简单,一旦将欲显示的数据发送出去,只要当前显示的数据没有变化,就无须理睬数码管显示器, 这就是静态数码管显示的好处。但是,如果显示的位数比较多,硬件的开销、电源的功耗等问题,将变得更 加突出。4.4 动态数码管显示动态数码

43、管显示, 可以大幅度地降低硬件成本和电源的功耗, 因为某一时刻只 有一个数码管工作, 也就是所谓的分时显示, 故显示所需要的硬件电路可分时复用。 图 4-7 基于这种思想的 8 位动态显示电路。 图中使用了两片 74LS373 作为 7 段码和 位码驱动锁存器, 8 个数码管是共阴极数码管,一片 ULN2803 作为位增强驱动器。ULN2803 是 8 反相驱动器,其最大驱动电流为 500mA ,假如数码管的 8 个二 极管都点亮,则共有 80mA 电流从阴极流出, ULN2803 完全有能力 80mA 的灌入 电流。若 S0 和 S1 选通信号的地址分别为 7F80H 、7F90H ,定时器

44、 1 作为定时刷新定 时器,定时时间常数为 2.5mS,C 语言源程序如下:#include <at89x52.h>#include <stdio.h>#include <absacc.h>#define SEGMENT XBYTE0x8000#define BIT_LED#define fosc#define time0XBYTE0x800111.05922500/段码寄存器地址 /位码寄存器地 /晶振频率 /定时 2500uSunsigned char data display_bit,display_buffer8;unsigned char data

45、 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; time0_times=65536-time0*fosc/12; time0_h =(time0_times/256 ); time0_l =(time0_times%256); TH0=time0_h;TL0=time0_l;TR0=1;EA=ET0=1; display_bit=0x01; display_buffer7=8

46、; display_buffer6=7; display_buffer5=6; display_buffer4=5; display_buffer3=4; display_buffer2=3; display_buffer1=2; display_buffer0=1; while(1);/定时器 /计数器 0 定时方式 1/ 高 8 位和低 8 位时间常数/ 启动定时器 0/允许中断 /从第一个数码管开始显示void time0_int(void) interrupt 1 TH0=time0_h;TL0=time0_l;/中断服务子程序display();/共需 40m 秒unsigned c

47、har get_code(unsigned char i) unsigned char p;switch (i)case0:p=0x3F;break;/*0*/case1:p=0x06;break;/*1*/case2:p=0x5B;break;/*2*/case3:p=0x4F;break;/*3*/case4:p=0x66;break;/*4*/case5:p=0x6D;break;/*5*/case6:p=0x7D;break;/*6*/case7:p=0x07;break;/*7*/case8:p=0x7F;break;/*8*/case9:p=0x67;break;/*9*/case

48、10:p=0x77;break;/*A*/case11:p=0x7C;break;/*B*/case12:p=0x39;break;/*C*/case13:p=0x5E;break;/*D*/case14:p=0x79;break;/*E*/case15: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;c

49、ase 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_bit<0x64) display_bit=display_bit*2;else display_bit=0x01;第十二讲 A/D 转换( ADC0809)ADC0809是8通道8位逐次逼近型 A/D转换器,典型时钟频率为 640KHz,每一通 道转换时间约为100卩S,即64个脉冲转换一次。一、等待连接方式电路如图4-10所示。图中,将 ALE信号二分频作为时钟信号。如果单片机晶振6MHz,则ALE信号的频率为1MHz故分频后送给 ADC0809的时钟信号为500KHZ。IN0-IN7接模拟信号,8通道轮流采集一次数据,并存贮与内部RAM中。A/D转唤起的地址为 7FFFH。此种方式编程简单, 但单片机的有效利用率不高, 常常在只有单一任务时使用 这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论