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

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

《最新单片机原理与应用技术重点程序高惠芳幻灯片》由会员分享,可在线阅读,更多相关《最新单片机原理与应用技术重点程序高惠芳幻灯片(91页珍藏版)》请在金锄头文库上搜索。

1、单片机原理与应用技术重点程序高惠芳 例例例例3 322设设设设内内内内部部部部RAMRAM中中中中30H30H单单单单元元元元的的的的内内内内容容容容为为为为40H 40H ,40H40H单单单单元元元元的的的的内内内内容容容容为为为为10H10H,P1P1口口口口作作作作输输输输入入入入口口口口,其其其其输输输输入入入入数数数数据据据据为为为为0CAH0CAH,程程程程序序序序及及及及执执执执行行行行后的结果如下:后的结果如下:后的结果如下:后的结果如下:MOV R0MOV R0,#30H #30H ;单元地址;单元地址;单元地址;单元地址30H30H送送送送R0R0中中中中MOV A MO

2、V A ,R0 R0 ;R0 R0 间址,将间址,将间址,将间址,将30H30H单元内容送单元内容送单元内容送单元内容送A AMOV R1 MOV R1 ,A A ;A A送送送送R1R1MOV B MOV B ,R1R1 ;R1R1间址,将间址,将间址,将间址,将40H40H单元内容送单元内容送单元内容送单元内容送B BMOV R1MOV R1,P P 1 1 ;将;将;将;将P1P1内容送内容送内容送内容送40H40H单元单元单元单元MOV P2 MOV P2 , P1 P1 ;将;将;将;将P1P1内容送内容送内容送内容送P2P2 执执执执行行行行结结结结果果果果:(R0)=30H (R

3、0)=30H , (R1R1)=40H =40H , (A A)=40H =40H , ( B B) =10H =10H , ( P1P1) =0CAH =0CAH , ( 40H40H) =0CAH =0CAH , (P2)=0CAH(P2)=0CAH例例4.3.2 将内部将内部RAM中中20H单元的压缩单元的压缩BCD码拆开,转换成相应的码拆开,转换成相应的ASC码,存码,存入入21H、22H,高位存,高位存22H.(P64)ORG 1000HSTART:MOV A,20H ; 取压缩取压缩BCD码码ANL A,#0FH ; 取低位取低位BCD码码 ADD A,#30H ; 转换为低位转换

4、为低位ASCII码码MOV 21H,A ; 保存低位保存低位ASCII码码MOV A,20H ; 重新取压缩重新取压缩BCD码码ANL A,#0F0H ; 分离高位分离高位BCD码码SWAPA ; 得到高位得到高位BCD码码ADD A,#30H ; 转换为高位转换为高位ASCII码码MOV 22H,A ; 保存高位保存高位ASCII码码SJMP$END补充举例:三字节无符号数相加,其中被补充举例:三字节无符号数相加,其中被加数在内部加数在内部RAM的的50H、51H和和52H单元单元中;加数在内部中;加数在内部RAM的的53H、54H和和55H单元中;要求把相加之和存放在单元中;要求把相加之和

5、存放在50H、51H和和52H单元中进位存放在位寻址区的单元中进位存放在位寻址区的20H单单元最低位中(即元最低位中(即20H.0)。)。分析分析:除最低字除最低字节可以使用可以使用ADD指令之外,其指令之外,其它字它字节相加相加时要把低字要把低字节的的进位考位考虑进去,因去,因此使用此使用ADDC指令指令.MOV 00H,C#20H分支程序是通分支程序是通过转移指令移指令实现的的一、一、单分支程序分支程序使用条件使用条件转移指令移指令实现,即根据条件,即根据条件对程序的程序的执行行进行判断,行判断,满足条件足条件则进行程序行程序转移,否移,否则程序程序顺利利执行。行。可可实现单分支程序分支程

6、序转移的指令有:移的指令有:JZ、JNZ、CJNE、DJNZ等等还有以位状有以位状态作作为条件条件进行程序分支的指令:行程序分支的指令:JC、JNC、JB、JNB和和JBC等等(1)单分支分支结构构举例例例例4.3.3 求符号函数的值。已知片内求符号函数的值。已知片内RAM的的40H单元单元内有一自变量内有一自变量X,编制程序按如下条件求函数编制程序按如下条件求函数Y的值,的值,并将其存入片内并将其存入片内RAM的的41H单元中。见单元中。见P651 X00 X=0-1 X0Y =ORG 1000HSTART: MOV A, 40H; 将将X送入送入A中中 JZ COMP ; 若若A为为0,转

7、至,转至COMP处处 JNB ACC.7, POST ; 若若A第第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补充充举例:假定在外部例:假定在外部RAM中有中有ST1、ST2、ST3共共3

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

9、(16) MOV R4, #00H ; 和高位单元和高位单元R4清清0 MOV R5, #00H ; 和低位单元和低位单元R5清清0LOOP: 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,则转,则转 ;到

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

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

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

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

14、t 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 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。 51系列单片机的5个中

15、断源的中断服务入口地址之间相差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个发光二极管,消抖电路用于产生中断请求信号,当消抖电路的开关来回

16、拨动一次将产生一个下跳变信号,向CPU申请中断。要求:初时发光二极管全黑,每中断一次,P1.0P1.3所接的开关状态反映到发光二极管上,且要求开关合上时对应发光二极管亮。n解:汇编程序如下:n ORG 0000Hn AJMP MAINn ORG 0003H ;外部中断0入口n AJMP SER_INT0 ;转中断服务程序n ORG 0100H ;主程序n MAIN: MOV P1 , #0FH ;熄灭发光二极管且对开关输入端先输出1n SETB IT0 ;脉冲触发方式n SETB EX0 ;允许中断n SETB EA ;总中断允许n AJMP $ ;等待中断nSER_INT0: MOV P1

17、, #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个发光二极个发光二极管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产生了中断,发光二极管才反映新置的开关状态。生了中断,发光二极管才反映新置的开关状态。该例子的执行结果是:该例子的执行结果是:n#inclu

18、denvoid int0() interrupt 0 /*中断函数中断函数*/nn P1=0x0f ; n/*熄灭发光二极管且对开关输入端先输出熄灭发光二极管且对开关输入端先输出1*/n P1=4; n /*读入开关状态,并左移四位,使开关反映在发光二极管上读入开关状态,并左移四位,使开关反映在发光二极管上*/n P1 P1; /*对对P1口内容取反口内容取反*/nnmain() /*主函数主函数nn EA=1; /*开中断总开关开中断总开关*/n EX0=1; /*允许中断允许中断*/n IT0=1; /*负跳沿产生中断负跳沿产生中断*/n while(1) /*等待中断等待中断*/nC语言

19、程序如下:语言程序如下: 补2: 通通过外部中断控制八盏灯循环点亮。解:解:通过P1口扩展八盏灯,在 INT1引脚(P3.3)接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。程序如下:程序如下: C源程序见源程序见int1.c ORG 0000H LJMP MAIN ORG 0013H ; 中断服务程序入口地址 LJMP IN11 MAIN:SETB EA ; 开总中断允许“开关” SETB EX1 ; 开分中断允许“开关” CLR PX1 ; 低 优先级(也可不要此句) SETB IT1 ; 边沿触发 MOV

20、 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 停止1 启动2工作方式控制寄存器TMOD C1/T1控制C0/T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE门控位GATE=0

21、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&T0TR0GATEINT0C/T=0C/T=1TL0 TH0定时/计数器常数的计算n1计数器初值的计算n把计数器计满为零所需要的计数值设定为C,计数初值设定为Tc,由此可得到公式:Tc=M-

22、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为定时器的定时初值。 开中断(如果使用中断方式): 编程置位EA、ETi TRi位置位控制定时器的启动和停止。四、应用举例计算计数器的计数初值: 编程时将计数初值送THi、 TLi; 可编程器件在使用前需要进行初始

23、化:确定TMOD控制字:编程时将控制字送TMOD; 例1 设晶振频率fOSC=12MHz,使用定时器0以方式1产生周期为4ms的方波脉冲,并由P1.0 输出。以中断方式实现。8051P1.0P1.04000s1. 定时器/计数器作定时器使用 TMOD确定T1控制T0控制1000XXXXM0M1C/TGATEM0M1C/TGATE控制字01H 要产生4ms 的方波脉冲,只需在P1.0端以2ms为间隔,交替输出高低电平即可实现。为此,定时间应为2000s 。使用12z晶振,则一个机器周期为1s,设待求计数初值为,则: 计算计数器的计数初值;(216X)1us=2000us 即216X=2000 X

24、216-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 CPL P1.0 ;输出取反 RETI END ORG 0030HMAIN:MOV TMOD, #01H ;T0为方式1 MOV TH0, #0F8H MOV TL0,#3

25、0H ;初值 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= 0xF8; TL0 = 0X30; void main(void) TMOD=0x01; P1_0=0; TH0= 0xF8; TL0 = 0X30; EA=1; ET0=1; TR0=1; while (1);C程序设计程序设计中断方式中断方式n(2)采用查询方式编程n汇编程序:n OR

26、G 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 CPL P1.0 ;输出取反n SJMP LOOP ;重复循环n ENDn(2)采用查询方式编程n汇编程序:n ORG 0000Hn LJMP MAINn ORG 0100HnMA

27、IN: 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 000BHn AJMP SER_T0 n ORG 0100HnMAIN: MOV TMOD , #01H n MOV TH0 , #0F8H n MOV TL0 , #30Hn SET

28、B 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=0x01; P1_0=0; TH0= 0xFF; TL0 = 0X83; TR0=1; while (1) if(TF0 =1) TF0 = 0;P1_0=!P1_0; TH0= 0xFF; TL0 = 0X83;C程序设计程序设计查询方式查询方式2. 定时器/计数器作长时间定时器使用n方法1:采用软件计数的方法

29、实现,每次溢出后,用于计数的寄存器加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解:对于6MHz晶振,使用工作方式2,最大定时时间为(28-0)(1/6)10-612=512s取500s定时,则周期100ms需要中断200次,占空比为30%,高电平需要60次中断。500s定

30、时,初值为:256 (6/12)500=6图图6.2.7 中断服务程序流程图中断服务程序流程图汇编程序:ORG 0000H LJMP MAIN ORG 001BH AJMP SER_T1 ORG 0100HMAIN: MOV TMOD , #20H ;写入方式控制字 MOV TH0 , #06H ;写入计数初值 MOV TL0 , #06H MOV R7 , #00H ;中断次数初值 SETB P1.0 SETB EA ;开总中断 SETB ET1 ;开T1中断 SETB TR1 ;启动T1 SJMP $ ;等待中断SER_T1: INC R7 ;中断次数加1 CJNE R7 , #60,LO

31、OP1 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 charuchar time=0;uchar period=200;uchar high=60;main () TMOD=0x20; TH0=0x06; TL0=0x06; EA=1; ET1=1; TR1=1; P1.0=1; while (1); timer

32、1 () interrupt 3 if (+time=high) P1.0=0; else if (time=period) time=0; P1.0=1; 1)SCON-可位寻址的串行口控制寄存器,用以可位寻址的串行口控制寄存器,用以设定串行口的工作方式、接收设定串行口的工作方式、接收/发送控制以及设置发送控制以及设置状态标志:状态标志: 2 2 80C51串行口寄存器串行口寄存器 SM0和和SM1为工作方式选择位,可选择四种工作方式:为工作方式选择位,可选择四种工作方式: SM2:多机通信控制位。:多机通信控制位。REN:允许接收控制位。当:允许接收控制位。当REN=1,则允许接,则允许接

33、收,当收,当REN=0,则禁止接收。,则禁止接收。TB8:发送数据的第:发送数据的第9位。位。RB8:接收数据的第:接收数据的第9位。位。TI:发送中断标志位。:发送中断标志位。RI:接收中断标志位。:接收中断标志位。*SM2,多机通信控制位,多机通信控制位,主要用于方式,主要用于方式2和方式和方式3。当当接收机的接收机的SM2=1时可以利用收到的时可以利用收到的RB8来控制是否来控制是否激活激活RI(RB80时不激活时不激活RI,收到的信息丢弃;,收到的信息丢弃;RB81时收到的数据进入时收到的数据进入SBUF,并激活,并激活RI,进而在中断,进而在中断服务中将数据从服务中将数据从SBUF读

34、走)。读走)。当当SM2=0时,不论收时,不论收到的到的RB8为为0和和1,均可以使收到的数据进入,均可以使收到的数据进入SBUF,并激活并激活RI(即此时(即此时RB8不具有控制不具有控制RI激活的功能)。激活的功能)。通过控制通过控制SM2,可以实现多机通信。,可以实现多机通信。在方式在方式0时,时,SM2必须是必须是0。在方式。在方式1时,若时,若SM2=1,则只有接收到有效停止位时,则只有接收到有效停止位时,RI才置才置1。REN,允许串行接收位,允许串行接收位。由软件置。由软件置REN=1,则启动,则启动串行口接收数据;若软件置串行口接收数据;若软件置REN=0,则禁止接收。,则禁止

35、接收。TI,发送中断标志位,发送中断标志位。在方式。在方式0时,当串行发送第时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位位数据结束时,或在其它方式,串行发送停止位的开始时,的开始时,由内部硬件使由内部硬件使TI置置1,向,向CPU发中断申发中断申请。在中断服务程序中,必须用请。在中断服务程序中,必须用软件将其清软件将其清0,取,取消此中断申请。消此中断申请。RI,接收中断标志位,接收中断标志位。在方式。在方式0时,当串行接收第时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位位数据结束时,或在其它方式,串行接收停止位的中间时,的中间时,由内部硬件使由内部硬件使RI置置

36、1,向,向CPU发中断申发中断申请。也必须在中断服务程序中,用请。也必须在中断服务程序中,用软件将其清软件将其清0,取消此中断申请。取消此中断申请。2)PCON电源控制寄存器电源控制寄存器 : SMOD(PCON.7)波特率倍增位。在串行口方式波特率倍增位。在串行口方式1、方、方式式2、方式、方式3时,波特率与时,波特率与SMOD有关,当有关,当SMOD=1时,波时,波特率提高一倍。复位时,特率提高一倍。复位时,SMOD=0。3)IE中断允许控制寄存器中断允许控制寄存器 :EA-中断允许总控制位;中断允许总控制位;ES-串行中断允许控制位串行中断允许控制位 4)IP中断优先级控制寄存器中断优先

37、级控制寄存器 :PS-串行中断优先级设定位串行中断优先级设定位 6.3.3 6.3.3 80C51串行口的工作方式串行口的工作方式 一、方式一、方式0方式方式0时,串行口为同步移位寄存器的输入输出方时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。数据由式。主要用于扩展并行输入或输出口。数据由RXD(P3.0)引脚输入或输出,同步移位脉冲由)引脚输入或输出,同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为)引脚输出。发送和接收均为8位数据,位数据,低位在先,高位在后低位在先,高位在后。波特率固定为。波特率固定为fosc/12。1、方式、方式0发送过程:发送过程:

38、在在TI=0时,当时,当CPU执行一条向执行一条向SBUF写数据的指令写数据的指令时,如时,如MOVSBUF,A;就启动发送过程。经过一个机;就启动发送过程。经过一个机器周期,写入发送数据寄存器中的数据按器周期,写入发送数据寄存器中的数据按低位在低位在前,高位在后前,高位在后从从RXD依次发送出去,同步时钟从依次发送出去,同步时钟从TXD送出。送出。8位数据(一帧)发送完毕后,由硬件位数据(一帧)发送完毕后,由硬件使发送中断标志使发送中断标志TI置位,向置位,向CPU申请中断。申请中断。2、方式、方式0接收过程接收过程 在在RI=0的条件下,将的条件下,将REN(SCON.4)置)置“1”就启

39、动就启动一次接收过程。串行数据通过一次接收过程。串行数据通过RXD接收,同步移位脉冲通接收,同步移位脉冲通过过TXD输出。在移位脉冲的控制下,输出。在移位脉冲的控制下,RXD上的串行数据依上的串行数据依次移入移位寄存器。当次移入移位寄存器。当8位数据(一帧)全部移入移位寄位数据(一帧)全部移入移位寄存器后,接收控制器发出存器后,接收控制器发出“装载装载SBUF”信号,将信号,将8位数据位数据并行送入接收数据缓冲器并行送入接收数据缓冲器SBUF中,同时,由硬件使接收中,同时,由硬件使接收中断标志中断标志RI置位,向置位,向CPU申请中断。申请中断。常用于串行通讯。除发常用于串行通讯。除发/ /收

40、收8 8位数据外,还位数据外,还 在在D0D0位前有一个起始位位前有一个起始位“0 0”; 在在D7D7位后有一个停止位位后有一个停止位“1 1”。方式方式1 1工作时:工作时: 发送端自动添加一个起始位和一个停止位;发送端自动添加一个起始位和一个停止位; 接收端自动去掉一个起始位和一个停止位。接收端自动去掉一个起始位和一个停止位。二、方式二、方式1 18 8位位UART(1+8+1UART(1+8+1位位) )波特率可变波特率可变 波特率可变波特率可变 用定时器用定时器T1T1作波特率发生器作波特率发生器: 公式:波特率公式:波特率 = =(2 2SMODSMOD/32/32) T1T1的溢

41、出率的溢出率波特率波特率=(2=(2SMODSMOD/32)/32) T1T1的溢出率的溢出率 (P172P172) 溢出率:溢出率:T1T1溢出的频繁程度溢出的频繁程度 即:即:T1T1溢出一次所需时间的倒数。溢出一次所需时间的倒数。T1T1溢出时间(溢出时间(256256X X)(12/fosc)(12/fosc) 初值初值 X = X = 2 2n n - - 2 2SMOD SMOD fosc fosc 32 32 波特率波特率 1212 波特率波特率 = =2 2SMOD SMOD fosc fosc32 32 12(256 12(256 - X)- X)其中:其中:X X 是定时器

42、初值是定时器初值 例例 用用T1T1工作于工作于方式方式2 2来产生波特率来产生波特率12001200, 已知晶振频率已知晶振频率=6MHz=6MHz。要求出。要求出T1T1的初值:的初值:初值初值 X = X = 2 28 8 - - 2 20 0 6 6 10106 632 32 1200 1200 1212= 256 = 256 - - = 256 = 256 - - 13.02 13.026 6 10106 6460800460800 243 = 0F3H 243 = 0F3H 2.总线的构造总线的构造n1。以。以P0口的口的8位口线作位口线作低低8位地址位地址/数据线。数据线。n2。

43、以。以P2口的口线作口的口线作高位地址线高位地址线n3。控制信号。控制信号.使用使用ALE作地址锁存的选通信号,以实现低作地址锁存的选通信号,以实现低8位地址的锁存;位地址的锁存;.以以PSEN信号作扩展程序存储器的读选通信号信号作扩展程序存储器的读选通信号;.以以EA信号作为内外程序存储器的选择信号;信号作为内外程序存储器的选择信号;.以以RD和和WR作为扩展数据存储器和作为扩展数据存储器和I/O端口的读选通信号。端口的读选通信号。扩展总线构造图两种命令两种命令工作方式命令工作方式命令C口位置位口位置位/复位命令复位命令1、工作方式命令、工作方式命令用于确定各数据口的用于确定各数据口的工作方

44、式及数据工作方式及数据传送送方向方向48255初始化初始化A口有三种工作方式口有三种工作方式B口只有两种工作方式口只有两种工作方式在方式在方式1或方式或方式2下,下,对C口的定口的定义不影响作不影响作为联络线使用的使用的C口各位功能口各位功能最高位(最高位()是)是标志位,志位,其状其状态固定固定为“1”,用于,用于表明本字表明本字节是工作方式是工作方式命令命令例例7.3.1 按照图按照图7.3.4中中8255与与AT89C52的连接图对的连接图对8255初始化编程。初始化编程。 A、B、C口均为基本口均为基本I/O输出方式。输出方式。 A口与上口与上C口为基本口为基本I/O输出方式,输出方式

45、,B口与下口与下C口为基口为基本本I/O输入方式。输入方式。 A口为应答口为应答I/O输入方式,输入方式,B口为应答口为应答I/O输出方式。输出方式。3、初始化、初始化编程程8255A初始化的内容就是向控制字寄存器写入工作方式命初始化的内容就是向控制字寄存器写入工作方式命令和令和C口位置位口位置位/复位命令。工作方式字应输入控制寄存器,复位命令。工作方式字应输入控制寄存器,按上面的连接方式,控制寄存器的地址为按上面的连接方式,控制寄存器的地址为E003H。 A、B、C口均为基本口均为基本I/O输出方式输出方式解:解:8255的初始化程序为:的初始化程序为:(1)#include#include

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

47、id init8255(void) XBYTE COM8255=0x83; /*工工作方式选择字送入作方式选择字送入8255控制寄存器控制寄存器,设置设置A、C口为口为基本基本I/O输出方式,输出方式,B、C口为基本口为基本I/O输入方式输入方式*/ A口为应答口为应答I/O输入方式,输入方式,B口为应答口为应答I/O输出方式。输出方式。uchar xdata COM8255 _at_ 0xe003; /*定义定义8255控制寄存控制寄存器地址器地址*/void init8255(void) COM8255=0xb4; /*工作方式工作方式选择字送入选择字送入8255控制寄存控制寄存器,设置器

48、,设置A、B、C口为基本口为基本I/O输出输出方式方式 */五五DAC0832的应用的应用 D/A转换器在实际中经常作为波形发生器使用,通过它转换器在实际中经常作为波形发生器使用,通过它可以产生各种各样的波形。它的基本原理如下:利用可以产生各种各样的波形。它的基本原理如下:利用D/A转换器输出模拟量与输入数字量成正比这一特点,通过程转换器输出模拟量与输入数字量成正比这一特点,通过程序控制序控制CPU向向D/A转换器送出随时间呈一定规律变化的数转换器送出随时间呈一定规律变化的数字,则字,则D/A转换器输出端就可以输出随时间按一定规律变转换器输出端就可以输出随时间按一定规律变化的波形。化的波形。0

49、0H0FFHA=00A=0FFHA=00A=0FFH直通方式举例直通方式举例程序实例程序实例1:输出正锯齿波:输出正锯齿波Main()()While(1)P1+;/这里假设这里假设P1口接数据输入口接数据输入程序实例程序实例2:输出负锯齿波:输出负锯齿波Main()()While(1)P1-; /这里假设这里假设P1口接数据输入口接数据输入程序实例程序实例3:输出三角波:输出三角波Main()()P1=0;While(1)While(1)If(P1!=0xFF)P1+;/这里假设这里假设P1口接数据输入口接数据输入ElseBreak;While(1)If(P1!=0x00)P1-;/这里假设这

50、里假设P1口接数据输入口接数据输入ElseBreak;第八章第八章 MCS-51MCS-51与与D/AD/A、A/DA/D的接口的接口ADC0809的工作流程如图所示:的工作流程如图所示:1输入输入3位地址,并使位地址,并使ALE=1,将地址存入地址锁存器中,经地址译,将地址存入地址锁存器中,经地址译码器译码从码器译码从8路模拟通道中选通一路模拟量送到比较器。路模拟通道中选通一路模拟量送到比较器。2送送START一高脉冲,一高脉冲,START的的上升沿上升沿使逐次逼近寄存器复位,使逐次逼近寄存器复位,下下降沿降沿启动启动A/D转换,并使转换,并使EOC信号为低电平。信号为低电平。3当转换结束时

51、,转换的结果送入到输出三态锁存器,并使当转换结束时,转换的结果送入到输出三态锁存器,并使EOC信号信号回到高电平,通知回到高电平,通知CPU已转换结束。已转换结束。4CPU使使OE为高电平,从输出端为高电平,从输出端D0D7读入数据。读入数据。三三ADC0809的工作流程的工作流程第八章第八章 MCS-51MCS-51与与D/AD/A、A/DA/D的接口的接口2.ADC0809的接口的接口(模拟时序方式模拟时序方式)和编程和编程#defineALEP2_4#defineSTARTP2_5#defineOEP2_6#defineEOCP2_7#include#include第八章第八章 MCS-

52、51MCS-51与与D/AD/A、A/DA/D的接口的接口unsignedcharadc_0809(unsignedcharchanel)/地址信息放在地址信息放在chanel变量中变量中unsignedchardd; /临时变量临时变量P2&=0Xf8;P2|=chanel;/P2低三位输出地址低三位输出地址ALE=1;/锁存地址锁存地址START=1;/复位逐次逼近寄存器复位逐次逼近寄存器ALE=0;START=0;/开始转换开始转换_nop_();_nop_();/延时延时while(EOC=0);/等待转换结束,转换时间等待转换结束,转换时间100usOE=1;/输出使能输出使能dd=

53、P1;/数据暂存数据暂存OE=0;Return(dd);/返回转换值返回转换值8031WRP2.7P0DI7DI0CSXFERWR1WR2DAC0832IOUT2IOUT1+-RFRDAC0832单缓冲方式接口电路ILE+5V【补充举例补充举例1】利用单缓冲方式利用单缓冲方式(总线方式总线方式),编程从,编程从DAC0832输出端分别产生锯齿波、三角波和方波。输出端分别产生锯齿波、三角波和方波。 分析:根据单缓冲方式图的连接,DAC0832的口地址为7FFFH。汇编语言编程:锯齿波锯齿波 MOV DPTR,#7FFFH CLR ALOOP:MOVX DPTR,A INC A SJMP LOOP

54、三角波:三角波: MOV DPTR,#7FFFH CLR ALOOP1:MOVX DPTR,A INC A CJNE A,#0FFH,LOOP1LOOP2:MOVX DPTR,A DEC A JNZ LOOP2 SJMP LOOP1方波:方波:MOVDPTR,#7FFFHLOOP:MOVA,#00HMOVXDPTR,AACALLDELAYMOVA,#FFHMOVXDPTR,AACALLDELAYSJMPLOOPDELAY:MOVR7,#0FFHDJNZR7,$RETC语言编程:锯齿波:#include /定义绝对地址访问#define uchar unsigned char#define DA

55、C0832 XBYTE0x7FFFvoid main()uchar i;while(1)for (i=0;i0xff;i+)DAC0832=i;三角波:#include /定义绝对地址访问#define uchar unsigned char#define DAC0832 XBYTE0x7FFFvoid main()uchar i;while(1)for (i=0;i0;i-)DAC0832=i;方波:方波:#include/定义绝对地址访问定义绝对地址访问#defineucharunsignedchar#defineDAC0832XBYTE0x7FFFvoiddelay(void);void

56、main()uchari;while(1)DAC0832=0;/输出低电平输出低电平delay();/延时延时DAC0832=0xff;/输出高电平输出高电平delay();/延时延时voiddelay()/延时函数延时函数uchari;for(i=0;i0xff;i+);四四ADC0809与与MCS-51单片机的接口(总线方式)单片机的接口(总线方式)下图是一个ADC0809与8051的一个接口电路图。1硬件连接硬件连接P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7ALE WR P2.7RDINTO+5VGNDD0D1D2D3D4D5D6D7ADDAADDBADDCCLKA

57、LESTARTOEEOCIN0IN1IN2IN3IN4IN5IN6IN7 VREF+VREF-ADC08098051分频器2软件编程软件编程例题例题1:设接口电路用于一个:设接口电路用于一个8路模拟量输入的巡回检路模拟量输入的巡回检测系统,使用测系统,使用中断方式中断方式采样数据,把采样转换所得的采样数据,把采样转换所得的数字量按序存于片内数字量按序存于片内RAM的的30H37H单元中。采样单元中。采样完一遍后停止采集。完一遍后停止采集。ADC0809的编程涉及3个步骤:1、8路模拟通道选择2、ADC的启动3、转换完成后转换数据的传送分析:1、8通道的地址分别为:0x00000x00072、对

58、8个地址写操作MOVX DPTR,A3、读入转换完的数据 MOVX A,DPTRORG0000HAJMPMAINORG0003HLJMPINT0ORG0100H;主程序;主程序MAIN:MOVR0,#30H;设立数据存储区指针;设立数据存储区指针MOVR2,#08H;设置;设置8路采样计数值路采样计数值SETBIT0;设置外部中断;设置外部中断0为边沿触发方式为边沿触发方式(下降沿下降沿)SETBEA;CPU开放中断开放中断SETBEX0;允许外部中断;允许外部中断0中断中断MOVDPTR,#0000H;送入口地址并指向;送入口地址并指向IN0LOOP:MOVXDPTR,A;启动;启动A/D转

59、换,转换,A的值无意义的值无意义HERE:SJMPHERE;等待中断;等待中断ORG0200H;中断服务程序;中断服务程序INT0:MOVXA,DPTR;读取转换后的数字量;读取转换后的数字量MOVR0,A;存入片内;存入片内RAM单元单元INCDPTR;指向下一模拟通道;指向下一模拟通道INCR0;指向下一个数据存储单元;指向下一个数据存储单元DJNZR2,NEXT;8路未转换完,则继续路未转换完,则继续CLREA;已转换完,则关中断;已转换完,则关中断CLREX0;禁止外部中断;禁止外部中断0中断中断RETI;中断返回;中断返回NEXT:MOVXDPTR,A;再次启动;再次启动A/D转换转

60、换RETI;中断返回;中断返回C语言编程:#include #include /定义绝对地址访问#define uchar unsigned char#define IN0 XBYTE0x0000 /定义IN0为通道0的地址static uchar data x8; /定义8个单元的数组,存放结果uchar xdata *ad_adr; /定义指向通道的指针uchar i ;void main(void)IT0=1; /初始化EX0=1;EA=1;i=0;ad_adr=&IN0; /指针指向通道0*ad_adr=i;/启动通道启动通道0转换转换.i值无意义值无意义等价于等价于movxdptr,aWhile(1); /等待中断void int_adc(void) interrupt 0 /中断函数xi=*ad_adr; /接收当前通道转换结果i+;ad_adr+; /指向下一个通道if (i8) *ad_adr=i; /8个通道未转换完,启动下一个通道返回elseEA=0;EX0=0; /8个通道转换完,关中断返回结束语结束语谢谢大家聆听!谢谢大家聆听!91

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号