单片机应用系统设计第二章PPT课件02

上传人:ni****g 文档编号:579373849 上传时间:2024-08-26 格式:PPT 页数:54 大小:555KB
返回 下载 相关 举报
单片机应用系统设计第二章PPT课件02_第1页
第1页 / 共54页
单片机应用系统设计第二章PPT课件02_第2页
第2页 / 共54页
单片机应用系统设计第二章PPT课件02_第3页
第3页 / 共54页
单片机应用系统设计第二章PPT课件02_第4页
第4页 / 共54页
单片机应用系统设计第二章PPT课件02_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《单片机应用系统设计第二章PPT课件02》由会员分享,可在线阅读,更多相关《单片机应用系统设计第二章PPT课件02(54页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章单片机的单片机的C语言应用举例语言应用举例 2.1闪烁灯闪烁灯2.2I/O并行口直接驱动并行口直接驱动LED显示显示2.3多路开关状态指示多路开关状态指示2.4定时计数器定时计数器T0作定时应用技术作定时应用技术2.5报警声报警声单片机编程语言概述 汇编语言 5151单片机的基本指令共有单片机的基本指令共有111111条,其中单条,其中单字节指令字节指令4949条、双字节指令条、双字节指令4545条、三字节条、三字节指令指令1717条。条。 单机器周期指令单机器周期指令6464条,双机器周期指令条,双机器周期指令4545条,只有乘、除两条指令的执行时间为条,只有乘、除两条指令的执行

2、时间为4 4个个机器周期。机器周期。高级语言常用的51系列单片机高级语言C语言C51与ANSI C完全一样,程序结构上也是一样的。与ANSI C不同的是针对单片机开发的特殊性,在单片机C语言中增加了对单片机寄存器等的定义和说明,因此在使用单片机C语言时,应该要特别注意一些特殊寄存器的定义。设计要求:设计要求:如如下下图图所所示示,端端口口上上接接一一个个发发光光二二极极管管L1,使使L1在在不不停停的的一一亮亮一一灭灭,一一亮亮一一灭灭的的时时间间间间隔隔为。为。2.1闪烁灯闪烁灯电路原理图电路原理图 把“单片机系统”区域中的端口用导线连接到“发光二极管指示模块”区域中的L1端口上。系统板上硬

3、件连线系统板上硬件连线 程序设计内容 (1) 延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,要求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如电路原理图所示的石英晶体为如电路原理图所示的石英晶体为12MHz12MHz,因此,因此,1 1个机器周期为个机器周期为1 1微秒微秒 机器周期机器周期 微秒微秒 MOV R6,#20MOV R6,#202 2个个2 2 D1: D1:MOV R7,#248MOV R7,#2482 2个个2 2 2 222482248

4、4984982020 DJNZ R7,$DJNZ R7,$2 2个个 22482248 (498(498DJNZ R6,D1DJNZ R6,D12 2个个2202204040 10002 10002 因此,上面的延时程序时间为。因此,上面的延时程序时间为。 由以上可知,当由以上可知,当R6R61010、R7R7248248时,延时时,延时5ms5ms,R6R62020、R7R7248248时,延时时,延时10ms,10ms,以此为基本的计时单位。如本设计要求秒以此为基本的计时单位。如本设计要求秒200ms200ms,10msR510msR5200ms200ms,则,则R5R52020,延时子程

5、序如下:,延时子程序如下: DELAY:DELAY:MOV R5,#20 MOV R5,#20 D1: D1:MOV R6,#20 MOV R6,#20 D2: D2:MOV R7,#248 MOV R7,#248 DJNZ R7,$ DJNZ R7,$ DJNZ R6,D2 DJNZ R6,D2 DJNZ R5,D1 DJNZ R5,D1 RET RET 如图所示,当端口输出高电平,即1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当端口输出低电平,即0时,发光二极管L1亮;我们可以使用SETB指令使端口输出高电平,使用CLR指令使端口输出低电平。(2)输出控制输出控制程序框图

6、 ORG 0 ORG 0 START:START:CLR P1.0 CLR P1.0 LCALL DELAY LCALL DELAY SETB P1.0 SETB P1.0 LCALL DELAY LCALL DELAY LJMP START LJMP START DELAY:DELAY:MOV R5,#20MOV R5,#20; ;延时子程序,延时秒延时子程序,延时秒 D1:D1:MOV R6,#20 MOV R6,#20 D2:D2:MOV R7,#248 MOV R7,#248 DJNZ R7,$ DJNZ R7,$ DJNZ R6,D2 DJNZ R6,D2 DJNZ R5,D1 DJ

7、NZ R5,D1 RET RET END END 汇编源程序汇编源程序#include #include sbit L1=P10; sbit L1=P10; void delay02s(void)void delay02s(void)/ /延时秒子程序延时秒子程序 unsigned char i,j,k; unsigned char i,j,k; for(i=20;i0;i-) for(i=20;i0;i-) for(j=20;j0;j-) for(j=20;j0;j-) for(k=248;k0;k-); for(k=248;k0;k-); void main(void) void main

8、(void) while(1) while(1) L1=0; L1=0; delay02s(); delay02s(); L1=1; L1=1; delay02s(); delay02s(); C语言源程序语言源程序2.2I/O并行口直接驱动并行口直接驱动LED显示显示设计要求:设计要求:利用利用AT89S51单片机的单片机的P0端口的连接到一个共端口的连接到一个共阴数码管的阴数码管的a-h的笔段上,数码管的公共端接地。的笔段上,数码管的公共端接地。在数码管上循环显示在数码管上循环显示0-9数字,时间间隔。数字,时间间隔。电路原理图电路原理图 把“单片机系统”区域中的端口用8芯排线连接到“四路

9、静态数码显示模块”区域中的任一个数码管的ah端口上;要求:与a相连,与b相连,与c相连,与h相连。系统板上硬件连线系统板上硬件连线(1) LED(1) LED数码显示原理数码显示原理 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。程序设计内容程序设计内容 “0”3FH “8”7FH“0”3FH “8”7FH“1”06H “9”6FH“1”06H “9”6FH “2”5BH “A”77H “2”

10、5BH “A”77H“3”4FH “B”7CH“3”4FH “B”7CH“4”66H “C”39H“4”66H “C”39H“5”6DH “D”5EH“5”6DH “D”5EH“6”7DH “E”79H“6”7DH “E”79H “7”07H “F”71H “7”07H “F”71H 共阴极的字形码共阴极的字形码 (2) (2) 由于显示的数字由于显示的数字0 09 9的字形码没有规的字形码没有规律可循,只能采用查表的方式来完成所需的律可循,只能采用查表的方式来完成所需的要求了。要求了。 按照数字按照数字0 09 9的顺序,把每个数字的笔的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所

11、示:段代码按顺序排好!建立的表格如下所示:TABLETABLEDBDB3FH3FH,06H06H,5BH5BH,4FH4FH,66H66H,6DH6DH,7DH7DH,07H07H,7FH7FH,6FH6FH程序框图程序框图 ORG 0 ORG 0 START:START: MOV R1,#00H MOV R1,#00H NEXT:NEXT: MOV A,R1 MOV A,R1 MOV DPTR,#TABLE MOV DPTR,#TABLE MOVC A,A+DPTR MOVC A,A+DPTR MOV P0,A MOV P0,A LCALL DELAY LCALL DELAY INC R1

12、INC R1 CJNE R1,#10,NEXT CJNE R1,#10,NEXT LJMP START LJMP START DELAY: DELAY: MOV R5,#20 MOV R5,#20 D2: D2:MOV R6,#20 MOV R6,#20 D1: D1:MOV R7,#248 MOV R7,#248 DJNZ R7,$ DJNZ R7,$ DJNZ R6,D1 DJNZ R6,D1 DJNZ R5,D2 DJNZ R5,D2 RET RET TABLETABLE: DB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 3FH,06H,5BH

13、,4FH,66H,6DH,7DH,07H,7FH,6FH END END 汇编源程序汇编源程序 #include #include unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; 0x6d,0x7d,0x07,0x7f,0x6f; unsigned char dispcount; unsigned char dispcount; void delay02s(void) void delay

14、02s(void) unsigned char i,j,k; unsigned char i,j,k; for(i=20;i0;i-) for(i=20;i0;i-) for(j=20;j0;j-) for(j=20;j0;j-) for(k=248;k0;k-); for(k=248;k0;k-); void main(void) void main(void) while(1) while(1) for(dispcount=0;dispcount10;dispcount+) for(dispcount=0;dispcount10;dispcount+) P0=tabledispcount;

15、 P0=tabledispcount; delay02s(); delay02s(); C C语言源程序语言源程序2.3多路开关状态指示 设计要求 AT89S51单片机的接四个发光二极管L1L4,接了四个开关K1K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。电路原理图系统板上硬件连线 1 1 把把“ “单片机系统单片机系统” ”区域中的用导线连接到区域中的用导线连接到“ “八路发光二极管指示模块八路发光二极管指示模块” ”区域中的区域中的L1L1L4L4端口上;端口上; 2 2 把把“ “单片机系统单片机系统” ”区域中的用导线连接到区域中的用导线连

16、接到“ “四路拨动开关四路拨动开关” ”区域中的区域中的K1K1K4K4端口上;端口上;程序设计内容 11开关状态检测开关状态检测对于开关状态检测,相对单片机来说,是输入关系,对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用相应的发光二极管指示,可以采用JBJB,RELREL或或JNBJNB,RELREL指令来完成;也可以一次性检测四路开关状态,然指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用后让其指示,可以采用MOVMOVA A,P1P1指令一次把指令

17、一次把P1P1端端口的状态全部读入,然后取高口的状态全部读入,然后取高4 4位的状态来指示。位的状态来指示。22输出控制输出控制根据开关的状态,由发光二极管根据开关的状态,由发光二极管L1L1L4L4来指示,我来指示,我们可以用们可以用SETBSETB和和CLRCLR指令来完成,也可以采用指令来完成,也可以采用MOVMOVP1P1,1111XXXXB1111XXXXB方法一次指示。方法一次指示。程序框图 方法一(汇编源程序) ORG 00H START:MOV A,P1 ANL A,#0F0H RR A RR A RR A RR A XOR A,#0F0H MOV P1,A SJMP STAR

18、T END 方法一(C语言源程序) #include #include unsigned char temp; unsigned char temp; void main(void) void main(void) while(1) while(1) temp=P14; temp=P14; temp=temp | 0xf0; temp=temp | 0xf0; P1=temp; P1=temp; 方法二(汇编源程序) ORG 00H ORG 00H START:JB P1.4,NEXT1 START:JB P1.4,NEXT1 CLR P1.0 CLR P1.0 SJMP NEX1 SJMP

19、NEX1 NEXT1:NEXT1:SETB P1.0 SETB P1.0 NEX1:NEX1: JB P1.5,NEXT2 JB P1.5,NEXT2 CLR P1.1 CLR P1.1 SJMP NEX2 SJMP NEX2 NEXT2:NEXT2:SETB P1.1 SETB P1.1 NEX2:NEX2: JB P1.6,NEXT3 JB P1.6,NEXT3 CLR P1.2 CLR P1.2 SJMP NEX3 SJMP NEX3 NEXT3:NEXT3:SETB P1.2 SETB P1.2 NEX3:NEX3: JB P1.7,NEXT4 JB P1.7,NEXT4 CLR P1

20、.3 CLR P1.3 SJMP NEX4 SJMP NEX4 NEXT4:NEXT4:SETB P1.3 SETB P1.3 NEX4:NEX4: SJMP START SJMP START END END 方法二(C语言源程序) #include #include void main(void) void main(void) while(1) while(1) if(P1_4=0) if(P1_4=0) P1_0=0; P1_0=0; else else P1_0=1; P1_0=1; if(P1_5=0) if(P1_5=0) P1_1=0; P1_1=0; else else P1_

21、1=1; P1_1=1; if(P1_6=0)P1_2=0;elseP1_2=1;if(P1_7=0)P1_3=0;elseP1_3=1;2.4定时计数器T0作定时应用技术设计要求 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示。电路原理图电路原理图系统板上硬件连线 1 1 把把“ “单片机系统单片机系统” ”区域中的端口用区域中的端口用8 8芯排线连接芯排线连接到到“ “四路静态数码显示模块四路静态数码显示模块” ”区域中的任一个区域中的任一个a ah h端端口上;要求:对应着口上;要求:

22、对应着a a,对应着,对应着b b,对应着,对应着h h。 2 2 把把“ “单片机系统单片机系统” ”区域中的端口用区域中的端口用8 8芯排线连接芯排线连接到到“ “四路静态数码显示模块四路静态数码显示模块” ”区域中的任一个区域中的任一个a ah h端端口上;要求:对应着口上;要求:对应着a a,对应着,对应着b b,对应着,对应着h h。 程序设计内容 AT89S51 AT89S51单片机的内部单片机的内部1616位定时位定时/ /计数器是一个可编程定时计数器是一个可编程定时/ /计数器,它既可以工作在计数器,它既可以工作在1313位定时方式,也可以工作在位定时方式,也可以工作在1616

23、位定时方位定时方式和式和8 8位定时方式。只要通过设置特殊功能寄存器位定时方式。只要通过设置特殊功能寄存器TMODTMOD,即可完,即可完成。定时成。定时/ /计数器何时工作也是通过软件来设定计数器何时工作也是通过软件来设定TCONTCON特殊功能寄存特殊功能寄存器来完成的。器来完成的。 现在我们选择现在我们选择1616位定时工作方式,对于位定时工作方式,对于T0T0来说,最大定时也来说,最大定时也只有只有65536us65536us,即,无法达到我们所需要的,即,无法达到我们所需要的1 1秒的定时,因此,我秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取们必须通过软件来处理这个问题

24、,假设我们取T0T0的最大定时为的最大定时为50ms50ms,即要定时,即要定时1 1秒需要经过秒需要经过2020次的次的50ms50ms的定时。对于这的定时。对于这2020次次我们就可以采用软件的方法来统计了。我们就可以采用软件的方法来统计了。 因此,我们设定因此,我们设定TMODTMOD00000001B00000001B,即,即TMODTMOD01H01H 下面我们要给下面我们要给T0T0定时定时/ /计数器的计数器的TH0TH0,TL0TL0装入预置初值,通过装入预置初值,通过下面的公式可以计算出下面的公式可以计算出 TH0TH0(2162165000050000)/ /256256

25、TL0 TL0(2162165000050000)MODMOD256256 当当T0T0在工作的时候,我们如何得知在工作的时候,我们如何得知50ms50ms的定时时间已到,这的定时时间已到,这回我们通过检测回我们通过检测TCONTCON特殊功能寄存器中的特殊功能寄存器中的TF0TF0标志位,如果标志位,如果TF0TF01 1表示定时时间已到。表示定时时间已到。程序框图 汇编源程序(查询法) SECONDSECONDEQU 30H EQU 30H TCOUNTTCOUNTEQU 31H EQU 31H ORG 00H ORG 00H START:START:MOV SECOND,#00H MOV

26、 SECOND,#00H MOV TCOUNT,#00H MOV TCOUNT,#00H MOV TMOD,#01H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB TR0 DISP:DISP:MOV A,SECOND MOV A,SECOND MOV B,#10 MOV B,#10 DIV AB DIV AB MOV DPTR,#TABLE MOV

27、 DPTR,#TABLE MOVC A,A+DPTR MOVC A,A+DPTR MOV P0,A MOV P0,A MOV A,B MOV A,B MOVC A,A+DPTR MOVC A,A+DPTR MOV P2,A MOV P2,A WAIT:WAIT:JNB TF0,WAIT JNB TF0,WAIT CLR TF0 CLR TF0 MOV TH0,#(65536-50000) / 256 MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 MOV TL0,#(65536-50000) MOD 256 INC TCO

28、UNT INC TCOUNT MOV A,TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT CJNE A,#20,NEXT MOV TCOUNT,#00H MOV TCOUNT,#00H INC SECOND INC SECOND MOV A,SECOND MOV A,SECOND CJNE A,#60,NEX CJNE A,#60,NEX MOV SECOND,#00H MOV SECOND,#00H NEX:NEX:LJMP DISP LJMP DISP NEXT:NEXT:LJMP WAIT LJMP WAIT TABLE:TABLE:DB DB FH,06H,5B

29、H,4FH,66H,6DH,7DH,07H,7FH,6FH FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END END C语言源程序(查询法) #include #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0

30、x79,0x71,0x00; 0x39,0x5e,0x79,0x71,0x00; unsigned char second; unsigned char second; unsigned char tcount; unsigned char tcount; void main(void) void main(void) TMOD=0x01; TMOD=0x01; TH0=(65536-50000)/256; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TL0=(65536-50000)%256; TR0=1; TR0=1; tcount=0; t

31、count=0; second=0; second=0; P0=dispcodesecond/10; P0=dispcodesecond/10; P2=dispcodesecond%10; P2=dispcodesecond%10; while(1) while(1) if(TF0=1) if(TF0=1) tcount+; tcount+; if(tcount=20) if(tcount=20) tcount=0; tcount=0; second+; second+; if(second=60) if(second=60) second=0; second=0; P0=dispcodese

32、cond/10; P0=dispcodesecond/10; P2=dispcodesecond%10; P2=dispcodesecond%10; TF0=0; TF0=0; TH0=(65536-50000)/256; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TL0=(65536-50000)%256; SECONDSECONDEQU 30H EQU 30H TCOUNTTCOUNTEQU 31H EQU 31H ORG 00H ORG 00H LJMP START LJMP START ORG 0BH ORG 0BH LJMP INT0

33、X LJMP INT0X START:START:MOV SECOND,#00H MOV SECOND,#00H MOV A,SECOND MOV A,SECOND MOV B,#10 MOV B,#10 DIV AB DIV AB MOV DPTR,#TABLE MOV DPTR,#TABLE MOVC A,A+DPTR MOVC A,A+DPTR MOV P0,A MOV P0,A MOV A,B MOV A,B MOVC A,A+DPTR MOVC A,A+DPTR MOV P2,A MOV P2,A MOV TCOUNT,#00H MOV TCOUNT,#00H MOV TMOD,#0

34、1H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB TR0 SETB ET0 SETB ET0 SETB EA SETB EA SJMP $ SJMP $ 汇编源程序(中断法)汇编源程序(中断法)INT0X: INT0X: MOV TH0,#(65536-50000) / 256 MOV TH0,#(65536-50000) / 256 MOV T

35、L0,#(65536-50000) MOD 256 MOV TL0,#(65536-50000) MOD 256 INC TCOUNT INC TCOUNT MOV A,TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT CJNE A,#20,NEXT MOV TCOUNT,#00H MOV TCOUNT,#00H INC SECOND INC SECOND MOV A,SECOND MOV A,SECOND CJNE A,#60,NEX CJNE A,#60,NEX MOV SECOND,#00H MOV SECOND,#00H NEX:NEX:MOV A,SECOND

36、MOV A,SECOND MOV B,#10 MOV B,#10 DIV AB DIV AB MOV DPTR,#TABLE MOV DPTR,#TABLE MOVC A,A+DPTR MOVC A,A+DPTR MOV P0,A MOV P0,A MOV A,B MOV A,B MOVC A,A+DPTR MOVC A,A+DPTR MOV P2,A MOV P2,A NEXT:NEXT:RETI RETI TABLE:TABLE:DB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

37、,6FH END END #include #include unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00; 0x39,0x5e,0x79,0x71,0x00; unsigned char second; unsigned char

38、 second; unsigned char tcount; unsigned char tcount; void main(void) void main(void) TMOD=0x01; TMOD=0x01; TH0=(65536-50000)/256; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TL0=(65536-50000)%256; TR0=1; TR0=1; ET0=1; ET0=1; EA=1; EA=1; tcount=0; tcount=0; second=0; second=0; P0=dispcodesecond/10;

39、 P0=dispcodesecond/10; P2=dispcodesecond%10; P2=dispcodesecond%10; while(1); while(1); C C语言源程序(中断法)语言源程序(中断法) void t0(void) interrupt 1 using 0 void t0(void) interrupt 1 using 0 tcount+; tcount+; if(tcount=20) if(tcount=20) tcount=0; tcount=0; second+; second+; if(second=60) if(second=60) second=0;

40、 second=0; P0=dispcodesecond/10; P0=dispcodesecond/10; P2=dispcodesecond%10; P2=dispcodesecond%10; TH0=(65536-50000)/256; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TL0=(65536-50000)%256; 2.5“嘀、嘀、”报警声 设计要求 用AT89S51单片机产生“嘀、嘀、”报警声从端口输出,产生频率为1KHz,根据下图可知:1KHZ方波从输出秒,接着秒从输出电平信号,如此循环下去,就形成我们所需的报警声了。电路原理

41、图系统板硬件连线 1 把“单片机系统”区域中的端口用导线连接到“音频放大模块”区域中的SPK IN端口上; 2 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭。 程序设计方法 1生活中我们常常到各种各样的报警声,例如“嘀、嘀、”就是常见的一种声音报警声,但对于这种报警声,嘀秒钟,然后断秒钟,如此循环下去,假设嘀声的频率为1KHz,则报警声时序图如下图所示: 上述波形信号如何用单片机来产生呢?上述波形信号如何用单片机来产生呢? 2 2 由于要产生上面的信号,我们把上面的信号分成两由于要产生上面的信号,我们把上面的信号分成两部分,一部分为部分,一部分为1KHZ1KHZ

42、方波,占用时间为秒;另一部方波,占用时间为秒;另一部分为电平,也是占用秒;因此,我们利用单片机的定时分为电平,也是占用秒;因此,我们利用单片机的定时/ /计数器计数器T0T0作为定时,可以定时秒;同时,也要用单片作为定时,可以定时秒;同时,也要用单片机产生机产生1KHZ1KHZ的方波,对于的方波,对于1KHZ1KHZ的方波信号周期为的方波信号周期为1ms1ms,高电平占用,低电平占用,因此也采用定时器,高电平占用,低电平占用,因此也采用定时器T0T0来完成的定时;最后,可以选定定时来完成的定时;最后,可以选定定时/ /计数器计数器T0T0的的定时时间为,而要定时秒则是的定时时间为,而要定时秒则

43、是的400400倍,也就是说以定倍,也就是说以定时时400400次就达到秒的定时时间了。次就达到秒的定时时间了。 主程序框图 中断服务程序框图汇编源程序 T02SAT02SA EQU 30H EQU 30H T02SBT02SB EQU 31H EQU 31H FLAGFLAG BIT 00H BIT 00H ORG 00H ORG 00H LJMP START LJMP START ORG 0BH ORG 0BH LJMP INT_T0 LJMP INT_T0 START:START:MOV T02SA,#00H MOV T02SA,#00H MOV T02SB,#00H MOV T02SB

44、,#00H CLR FLAG CLR FLAG MOV TMOD,#01H MOV TMOD,#01H MOV TH0,#(65536-500) / 256 MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256 MOV TL0,#(65536-500) MOD 256 SETB TR0 SETB TR0 SETB ET0 SETB ET0 SETB EA SETB EA SJMP $ SJMP $ INT_T0: INT_T0: MOV TH0,#(65536-500) / 256 MOV TH0,#(65536-500) / 256

45、MOV TL0,#(65536-500) MOD 256 MOV TL0,#(65536-500) MOD 256 INC T02SA INC T02SA MOV A,T02SA MOV A,T02SA CJNE A,#100,NEXT CJNE A,#100,NEXT INC T02SB INC T02SB MOV A,T02SB MOV A,T02SB CJNE A,#04H,NEXT CJNE A,#04H,NEXT MOV T02SA,#00H MOV T02SA,#00H MOV T02SB,#00H MOV T02SB,#00H CPL FLAG CPL FLAG NEXT:NEX

46、T:JB FLAG,DONE JB FLAG,DONE CPL P1.0 CPL P1.0 DONE:DONE:RETI RETI END END C语言源程序 #include #include unsigned int t02s; unsigned int t02s; unsigned char t05ms; unsigned char t05ms; bit flag; bit flag; void main(void) void main(void) TMOD=0x01; TMOD=0x01; TH0=(65536-500)/256; TH0=(65536-500)/256; TL0=(

47、65536-500)%256; TL0=(65536-500)%256; TR0=1; TR0=1; ET0=1; ET0=1; EA=1; EA=1; while(1); while(1); void t0(void) interrupt 1 using 0 void t0(void) interrupt 1 using 0 TH0=(65536-500)/256; TH0=(65536-500)/256; TL0=(65536-500)%256; TL0=(65536-500)%256; t02s+; t02s+; if(t02s=400) if(t02s=400) t02s=0; t02s=0; flag=flag; flag=flag; if(flag=0) if(flag=0) P1_0=P1_0; P1_0=P1_0;

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

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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