最新单片机原理与应用技术重点程序高惠芳幻灯片.ppt

上传人:豆**** 文档编号:23873389 上传时间:2022-07-02 格式:PPT 页数:91 大小:3.84MB
返回 下载 相关 举报
最新单片机原理与应用技术重点程序高惠芳幻灯片.ppt_第1页
第1页 / 共91页
最新单片机原理与应用技术重点程序高惠芳幻灯片.ppt_第2页
第2页 / 共91页
点击查看更多>>
资源描述

《最新单片机原理与应用技术重点程序高惠芳幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机原理与应用技术重点程序高惠芳幻灯片.ppt(91页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 例例4.3.2 将内部将内部RAM中中20H单元的压缩单元的压缩BCD码拆开,转换成相应的码拆开,转换成相应的ASC码,存码,存入入21H、22H,高位存,高位存22H.(P64) ORG 1000H START:MOV A,20H ; 取压缩取压缩BCD码码 ANL A,#0FH ; 取低位取低位BCD码码 ADD A,#30H ; 转换为低位转换为低位ASCII码码 MOV 21H,A ; 保存低位保存低位ASCII码码 MOV A,20H ; 重新取压缩重新取压缩BCD码码 ANL A,#0F0H ; 分离高位分离高位BCD码码 SWAPA ; 得到高位得到高位BCD码码 ADD A,

2、#30H ; 转换为高位转换为高位ASCII码码 MOV 22H,A ; 保存高位保存高位ASCII码码 SJMP$ END补充举例:三字节无符号数相加,其中被补充举例:三字节无符号数相加,其中被加数在内部加数在内部RAM的的50H、51H和和52H单元单元中;加数在内部中;加数在内部RAM的的53H、54H和和55H单元中;要求把相加之和存放在单元中;要求把相加之和存放在50H、51H和和52H单元中进位存放在位寻址区的单元中进位存放在位寻址区的20H单单元最低位中(即元最低位中(即20H.0)。)。分析分析: : 除最低字节可以使用除最低字节可以使用ADDADD指令之外,指令之外,其它字节

3、相加时要把低字节的进位考虑进去,其它字节相加时要把低字节的进位考虑进去,因此使用因此使用ADDCADDC指令指令. .MOV 00H,C#20H分支程序是通过转移指令实现的分支程序是通过转移指令实现的一、单分支程序一、单分支程序 使用条件转移指令实现,即根据条件对程序使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否的执行进行判断,满足条件则进行程序转移,否则程序顺利执行。则程序顺利执行。可实现单分支程序转移的指令有:可实现单分支程序转移的指令有:JZJZ、JNZJNZ、CJNECJNE、DJNZDJNZ等等还有以位状态作为条件进行程序分支的指令:还有以位状态作为

4、条件进行程序分支的指令:JCJC、JNCJNC、JBJB、JNBJNB和和JBCJBC等等(1 1)单分支结构举例)单分支结构举例 例例4.3.3 求符号函数的值。已知片内求符号函数的值。已知片内RAM的的40H单元单元内有一自变量内有一自变量X,编制程序按如下条件求函数编制程序按如下条件求函数Y的值,的值,并将其存入片内并将其存入片内RAM的的41H单元中。见单元中。见P651 X00 X=0-1 X0Y = ORG 1000H START: MOV A, 40H; 将将X送入送入A中中 JZ COMP ; 若若A为为0,转至,转至COMP处处 JNB ACC.7, POST ; 若若A第第

5、7位不为位不为1(X为正数),为正数), ;则程序转到则程序转到 POST处,处, ;否则(否则(X为负数)程序往下执行为负数)程序往下执行 MOV A, #0FFH ; 将将 1(补码)送入(补码)送入A中中 SJMP COMP ; 程序转到程序转到COMP处处 POST: MOV A, #01H ; 将将+1送入送入A中中 COMP: MOV 41H, A ; 结果存入结果存入Y SJMP $ ; 程序执行完,程序执行完,“原地踏步原地踏步” END补充举例:假定在外部补充举例:假定在外部RAMRAM中有中有ST1ST1、ST2ST2、ST3ST3共共3 3个连续单元,个连续单元,其中其中

6、ST1ST1和和ST2ST2单元中分别存放着两个单元中分别存放着两个8 8位无符号二进制数,要求位无符号二进制数,要求找出其中的大数并存入找出其中的大数并存入ST3ST3单元中。单元中。MOV A,R2一、 单重循环程序 例例4.3.5 已知片内已知片内RAM30H3FH单元中存放了单元中存放了16个二进个二进制无符号数,编制程序求他制无符号数,编制程序求他们的累加和,并将其和数存们的累加和,并将其和数存放在放在R4,R5中(中(R4存高存高8位,位,R5存低存低8位)。见位)。见P69 ORG 1000H START: MOV R0, #30H MOV R2, #10H ; 设置循环次数(设

7、置循环次数(16) MOV R4, #00H ; 和高位单元和高位单元R4清清0 MOV R5, #00H ; 和低位单元和低位单元R5清清0 LOOP: MOV A, R5 ; 和低和低8位的内容送位的内容送A ADD A, R0 ; 将将R0与与R5的内容相加的内容相加 MOV R5, A ; 低低8位的结果送位的结果送R5 CLR A ; A清清0 ADDC A, R4 ; 将将R4的内容和的内容和Cy相加相加 MOV R4, A ; 高高8位的结果送位的结果送R4 INC R0 ; 地址递增(加地址递增(加1) DJNZ R2, LOOP ; 若循环次数减若循环次数减1不为不为0,则转

8、,则转 ;到到LOOP处循环处循环,否则,循环结束否则,循环结束 SJMP $ END 例例4.3.6 编制程序将编制程序将片内片内RAM的的30H4FH单元中的内单元中的内容传送至片外容传送至片外RAM的的2000H开始的单元开始的单元中。(见中。(见P70) 程序如下:程序如下: ORG 1000H START: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H ; 设置循环次数设置循环次数 LOOP: MOV A, R0 ; 将片内将片内RAM数据区内容送数据区内容送A MOVX DPTR, A ; 将将A的内容送片外的内容送片外 ;RAM数据区数据区

9、 INC R0 ; 源地址递增源地址递增 INC DPTR ; 目的地址递增目的地址递增 DJNZ R2, LOOP ; 若若R2的不为的不为0,则转到,则转到 ;LOOP处继续循环处继续循环,否则循环结束否则循环结束 SJMP $ END2、较长时间的定时程序、较长时间的定时程序较长时间的定时,通常采用多重循环的方法较长时间的定时,通常采用多重循环的方法1个机器周期个机器周期1个机器周期个机器周期2个机器周期个机器周期4个机器周期个机器周期最大定时时间计算公式为:最大定时时间计算公式为:(4256+2+1)2562s2s+2 s=525828(s)2个机器周期个机器周期1个机器周期个机器周期

10、1个机器周期个机器周期1个机器周期个机器周期第四章 单片机C语言程序设计 sbit位类型符用于定义在可位寻址字节或特殊功能寄存器位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,中的位,定义时须指明其位地址,可以是位直接地址,可可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。格式如下:位号。格式如下: sbit 位变量名位变量名=位地址;位地址; 1、位地址为位直接地址,其取值范围为、位地址为位直接地址,其取值范围为0 x000 xff; 2、位地址是可位寻址变量带位号或特殊功能寄存器名带、

11、位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。行定义。Note:字节地址与位号之间、特殊功能寄存器与位号之间一:字节地址与位号之间、特殊功能寄存器与位号之间一般用般用“”作间隔。作间隔。第四章 单片机C语言程序设计 【例例5-5】sbit型变量的定义。sbit OV=0 xd2;sbit CY=0 xd7;unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2

12、=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;3 中断方式 单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下:编号 中断源 中断向量(汇编) C语言0 INT0 0003 interrupt 01T0 000BH interrupt 12INT1 0013H interrupt 23T1 001BH interrupt 34RI/TI 0023H interrupt 4 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排

13、的空间只有8个单元。 51系列单片机的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:ORG 0000HLJMP START ; 转入主程序,START为主程序地址标号ORG 0003HLJMP INT0 ; 转外中断中断服务程序ORG 000BHLJMP T0 ; 转定时器T0中断服务程序ORG 0030HSTART: ; 主程序开始n例6.1.2 在图6.1.6中,P1.0P1.3接有4个开关,P1.4P1.7接有4个发光二极管,消抖电

14、路用于产生中断请求信号,当消抖电路的开关来回拨动一次将产生一个下跳变信号,向CPU申请中断。要求:初时发光二极管全黑,每中断一次,P1.0P1.3所接的开关状态反映到发光二极管上,且要求开关合上时对应发光二极管亮。MCU 2k14300+5V+5V4k1P1.2P1.0P1.1P1.3P1.4P1.5P1.6P1.7EA0INTn解:汇编程序如下:n ORG 0000Hn AJMP MAINn ORG 0003H ;外部中断0入口n AJMP SER_INT0 ;转中断服务程序n ORG 0100H ;主程序n MAIN: MOV P1 , #0FH ;熄灭发光二极管且对开关输入端先输出1n

15、SETB IT0 ;脉冲触发方式n SETB EX0 ;允许中断n SETB EA ;总中断允许n AJMP $ ;等待中断nSER_INT0: MOV P1 , #0FH ;熄灭发光二极管且对开关输入端先输出1n MOV A , P1 ;输入开关状态n CPL A ;状态取反n ANL A , #0FH ;屏蔽A的高半字节n SWAP A ;A高低半字节交换n MOV P1 , A ;开关状态输出n RETI ;中断返回每次单纯重置一次每次单纯重置一次4个开关的开、合状态,个开关的开、合状态,4个发光二极个发光二极管维持原来的亮、灭状态,仅当来回拨动消抖开关后,管维持原来的亮、灭状态,仅当来

16、回拨动消抖开关后,产生了中断,发光二极管才反映新置的开关状态。产生了中断,发光二极管才反映新置的开关状态。该例子的执行结果是:该例子的执行结果是:n#includenvoid int0() interrupt 0 /*中断函数中断函数*/nn P1=0 x0f ; n/*熄灭发光二极管且对开关输入端先输出熄灭发光二极管且对开关输入端先输出1*/n P1=4; n /*读入开关状态,并左移四位,使开关反映在发光二极管上读入开关状态,并左移四位,使开关反映在发光二极管上*/n P1 P1; /*对对P1口内容取反口内容取反*/nnmain() /*主函数主函数nn EA=1; /*开中断总开关开中

17、断总开关*/n EX0=1; /*允许中断允许中断*/n IT0=1; /*负跳沿产生中断负跳沿产生中断*/n while(1) /*等待中断等待中断*/nC语言程序如下:语言程序如下: 补补2 2: 通过通过外部中断控制八盏灯循环点亮。解:解:通过P1口扩展八盏灯,在 INT1引脚(P3.3)接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。程序如下:程序如下: C源程序见源程序见int1.c ORG 0000H LJMP MAIN ORG 0013H ; 中断服务程序入口地址 LJMP IN11 MAIN:S

18、ETB EA ; 开总中断允许“开关” SETB EX1 ; 开分中断允许“开关” CLR PX1 ; 低 优先级(也可不要此句) SETB IT1 ; 边沿触发 MOV A , #01H ; 给累加器A赋初值 SJMP $ ; 原地等待中断申请 IN11:RL A ; 左环移一次 MOV P1,A ; 输出到P1口 RETI ; 中断返回 END3 定时器计数器的控制 与定时器计数器有关的控制寄存器有:1 1定时器控制寄存器TCOND7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0中断请求标志触发方式选择启动定时/计数器0 低电平1 下降沿0 停止

19、1 启动2工作方式控制寄存器TMOD C1/T1控制C0/T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE门控位GATE=0 GATE=0 以运行控制位以运行控制位TRTR启动定时器启动定时器GATE=1 GATE=1 以外中断以外中断请求信号(高电平)请求信号(高电平)启动定时器启动定时器C/T计数/定时选择M1 M0工作方式选择2). 方式1:16位方式 振荡器1/12TL0 TH0TF011&T0TR0GATEINT0C/T=0C/T=18位8位16位计数器3). 方式2:8位自动装入时间常数方式 TF0振荡器1/1211&T0TR0GATEI

20、NT0C/T=0C/T=1TL0 TH0定时/计数器常数的计算n1计数器初值的计算n把计数器计满为零所需要的计数值设定为C,计数初值设定为Tc,由此可得到公式:Tc=M-Cn式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。n2定时器初值的计算n在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的公式:T=(M-Tc)T计数计数 上式也可写成:Tc=M (T/ T计数计数)式中,M为模值,和定时器的工作方式有关;T计数是单片机振荡周期TCLK的12倍;Tc为定时器的定时初值。 开中断(如果使用中断方

21、式): 编程置位EA、ETi TRi位置位控制定时器的启动和停止。四、应用举例计算计数器的计数初值: 编程时将计数初值送THi、 TLi; 可编程器件在使用前需要进行初始化:确定TMOD控制字:编程时将控制字送TMOD; 例1 设晶振频率fOSC=12MHz,使用定时器0以方式1产生周期为4ms的方波脉冲,并由P1.0 输出。以中断方式实现。8051P1.0P1.04000s1. 定时器/计数器作定时器使用 TMOD确定T1控制T0控制1000XXXXM0M1C/TGATEM0M1C/TGATE控制字01H 要产生4ms 的方波脉冲,只需在P1.0端以2ms为间隔,交替输出高低电平即可实现。为

22、此,定时间应为2000s 。使用12z晶振,则一个机器周期为1s,设待求计数初值为,则: 计算计数器的计数初值;(216X)1us=2000us 即216X=2000 X216-2000 0F830H所以,初值为: TH0=0F8H,TL0=30H 采用中断方式:编程时打开全局和局部中断。 由定时器控制寄存器TCON中的TR0位控制定时器的启动和停止。 TR01,启动; TR00,停止。 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP T0INT ;T1中断入口汇编程序设计T0INT: MOV TH0,#0F8H ;重新设置初值 MOV TL0,#30H C

23、PL P1.0 ;输出取反 RETI END ORG 0030HMAIN:MOV TMOD, #01H ;T0为方式1 MOV TH0, #0F8H MOV TL0,#30H ;初值 CLR P1.0 SETB EA ;允许中断 SETB ET0 SETB TR0 ;启动定时 SJMP $ ;等待中断主程序:中断处理程序:#include sbit P1_0=P10;void timer1(void) interrupt 1 using 1 P1_0=!P1_0; TH0= 0 xF8; TL0 = 0X30; void main(void) TMOD=0 x01; P1_0=0; TH0=

24、0 xF8; TL0 = 0X30; EA=1; ET0=1; TR0=1; while (1);C程序设计程序设计中断方式中断方式n(2)采用查询方式编程n汇编程序:n ORG 0000Hn LJMP MAINn ORG 0100HnMAIN: MOV TMOD ,#01H ;写入方式控制字n MOV TH0 , #0F8H ;写入计数初值n MOV TL0 , #30Hn SETB TR0 ;启动T0定时nLOOP: JBC TF0 ,NEXT ;查询定时时间到否?n SJMP LOOPnNEXT: MOV TH0 , #0F8H ;重新写入计数初值n MOV TL0 , #30Hn CP

25、L P1.0 ;输出取反n SJMP LOOP ;重复循环n ENDn(2)采用查询方式编程n汇编程序:n ORG 0000Hn LJMP MAINn ORG 0100HnMAIN: MOV TMOD ,#01H MOV TH0 , #0F8H n MOV TL0 , #30Hn SETB TR0 nLOOP: JBC TF0 ,NEXT n SJMP LOOPnNEXT: MOV TH0 , #0F8H n MOV TL0 , #30Hn CPL P1.0 n SJMP LOOP n ENDn(1)采用中断方式编程n汇编程序:n ORG 0000Hn LJMP MAIN n ORG 000B

26、Hn AJMP SER_T0 n ORG 0100HnMAIN: MOV TMOD , #01H n MOV TH0 , #0F8H n MOV TL0 , #30Hn SETB EA n SETB ET0 n SETB TR0 n SJMP $ nSERT0: MOV TH0 , #0F8H n MOV TL0 , #30Hn CPL P1.0 n RETIn END #include sbit P1_0=P10;void main(void) TMOD=0 x01; P1_0=0; TH0= 0 xFF; TL0 = 0X83; TR0=1; while (1) if(TF0 =1) TF

27、0 = 0;P1_0=!P1_0; TH0= 0 xFF; TL0 = 0X83;C程序设计程序设计查询方式查询方式2. 定时器/计数器作长时间定时器使用n方法1:采用软件计数的方法实现,每次溢出后,用于计数的寄存器加1 n方法2:T1计数回0溢出时,使P1.1输出一个负脉冲,再把P1.1接到T0/P3.4引脚用以计数。 用定时器/计数器产生的定时时间是有限的,如晶振为6MHz时,一个定时器最长的定时时间为T=216(1/6)12=131.072ms 例2. 采用6MHz晶振,使用定时器/计数器1在P1.0脚上输出周期为100ms,占空比为30%的矩形脉冲,以工作方式2编程实现。n解:对于6M

28、Hz晶振,使用工作方式2,最大定时时间为(28-0)(1/6)10-612=512s取500s定时,则周期100ms需要中断200次,占空比为30%,高电平需要60次中断。500s定时,初值为:256 (6/12)500=6YY中断次数加1次数=高电平?次数=周期?P1.0=1NN返回P1.0=0图图6.2.7 中断服务程序流程图中断服务程序流程图汇编程序:ORG 0000H LJMP MAIN ORG 001BH AJMP SER_T1 ORG 0100HMAIN: MOV TMOD , #20H ;写入方式控制字 MOV TH0 , #06H ;写入计数初值 MOV TL0 , #06H

29、MOV R7 , #00H ;中断次数初值 SETB P1.0 SETB EA ;开总中断 SETB ET1 ;开T1中断 SETB TR1 ;启动T1 SJMP $ ;等待中断SER_T1: INC R7 ;中断次数加1 CJNE R7 , #60,LOOP1 CLR P1.0 ;中断次数到120次即高电平时间到输出0 AJMP LOOPLOOP1: CJNE R7 , #200,LOOP SETB P1.0 ;中断次数到400次即周期到输出1 MOV R7 , #00HLOOP: RETI END C语言程序:语言程序:#include #define uchar unsigned cha

30、ruchar time=0;uchar period=200;uchar high=60;main () TMOD=0 x20; TH0=0 x06; TL0=0 x06; EA=1; ET1=1; TR1=1; P1.0=1; while (1); timer1 () interrupt 3 if (+time=high) P1.0=0; else if (time=period) time=0; P1.0=1; 1)SCON - 可位寻址的串行口控制寄存器,用以可位寻址的串行口控制寄存器,用以设定串行口的工作方式、接收设定串行口的工作方式、接收/发送控制以及设置发送控制以及设置状态标志:状

31、态标志: 2 2 80C51串行口寄存器串行口寄存器 SM0和和SM1为工作方式选择位,可选择四种工作方式:为工作方式选择位,可选择四种工作方式: SM2:多机通信控制位。:多机通信控制位。 REN:允许接收控制位。当:允许接收控制位。当REN=1,则允许接,则允许接收,当收,当REN=0,则禁止接收。,则禁止接收。TB8:发送数据的第:发送数据的第9位。位。 RB8:接收数据的第:接收数据的第9位。位。 TI:发送中断标志位。:发送中断标志位。 RI:接收中断标志位。:接收中断标志位。 *SM2,多机通信控制位,多机通信控制位,主要用于方式,主要用于方式2和方式和方式3。当当接收机的接收机的

32、SM2=1时可以利用收到的时可以利用收到的RB8来控制是否来控制是否激活激活RI(RB80时不激活时不激活RI,收到的信息丢弃;,收到的信息丢弃;RB81时收到的数据进入时收到的数据进入SBUF,并激活,并激活RI,进而在,进而在中断服务中将数据从中断服务中将数据从SBUF读走)。读走)。当当SM2=0时,不时,不论收到的论收到的RB8为为0和和1,均可以使收到的数据进入,均可以使收到的数据进入SBUF,并激活,并激活RI(即此时(即此时RB8不具有控制不具有控制RI激活的激活的功能)。通过控制功能)。通过控制SM2,可以实现多机通信。,可以实现多机通信。在方式在方式0时,时,SM2必须是必须

33、是0。在方式。在方式1时,若时,若SM2=1,则只有接收到有效停止位时,则只有接收到有效停止位时,RI才置才置1。REN,允许串行接收位,允许串行接收位。由软件置。由软件置REN=1,则启动,则启动串行口接收数据;若软件置串行口接收数据;若软件置REN=0,则禁止接收。,则禁止接收。TI,发送中断标志位,发送中断标志位。在方式。在方式0时,当串行发送第时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位数据结束时,或在其它方式,串行发送停止位的开始时,位的开始时,由内部硬件使由内部硬件使TI置置1,向,向CPU发中断发中断申请。在中断服务程序中,必须用申请。在中断服务程序中,必须用软件

34、将其清软件将其清0,取消此中断申请。取消此中断申请。RI,接收中断标志位,接收中断标志位。在方式。在方式0时,当串行接收时,当串行接收第第8位数据结束时,或在其它方式,串行接收停位数据结束时,或在其它方式,串行接收停止位的中间时,止位的中间时,由内部硬件使由内部硬件使RI置置1,向,向CPU发发中断申请。也必须在中断服务程序中,用中断申请。也必须在中断服务程序中,用软件将软件将其清其清0,取消此中断申请。,取消此中断申请。2) PCON电源控制寄存器电源控制寄存器 : SMOD(PCON.7) 波特率倍增位。在串行口方式波特率倍增位。在串行口方式1、方、方式式2、方式、方式3时,波特率与时,波

35、特率与SMOD有关,当有关,当SMOD=1时,波时,波特率提高一倍。复位时,特率提高一倍。复位时,SMOD=0。3) IE中断允许控制寄存器中断允许控制寄存器 :EA-中断允许总控制位;中断允许总控制位;ES-串行中断允许控制位串行中断允许控制位 4) IP中断优先级控制寄存器中断优先级控制寄存器 :PS-串行中断优先级设定位串行中断优先级设定位 6.3.3 6.3.3 80C51串行口的工作方式串行口的工作方式 一、方式一、方式0 方式方式0时,串行口为同步移位寄存器的输入输出方时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由式。主要用于扩展并行输入或输出口。数

36、据由RXD(P3.0)引脚输入或输出,同步移位脉冲由)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为)引脚输出。发送和接收均为8位数据,位数据,低位低位在先,高位在后在先,高位在后。波特率固定为。波特率固定为fosc/12。 1、方式、方式0发送过程:发送过程: 在在TI=0时,当时,当CPU执行一条向执行一条向SBUF写数据的指令写数据的指令时,如时,如MOV SBUF,A;就启动发送过程。经过一个机;就启动发送过程。经过一个机器周期,写入发送数据寄存器中的数据按器周期,写入发送数据寄存器中的数据按低位在低位在前,高位在后前,高位在后从从RXD依次发送出去,同步时钟

37、从依次发送出去,同步时钟从TXD送出。送出。8位数据(一帧)发送完毕后,由硬件位数据(一帧)发送完毕后,由硬件使发送中断标志使发送中断标志TI置位,向置位,向CPU申请中断。申请中断。 2、方式、方式0接收过程接收过程 在在RI=0的条件下,将的条件下,将REN(SCON.4)置)置“1”就启动就启动一次接收过程。串行数据通过一次接收过程。串行数据通过RXD接收,同步移位脉冲接收,同步移位脉冲通过通过TXD输出。在移位脉冲的控制下,输出。在移位脉冲的控制下,RXD上的串行数上的串行数据依次移入移位寄存器。当据依次移入移位寄存器。当8位数据(一帧)全部移入移位数据(一帧)全部移入移位寄存器后,接

38、收控制器发出位寄存器后,接收控制器发出“装载装载SBUF”信号,将信号,将8位位数据并行送入接收数据缓冲器数据并行送入接收数据缓冲器SBUF中,同时,由硬件使中,同时,由硬件使接收中断标志接收中断标志RI置位,向置位,向CPU申请中断。申请中断。 常用于串行通讯。除发常用于串行通讯。除发/ /收收8 8位数据外,还位数据外,还 在在D0D0位前有一个起始位位前有一个起始位“0 0”; 在在D7D7位后有一个停止位位后有一个停止位“1 1”。方式方式1 1工作时:工作时: 发送端自动添加一个起始位和一个停止位;发送端自动添加一个起始位和一个停止位; 接收端自动去掉一个起始位和一个停止位。接收端自

39、动去掉一个起始位和一个停止位。二、方式二、方式1 18 8位位UART(1+8+1UART(1+8+1位位) )波特率可变波特率可变 波特率可变波特率可变 用定时器用定时器T1T1作波特率发生器作波特率发生器: 公式:波特率公式:波特率 = =(2 2SMODSMOD/32/32) T1T1的溢出率的溢出率波特率波特率=(2=(2SMODSMOD/32)/32) T1T1的溢出率的溢出率 (P172P172) 溢出率:溢出率:T1T1溢出的频繁程度溢出的频繁程度 即:即:T1T1溢出一次所需时间的倒数。溢出一次所需时间的倒数。T1T1溢出时间(溢出时间(256256X X)(12/fosc)(

40、12/fosc) 初值初值 X = X = 2 2n n - - 2 2SMOD SMOD fosc fosc 32 32 波特率波特率 1212 波特率波特率 = =2 2SMOD SMOD fosc fosc32 32 12 12(256(256 - X)- X)其中:其中:X X 是定时器初值是定时器初值 例例 用用T1T1工作于工作于方式方式2 2来产生波特率来产生波特率12001200, 已知晶振频率已知晶振频率=6MHz=6MHz。要求出。要求出T1T1的初值:的初值:初值初值 X = X = 2 28 8 - - 2 20 0 6 6 10106 632 32 1200 1200

41、 1212= 256 = 256 - - = 256 = 256 - - 13.02 13.026 6 10106 6460800460800 243 = 0F3H 243 = 0F3H 2. 总线的构造总线的构造n1。以。以P0口的口的8位口线作位口线作低低8位地址位地址/数据线。数据线。n2。以。以P2口的口线作口的口线作高位地址线高位地址线n3。控制信号。控制信号.使用使用ALE作地址锁存的选通信号,以实现低作地址锁存的选通信号,以实现低8位地址的锁存;位地址的锁存;.以以PSEN信号作扩展程序存储器的读选通信号信号作扩展程序存储器的读选通信号;.以以EA信号作为内外程序存储器的选择信号

42、;信号作为内外程序存储器的选择信号;.以以RD和和WR作为扩展数据存储器和作为扩展数据存储器和I/O端口的读选通信号。端口的读选通信号。扩展总线构造图两种命令两种命令工作方式命令工作方式命令C C口位置位口位置位/ /复位命令复位命令1 1、工作方式命令、工作方式命令用于确定各数据口的用于确定各数据口的工作方式及数据传送工作方式及数据传送方向方向48255初始化初始化 A A口有三种工作方式口有三种工作方式 B B口只有两种工作方式口只有两种工作方式 在方式在方式1 1或方式或方式2 2下,对下,对 C C口的定义不影响作为联口的定义不影响作为联 络线使用的络线使用的C C口各位功能口各位功能

43、 最高位(最高位( )是标志位,)是标志位, 其状态固定为其状态固定为“1 1”,用于,用于 表明本字节是工作方式表明本字节是工作方式 命令命令7D 例例7.3.1 按照图按照图7.3.4中中8255与与AT89C52的连接图对的连接图对8255初始化编程。初始化编程。 A、B、C口均为基本口均为基本I/O输出方式。输出方式。 A口与上口与上C口为基本口为基本I/O输出方式,输出方式,B口与下口与下C口为基口为基本本I/O输入方式。输入方式。 A口为应答口为应答I/O输入方式,输入方式,B口为应答口为应答I/O输出方式。输出方式。3 3、初始化编程、初始化编程8255A初始化的内容就是向控制字

44、寄存器写入工作方式命初始化的内容就是向控制字寄存器写入工作方式命令和令和C口位置位口位置位/复位命令。工作方式字应输入控制寄存器,复位命令。工作方式字应输入控制寄存器,按上面的连接方式,控制寄存器的地址为按上面的连接方式,控制寄存器的地址为E003H。 A、B、C口均为基本口均为基本I/O输出方式输出方式 解:解:8255的初始化程序为:的初始化程序为: (1)#include #include #define COM8255 XBYTE0 xe003/ 定义定义8255控制寄存器地址控制寄存器地址 #define uchar unsigned char void init8255(void)

45、 COM8255=0 x80; /*工作方工作方式选择字送入式选择字送入8255控制寄存控制寄存器器,设置设置A、B、C口均为基本口均为基本I/O输出方式输出方式 */ A口与上口与上C口为基本口为基本I/O输出方式,输出方式,B口口与下与下C口为基本口为基本I/O输入方式。输入方式。#include#define COM8255 0 xe003 /*定定义义8255控制寄存器地址控制寄存器地址 */void init8255(void) XBYTE COM8255=0 x83; /*工工作方式选择字送入作方式选择字送入8255控制寄存器控制寄存器,设置设置A、C口为口为基本基本I/O输出方式

46、,输出方式,B、C口为基本口为基本I/O输入方式输入方式*/ A口为应答口为应答I/O输入方式,输入方式,B口为应答口为应答I/O输出方式。输出方式。uchar xdata COM8255 _at_ 0 xe003; /*定义定义8255控制寄存控制寄存器地址器地址*/void init8255(void) COM8255=0 xb4; /*工作方式工作方式选择字送入选择字送入8255控制寄存控制寄存器,设置器,设置A、B、C口为基本口为基本I/O输出输出方式方式 */五五DAC0832的应用的应用 D/A转换器在实际中经常作为波形发生器使用,通过它转换器在实际中经常作为波形发生器使用,通过它

47、可以产生各种各样的波形。它的基本原理如下:利用可以产生各种各样的波形。它的基本原理如下:利用D/A转换器输出模拟量与输入数字量成正比这一特点,通过程转换器输出模拟量与输入数字量成正比这一特点,通过程序控制序控制CPU向向D/A转换器送出随时间呈一定规律变化的数转换器送出随时间呈一定规律变化的数字,则字,则D/A转换器输出端就可以输出随时间按一定规律变转换器输出端就可以输出随时间按一定规律变化的波形。化的波形。00H0FFHA=00A=0FFHA=00A=0FFH直通方式举例直通方式举例 程序实例程序实例1:输出正锯齿波:输出正锯齿波 Main()() While(1)P1+;/这里假设这里假设

48、P1口接数据输入口接数据输入 程序实例程序实例2:输出负锯齿波:输出负锯齿波 Main()() While(1) P1-; /这里假设这里假设P1口接数据输入口接数据输入 程序实例程序实例3:输出三角波:输出三角波 Main()() P1=0; While(1) While(1) If(P1!=0 xFF) P1+;/这里假设这里假设P1口接数据输入口接数据输入 Else Break; While(1) If(P1!=0 x00) P1-; /这里假设这里假设P1口接数据输入口接数据输入 Else Break; 第八章第八章 MCS-51MCS-51与与D/AD/A、A/DA/D的接口的接口A

49、DC0809的工作流程如图所示:的工作流程如图所示:1输入输入3位地址,并使位地址,并使ALE=1,将地址存入地址锁存器中,经地址译,将地址存入地址锁存器中,经地址译码器译码从码器译码从8路模拟通道中选通一路模拟量送到比较器。路模拟通道中选通一路模拟量送到比较器。2送送START一高脉冲,一高脉冲,START的的上升沿上升沿使逐次逼近寄存器复位,使逐次逼近寄存器复位,下下降沿降沿启动启动A/D转换,并使转换,并使EOC信号为低电平。信号为低电平。3当转换结束时,转换的结果送入到输出三态锁存器,并使当转换结束时,转换的结果送入到输出三态锁存器,并使EOC信信号回到高电平,通知号回到高电平,通知C

50、PU已转换结束。已转换结束。4CPU使使OE为高电平,从输出端为高电平,从输出端D0D7读入数据。读入数据。三三ADC0809的工作流程的工作流程第八章第八章 MCS-51MCS-51与与D/AD/A、A/DA/D的接口的接口2. ADC0809的接口的接口(模拟时序方式模拟时序方式)和编程和编程#define ALEP2_4#define STARTP2_5#define OEP2_6#define EOCP2_7#include #include 第八章第八章 MCS-51MCS-51与与D/AD/A、A/DA/D的接口的接口 unsigned char adc_0809(unsigned

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com