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

上传人:wuy****n92 文档编号:88514441 上传时间:2023-04-26 格式:PPT 页数:90 大小:1.92MB
返回 下载 相关 举报
单片机原理与应用技术重点程序高惠芳.ppt_第1页
第1页 / 共90页
单片机原理与应用技术重点程序高惠芳.ppt_第2页
第2页 / 共90页
点击查看更多>>
资源描述

《单片机原理与应用技术重点程序高惠芳.ppt》由会员分享,可在线阅读,更多相关《单片机原理与应用技术重点程序高惠芳.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、传送类指令举例:传送类指令举例:例例例例3 311已已已已知知知知(R0R0)=30H=30H,问问问问执执执执行行行行如如如如下下下下程程程程序序序序,A A、R4R4、30H30H和和和和31H31H单元的内容是什么。单元的内容是什么。单元的内容是什么。单元的内容是什么。MOV A MOV A,#10H#10HMOV R4 MOV R4,#36H#36HMOV R0 MOV R0,#7AH#7AHMOV 31H MOV 31H,#01H#01H解:解:解:解:80518051执行上述指令后的结果为:执行上述指令后的结果为:执行上述指令后的结果为:执行上述指令后的结果为:(A A)=10H=

2、10H(R4R4)=36H=36H(30H30H)=7AH=7AH(31H31H)=01H=01H 例例例例3 322设设设设内内内内部部部部RAMRAM中中中中30H30H单单单单元元元元的的的的内内内内容容容容为为为为40H 40H,40H40H单单单单元元元元的的的的内内内内容容容容为为为为10H10H,P1P1口口口口作作作作输输输输入入入入口口口口,其其其其输输输输入入入入数数数数据据据据为为为为0CAH0CAH,程程程程序序序序及及及及执执执执行行行行后的结果如下:后的结果如下:后的结果如下:后的结果如下:MOV R0MOV R0,#30H#30H ;单元地址;单元地址;单元地址;

3、单元地址30H30H送送送送R0R0中中中中MOV A MOV 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 执执

4、执执行行行行结结结结果果果果:(R0)=30H(R0)=30H,(R1R1)=40H=40H,(A A)=40H=40H,(B B)=10H=10H,(P1P1)=0CAH=0CAH,(40H40H)=0CAH=0CAH,(P2)=0CAH(P2)=0CAH 例例例例3 355 已已已已知知知知外外外外部部部部RAM RAM 20202020HH单单单单元元元元中中中中有有有有一一一一个个个个数数数数X X,内内内内部部部部RAM RAM 20H20H单单单单元元元元一一一一个个个个数数数数Y Y,试试试试编编编编出出出出可可可可以以以以使使使使它它它它们们们们互互互互相相相相交交交交换换换换

5、的的的的程程程程序。序。序。序。解:解:解:解:MOV P2MOV P2,#2020H H MOV R1 MOV R1 ,#2020HH MOVX A MOVX A ,R1 R1 XCHXCH A A,R1R1 MOVX R1 MOVX R1,A A SJMP$SJMP$END END指向内部指向内部指向内部指向内部RAMRAM20H20H单元单元单元单元指向外部指向外部指向外部指向外部RAMRAM2020H2020H单元单元单元单元 例例例例3 377 把把把把01H01H单元内容送单元内容送单元内容送单元内容送02H02H单元,有几种不同的实现方法。单元,有几种不同的实现方法。单元,有几种

6、不同的实现方法。单元,有几种不同的实现方法。MOV 02H MOV 02H ,01H01H;直接寻址直接寻址直接寻址直接寻址 3 3字节字节字节字节 2 2周期周期周期周期 MOV A MOV A ,01H01H ;直接寻址;直接寻址;直接寻址;直接寻址 +寄存器寻址寄存器寻址寄存器寻址寄存器寻址 MOV 02H MOV 02H ,A A ;4 4字节字节字节字节 2 2周期周期周期周期 MOV A MOV A ,R1R1 ;寄存器寻址寄存器寻址寄存器寻址寄存器寻址 2 2字节字节字节字节 2 2周期周期周期周期 MOV R2 MOV R2 ,A A MOV R0 MOV R0 ,#01H#0

7、1H;4 4字节字节字节字节 3 3周期周期周期周期 MOV 02H MOV 02H ,R0R0;间接寻址间接寻址间接寻址间接寻址 PUSH 01H PUSH 01H ;栈操作栈操作栈操作栈操作 4 4字节字节字节字节 4 4周期周期周期周期 POP 02HPOP 02H 第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短。补充:补充:设20H,21H单元存放一个16位2进制数X1(高8位存于21H单元);30H,31H单元存放一个16位2进制数X2,(高8位存于31H单元);求X1+X2,结果存放于20H,

8、21H。(两数之和不超过16位)答案ORG 0000HAJMP mainORG 0100HMAIN:MOV 20H,#12HMOV 21H,#34HMOV 30H,#23HMOV 31H,#45HMOV A,20HADD A,30HMOV 20H,AMOV A,21HADDC A,31HMOV 21H,A SJMP$END1234H+#2345H=#3579H例例4.3.1 将片内将片内RAM 30H单元中的两位单元中的两位压缩压缩BCD码转换成二进制数送到片内码转换成二进制数送到片内RAM 40H单元中单元中.(P63)ORG 1000HSTART:MOV A,30H ;取两位取两位BCD压

9、缩码压缩码a1a0送送AANL A,#0F0H ;取高取高4位位BCD码码a1SWAP A ;高高4位与低位与低4位换位位换位MOV B,#0AH ;将二进制数将二进制数10送入送入BMUL AB ;将将10a1送入送入A中中MOV R0,A ;结果送入结果送入R0中保存中保存MOV A,30H ;再取两位再取两位BCD压缩码压缩码a1a0送送AANL A,#0FH ;取低取低4位位BCD码码a0ADD A,R0 ;求和求和10a1+a0MOV 40H,A ;结果送入结果送入40H保存保存SJMP$;程序执行完,程序执行完,“原地踏步原地踏步”END例例4.3.2 将内部将内部RAM中中20H

10、单元的压缩单元的压缩BCD码拆开,转换成相应的码拆开,转换成相应的ASC码,存码,存入入21H、22H,高位存,高位存22H.(P64)ORG 1000HSTART: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,#30H ;转换为高位转换为高位ASCII码码MOV 22H,A ;保存高位

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

12、DCADDC指令指令.MOV 00H,C#20H分支程序是通过转移指令实现的分支程序是通过转移指令实现的一、单分支程序一、单分支程序 使用条件转移指令实现,即根据条件对程序使用条件转移指令实现,即根据条件对程序的执行进行判断,满足条件则进行程序转移,否的执行进行判断,满足条件则进行程序转移,否则程序顺利执行。则程序顺利执行。可实现单分支程序转移的指令有:可实现单分支程序转移的指令有:JZJZ、JNZJNZ、CJNECJNE、DJNZDJNZ等等还有以位状态作为条件进行程序分支的指令:还有以位状态作为条件进行程序分支的指令:JCJC、JNCJNC、JBJB、JNBJNB和和JBCJBC等等(1

13、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,转至,转至COMP处处 JNB ACC.7,POST ;若若A第第7位不为位不为1(X为正数),为正数),;则程序转到则程序转到 POST处,处,;否则(否则(X为负数)程序往下执行

14、为负数)程序往下执行 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个连续单元,个连续单元,其中其中ST1ST1和和ST2ST2单元中分别存放着两个单元中分别存放着两个8 8位无符号二进制数,要求位无符号二进制数,要求找出其中的大数并存入找出其中的大

15、数并存入ST3ST3单元中。单元中。MOV A,R2一、单重循环程序例例4.3.5 已知片内已知片内RAM30H3FH单元中存放了单元中存放了16个二进个二进制无符号数,编制程序求他制无符号数,编制程序求他们的累加和,并将其和数存们的累加和,并将其和数存放在放在R4,R5中(中(R4存高存高8位,位,R5存低存低8位)。见位)。见P69ORG 1000HSTART:MOV R0,#30H MOV R2,#10H ;设置循环次数(设置循环次数(16)MOV R4,#00H ;和高位单元和高位单元R4清清0 MOV R5,#00H ;和低位单元和低位单元R5清清0LOOP:MOV A,R5 ;和低

16、和低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,则转,则转 ;到到LOOP处循环处循环,否则,循环结束否则,循环结束 SJMP$END例例4.3.6 编制程序将片编制程序将片内内RAM的的30H4FH单元中的内容传送至单元中的内容传送至片外片外RAM的的2000

17、H开开始的单元中。(见始的单元中。(见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 ;源地址递增源地址递增 INC DPTR ;目的地址递增目的地址递增 DJNZ R2,LOOP ;若若R2的不为的不为0,则转到,则转到 ;LOOP处继续循环处继续循环,否则循环结束否则循环结束 SJMP$END2、较长时间的定

18、时程序、较长时间的定时程序较长时间的定时,通常采用多重循环的方法较长时间的定时,通常采用多重循环的方法1个机器周期个机器周期1个机器周期个机器周期2个机器周期个机器周期4个机器周期个机器周期最大定时时间计算公式为:最大定时时间计算公式为:(4256+2+1)2562s2s+2 s=525828(s)2个机器周期个机器周期1个机器周期个机器周期1个机器周期个机器周期1个机器周期个机器周期第四章 单片机C语言程序设计 sbit位类型符用于定义在可位寻址字节或特殊功能寄存器位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,中的位,定义时须指明其位地址,可以是位直接地址,可可

19、以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带以是可位寻址变量带位号,也可以是特殊功能寄存器名带位号。格式如下:位号。格式如下:sbit 位变量名位变量名=位地址;位地址;1、位地址为位直接地址,其取值范围为、位地址为位直接地址,其取值范围为0 x000 xff;2、位地址是可位寻址变量带位号或特殊功能寄存器名带、位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。行定义。Note:字节地址与位号之间、特殊功能寄存器与位号之间一:字节地址与位号之间、特殊功能寄存器与位号之

20、间一般用般用“”作间隔。作间隔。第四章 单片机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=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;3 中断方式 单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下:编号 中

21、断源 中断向量(汇编)C语言0 INT0 0003 interrupt 01T0 000BH interrupt 12INT1 0013H interrupt 23T1 001BH interrupt 34RI/TI 0023H interrupt 4 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。51系列单片机的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:ORG 0000HLJMP

22、 START ;转入主程序,START为主程序地址标号ORG 0003HLJMP INT0 ;转外中断中断服务程序ORG 000BHLJMP T0 ;转定时器T0中断服务程序ORG 0030HSTART:;主程序开始n例6.1.2 在图中,P1.0P1.3接有4个开关,P1.4P1.7接有4个发光二极管,消抖电路用于产生中断请求信号,当消抖电路的开关来回拨动一次将产生一个下跳变信号,向CPU申请中断。要求:初时发光二极管全黑,每中断一次,P1.0P1.3所接的开关状态反映到发光二极管上,且要求开关合上时对应发光二极管亮。n解:汇编程序如下:n ORG 0000Hn AJMP MAINn ORG

23、 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,#0FH ;熄灭发光二极管且对开关输入端先输出1n MOV A,P1 ;输入开关状态n CPL A ;状态取反n ANL A,#0FH ;屏蔽A的高半字节n SWAP A ;A高低半字节交换n MOV P1,A ;开关状态输出n RETI ;中断返回每次单

24、纯重置一次每次单纯重置一次4个开关的开、合状态,个开关的开、合状态,4个发光二极个发光二极管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产生了中断,发光二极管才反映新置的开关状态。生了中断,发光二极管才反映新置的开关状态。该例子的执行结果是:该例子的执行结果是:n#includenvoid int0()interrupt 0 /*中断函数中断函数*/nn P1=0 x0f;n/*熄灭发光二极管且对开关输入端先输出熄灭发光二极管且对开关输入端先输出1*/n P1=4;n/*读入开关状态,并左移四位,使开关反映在发光二极管上读入开关状态,并左移四

25、位,使开关反映在发光二极管上*/n P1 P1;/*对对P1口内容取反口内容取反*/nnmain()/*主函数主函数nn EA=1;/*开中断总开关开中断总开关*/n EX0=1;/*允许中断允许中断*/n IT0=1;/*负跳沿产生中断负跳沿产生中断*/n while(1)/*等待中断等待中断*/nC语言程序如下:语言程序如下:补补2 2:通过通过外部中断控制八盏灯循环点亮。解:解:通过P1口扩展八盏灯,在 INT1引脚(P3.3)接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。程序如下:程序如下:C源程序见

26、源程序见int1.c ORG 0000H LJMP MAIN ORG 0013H ;中断服务程序入口地址 LJMP IN11 MAIN:SETB 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

27、TR0 IE1 IT1 IE0 IT0中断请求标志触发方式选择启动定时/计数器0 低电平1 下降沿0 停止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位

28、8位16位计数器3).方式2:8位自动装入时间常数方式 TF0振荡器1/1211&T0TR0GATEINT0C/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为模值,和定时器的工作

29、方式有关;T计数是单片机振荡周期TCLK的12倍;Tc为定时器的定时初值。开中断(如果使用中断方式):编程置位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 要

30、产生4ms 的方波脉冲,只需在P1.0端以2ms为间隔,交替输出高低电平即可实现。为此,定时间应为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:M

31、OV TH0,#0F8H ;重新设置初值 MOV TL0,#30H CPL 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)TM

32、OD=0 x01;P1_0=0;TH0=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 CPL

33、 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 000BHn AJMP SER_T0

34、 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)TF0=0;P1_0=!P1_0;TH0=0 xFF;TL0=0X83;C程序设计程序设

35、计查询方式查询方式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解:对于6MHz晶振,使用工作方式2,最大定时时间为(28-0)(1/6)10-612=512s取500s定时,则周

36、期100ms需要中断200次,占空比为30%,高电平需要60次中断。500s定时,初值为: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 R

37、7 ;中断次数加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 charuchar 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

38、(1);timer1()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,则允许接,则允许接收,

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

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

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

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

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

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

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

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

47、(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 是定时器初值是定时器初值 例例 用用T1T1工作于工作于方式方式2 2

48、来产生波特率来产生波特率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。以。以P2口的口线作口的口线作高位地址线高位地址线n3。控制信号。控制信号.使用使用ALE作地址锁存的选通信号,以实

49、现低作地址锁存的选通信号,以实现低8位地址的锁存;位地址的锁存;.以以PSEN信号作扩展程序存储器的读选通信号信号作扩展程序存储器的读选通信号;.以以EA信号作为内外程序存储器的选择信号;信号作为内外程序存储器的选择信号;.以以RD和和WR作为扩展数据存储器和作为扩展数据存储器和I/O端口的读选通信号。端口的读选通信号。扩展总线构造图两种命令两种命令工作方式命令工作方式命令C C口位置位口位置位/复位命令复位命令1 1、工作方式命令、工作方式命令用于确定各数据口的用于确定各数据口的工作方式及数据传送工作方式及数据传送方向方向48255初始化初始化 A A口有三种工作方式口有三种工作方式 B B

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

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

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁