(定时器2)52单片机定时器2如何设置波特率

励志句子
评论 2023-07-21 11:14:39 浏览
一、单片机中如何设置让T1作为波特率发生器进行串口通信,同时T0作为定时器使用?100分奉上,解决再加!

1、图片来自、海怪不怪的百度相册(图文无关)变频器常见的10大故障现象和故障分析过流(OC)过流是变频器报警为频繁的现象。

二、52单片机的t2如何定义才能用啊?求高手!求详细的定义过程!

1、图片来自、海怪不怪的百度相册(图文无关)变频器常见的10大故障现象和故障分析过流(OC)过流是变频器报警为频繁的现象。

三、【图片】自动寻光【stc单片机吧】

1、楼主近在练吉他,单片机荒废了,今天继续以前的项目,完善自动寻光。

3、主要硬件有舵机2只,舵机2轴支架,自制寻光探头,stc408as。

4、想要实现的功能、自动寻找光源。

5、叫向日葵吧,好听一点。

6、先找找我们需要的基本资料。

7、电路草图,以后没准会改。

8、正面布局设计。

9、背面设计。

10、焊接完成正面图。

11、焊接完成背面图。

12、程序涉及到哪些功能呢?串口通讯监控系统参数用AD模数转换舵机控制串口通讯,AD转换与舵机控制结合按照以上步骤一步一步完善程序。

13、/*---------------------------------------------------------------------*//*---STCMCULimited------------------------------------------------*//*---STC15F4K60S4系列AD转换查询方式举例----------------------------*//*---Mobile、(86)13922805190----------------------------------------*//*---Fax、86-0513-55012956,55012947,55012969------------------------*//*---Tel、86-0513-55012928,55012929,55012966-------------------------*//*---Web、http、//www.STCMCU.com--------------------------------------------*//*---Web、http、//www.GXWMCU.com--------------------------------------------*//*如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序*//*如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序*//*---------------------------------------------------------------------*///本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译//若无特别说明,工作频率一般为0592MHz#include"regh"#include"intrins.h"#defineFOSC11059200L#defineBAUD9600typedefunsignedcharBYTEtypedefunsignedintWORDtypedefunsignedintu16//对数据类型进行声明定义typedefunsignedcharu8u16adcs,adcx,adcz,adcysfrP5=0xC8//xxxx,1111端口5sbitled1=P1^4sbitled2=P1^5sbitled3=P5^4sbitled4=P5^5#defineURMD0//0、使用定时器2作为波特率发生器//使用定时器1的模式0(16位自动重载模式)作为波特率发生器//使用定时器1的模式2(8位自动重载模式)作为波特率发生器sfrT2H=0xd6//定时器2高8位sfrT2L=0xd7//定时器2低8位sfrP1M1=0x91//PxMn,PxM0.n=00--->Standard,01--->push-pullsfrP1M0=0x92//=10--->pureinput,11--->opendrainsfrP0M1=0x93sfrP0M0=0x94sfrP2M1=0x95sfrP2M0=0x96sfrP3M1=0xB1sfrP3M0=0xB2sfrP4M1=0xB3sfrP4M0=0xB4sfrP5M1=0xC9sfrP5M0=0xCAsfrP6M1=0xCBsfrP6M0=0xCCsfrP7M1=0xE1sfrP7M0=0xE2sfrAUXR=0x8e//辅助寄存器sfrADC_CONTR=0xBC//ADC控制寄存器sfrADC_RES=0xBD//ADC高8位结果sfrADC_LOW2=0xBE//ADC低2位结果sfrP1ASF=0x9D//P1口第2功能控制寄存器#defineADC_POWER0x80//ADC电源控制位#defineADC_FLAG0x10//ADC完成标志#defineADC_START0x08//ADC起始控制位#defineADC_SPEEDLL0x00//540个时钟#defineADC_SPEEDL0x20//360个时钟#defineADC_SPEEDH0x40//180个时钟#defineADC_SPEEDHH0x60//90个时钟voidInitUart()voidInitADC()voidSendData(BYTEdat)BYTEGetADCResult(BYTEch)voidDelay(WORDn)voidShowResult(BYTEch)voidys()voidmain(){P0M0=0x00P0M1=0x00P1M0=0x00P1M1=0x00P2M0=0x00P2M1=0x00P3M0=0x00P3M1=0x00P4M0=0x00P4M1=0x00P5M0=0x00P5M1=0x00P6M0=0x00P6M1=0x00P7M0=0x00P7M1=0x00InitUart()//初始化串口InitADC()//初始化ADCled1=0led2=0led3=0led4=0while(1){ShowResult(0)//显示通道0ShowResult(1)//显示通道1ShowResult(2)//显示通道2ShowResult(3)//显示通道3//ShowResult(4)//显示通道4//ShowResult(5)//显示通道5//ShowResult(6)//显示通道6//ShowResult(7)//显示通道7adcs=GetADCResult(0)adcz=GetADCResult(1)adcx=GetADCResult(2)adcy=GetADCResult(3)ys()Delay(100)}}voidys(){led1=led2=led3=led4=0if(adcs-adcx>4)if(adcs>adcx){led1=1led2=0}if(adcx-adcs>4)if(adcx>adcs){led2=1led1=0}if(adcz-adcy>4)if(adcz>adcy){led3=1led4=0}if(adcy-adcz>4)if(adcy>adcz){led4=1led3=0}}/*----------------------------发送ADC结果到PC----------------------------*/voidShowResult(BYTEch){SendData(ch)//显示通道号SendData(GetADCResult(ch))//显示ADC高8位结果//SendData(0xAA)//SendData(0x55)//SendData(ADC_LOW2)//显示低2位结果}/*----------------------------读取ADC结果----------------------------*/BYTEGetADCResult(BYTEch){ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START_nop_()//等待4个NOP_nop_()_nop_()_nop_()while(。

14、(ADC_CONTR&ADC_FLAG))//等待ADC转换完成ADC_CONTR&=~ADC_FLAG//CloseADCreturnADC_RES//返回ADC结果}/*----------------------------初始化串口----------------------------*/voidInitUart(){SCON=0x5a//设置串口为8位可变波特率#ifURMD==0T2L=0xE0//设置波特率重装值T2H=0xFE//115200bps(65536-18432000/4/115200)波特率为9600AUXR=0x14//T2为1T模式,并启动定时器2AUXR|=0x01//选择定时器2为串口1的波特率发生器#elifURMD==1AUXR=0x40//定时器1为1T模式TMOD=0x00//定时器1为模式0(16位自动重载)TL1=0xd8//设置波特率重装值TH1=0xff//115200bps(65536-18432000/4/115200)TR1=1//定时器1开始启动#elseTMOD=0x20//设置定时器1为8位自动重装载模式AUXR=0x40//定时器1为1T模式TH1=TL1=0xfb//115200bps(256-18432000/32/115200)TR1=1#endif}/*----------------------------初始化ADC----------------------------*/voidInitADC(){P1ASF=0x0f//设置P1口为AD口P0-3为ADADC_RES=0//清除结果寄存器ADC_CONTR=ADC_POWER|ADC_SPEEDLLDelay(2)//ADC上电并延时}/*----------------------------发送串口数据----------------------------*/voidSendData(BYTEdat){while(。

15、TI)//等待前一个数据发送完成TI=0//清除发送标志SBUF=dat//发送当前数据//while(。

16、TI)//TI=0//SBUF=0x0D//TI=0//while(。

17、TI)//SBUF=0x0A}/*----------------------------软件延时----------------------------*/voidDelay(WORDn){WORDxwhile(n--){x=5000while(x--)}}我改的,舵机程序还没有,好复杂,。

18、好长时间不用单片机了,难免有些生疏,把昨天烧单片机的原因说一下,小伙伴们引以为戒。

19、楼主直接把2S锂电插上了,其他电路板上有7805或1117所以没有问题,2S锂电4到4V电压,单片机电源高5v,所以烧了。

20、为啥要插电池是有原因的,舵机支架不科学,线缠在支架上,舵机转多次后连线有短路,导致编程器总供电不足我以为编程器给舵机供电吃力,所以才换电池试一下。

21、我手还摸着单片机,感觉热就赶紧拔了,还是没阻止烧的后果,而后我又连着换了3块,全军覆没。

22、虽然是烧了,但我试验出一个新结果STC89C52RC耐压能力强于STC15W408AS昨天当我烧毁全部STC15之后,还不知道问题所在,只能换STC89C52RC试试,那个板子上又160插上电池,1602显示不正常了,不显应显的字符了,而且背光超亮,我就意识到电压高了,就知道问题所在了,再换编程器供电,下载程序STC89C52RC并没有烧。

23、还是老东西禁折磨啊。

四、请单片机高手速速回答

1、楼主近在练吉他,单片机荒废了,今天继续以前的项目,完善自动寻光。

五、52单片机 如何用T2来设波特率为115200的 串口接收 要用C语言写

1、楼主近在练吉他,单片机荒废了,今天继续以前的项目,完善自动寻光。

六、如何在一个程序里放入两个定时器中断,关于单片机52编程方面的,两个定时器为何只有一个起作用???

1、具体型号是什么,首先第二函数中的定时器是用来产生波特率的,它和上面的定时器中断不会冲突,同时你要弄清楚的是,所用串口波特率发生器取决于哪个定时器,这个弄错当然无法工作。

七、52单片机定时器2,T2口怎么用

1、T2CON(T2的控制寄存器),字节地址0C8H、位地址0CFH0CEH0CDH0CCH0CBH0CAH0C9H0C8H符号TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RT2各位的定义如下、TF定时/计数器2溢出标志,T2溢出时置位,并申请中断。

2、只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。

3、EXF当EXEN2=1时,且T2EX引脚(P0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。

4、EXF2也是只能通过软件来清除的。

5、RCLK、串行接收时钟标志,只能通过软件的置位或清除。

6、用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK、串行发送时钟标志,只能通过软件的置位或清除。

7、用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXENT2的外部允许标志,只能通过软件的置位或清除。

8、EXEN2=0、禁止外部时钟触发T2。

9、EXEN2=当T2未用作串行波特率发生器时,允许外部时钟触发T当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF申请中断。

10、TRT2的启动控制标志。

11、TR2=0、停止T2。

12、TR2=启动T2C/TT2的定时方式或计数方式选择位。

13、只能通过软件的置位或清除。

14、C/T2=0、选择T2为定时器方式。

15、C/T2=选择T2为计数器方式,下降沿触发。

16、CP/RT捕获/重装载标志,只能通过软件的置位或清除。

17、CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P0)出现负跳变(EXEN2=1时),将会引起T2重装载。

18、CP/RT2=1时,选择捕获方式,这时若T2EX引脚(P0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。

19、但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。

20、T2MOD(方式寄存器),字节地址0C9H、D7D6D5D4D3D2D1D0------------T2OEDCENT2OE、T2输出允许位,当T2OE=1的时候,允许时钟输出到P0。

21、(仅对80C54/80C58有效)DCEN、向下计数允许位。

22、DCEN=1是允许T2向下计数,否则向上计数。

23、T2的数据寄存器THTL2和T0、T1的用法一样,而捕获寄存器RCAP2H、RCAP2L只是在捕获方式下,产生捕获操作时自动保存THTL2的值。

24、以上是T2的相关寄存器的描述,其实用法上跟T0、T1是差不多的,只是功能增强了,设置的东西多了而已。

25、定时/计数器2其实用到多的就是T2CON这个寄存器啦,它设定的定时和计数的方式。

26、有三种工作方式,捕获,自动重装,波特率发生器。

27、下面我是在百度百科里面找的少许资料、捕获方式、在捕获方式下,通过T2CON控制位EXEN2来选择两种方式。

28、如果EXEN2=0,定时器2是一个16位定时器或计数器,计数溢出时,对T2CON的溢出标志TF2置位,同时激活中断。

29、如果EXEN2=定时器2完成相同的操作,而当T2EX引脚外部输入信号发生1至0负跳变时,也出现TH2和TL2中的值分别被捕获到RCAP2H和RCAP2L中。

30、另外,T2EX引脚信号的跳变使得T2CON中的EXF2置位,与TF2相仿,EXF2也会激活中断。

31、捕获方式如图4所示。

32、自动重装载(向上或向下计数器)方式、当定时器2工作于16位自动重装载方式时,能对其编程为向上或向下计数方式,这个功能可通过特殊功能寄存器T2CON(见表5)的DCEN位(允许向下计数)来选择的。

33、复位时,DCEN位置“0”,定时器2默认设置为向上计数。

34、当DCEN置位时,定时器2既可向上计数也可向下计数,这取决于T2EX引脚的值,参见图当DCEN=0时,定时器2自动设置为向上计数,在这种方式下,T2CON中的EXEN2控制位有两种选择,若EXEN2=0,定时器2为向上计数至0FFFFH溢出,置位TF2激活中断,同时把16位计数寄存器RCAP2H和RCAP2L重装载,RCAP2H和RCAP2L的值可由软件预置。

35、若EXEN2=定时器2的16位重装载由溢出或外部输入端T2EX从1至0的下降沿触发。

36、这个脉冲使EXF2置位,如果中断允许,同样产生中断。

37、定时器2的中断入口地址是、002BH——0032H。

38、当DCEN=1时,允许定时器2向上或向下计数,如图6所示。

39、这种方式下,T2EX引脚控制计数器方向。

40、T2EX引脚为逻辑“1”时,定时器向上计数,当计数0FFFFH向上溢出时,置位TF同时把16位计数寄存器RCAP2H和RCAP2L重装载到TH2和TL2中。

41、T2EX引脚为逻辑“0”时,定时器2向下计数,当TH2和TL2中的数值等于RCAP2H和RCAP2L中的值时,计数溢出,置位TF同时将0FFFFH数值重新装入定时寄存器中。

42、当定时/计数器2向上溢出或向下溢出时,置位EXF2位。

43、波特率发生器、当T2CON(表3)中的TCLK和RCLK置位时,定时/计数器2作为波特率发生器使用。

44、如果定时/计数器2作为发送器或接收器,其发送和接收的波特率可以是不同的,定时器1用于其它功能,如图7所示。

45、若RCLK和TCLK置位,则定时器2工作于波特率发生器方式。

46、波特率发生器的方式与自动重装载方式相仿,在此方式下,TH2翻转使定时器2的寄存器用RCAP2H和RCAP2L中的16位数值重新装载,该数值由软件设置。

47、在方式1和方式3中,波特率由定时器2的溢出速率根据下式确定、方式1和3的波特率=定时器的溢出率/16定时器既能工作于定时方式也能工作于计数方式,在大多数的应用中,是工作在定时方式(C/T2=0)。

48、定时器2作为波特率发生器时,与作为定时器的操作是不同的,通常作为定时器时,在每个机器周期(1/12振荡频率)寄存器的值加而作为波特率发生器使用时,在每个状态时间(1/2振荡频率)寄存器的值加1。

49、波特率的计算公式如下、方式1和3的波特率=振荡频率/{32*(65536-(RCP2H,RCP2L))}式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16位无符号数。

50、定时器2作为波特率发生器使用的电路如图7所示。

51、T2CON中的RCLK或TCLK=1时,波特率工作方式才有效。

52、在波特率发生器工作方式中,TH2翻转不能使TF2置位,故而不产生中断。

53、但若EXEN2置位,且T2EX端产生由1至0的负跳变,则会使EXF2置位,此时并不能将(RCAP2H,RCAP2L)的内容重新装入TH2和TL2中。

54、所以,当定时器2作为波特率发生器使用时,T2EX可作为附加的外部中断源来使用。

55、需要注意的是,当定时器2工作于波特率器时,作为定时器运行(TR2=1)时,并不能访问TH2和TL2。

56、因为此时每个状态时间定时器都会加对其读写将得到一个不确定的数值。

57、然而,对RCAP2则可读而不可写,因为写入操作将是重新装载,写入操作可能令写和/或重装载出错。

58、在访问定时器2或RCAP2寄存器之前,应将定时器关闭(清除TR2)。

八、c52单片机 第三个定时器T2 ,tmod里的t2相关位怎么设置?

1、T2CON(T2的控制寄存器),字节地址0x0C8H、符号TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RT2各位的定义如下、TF定时/计数器2溢出标志,T2溢出时置位,并申请中断。

2、只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。

3、EXF当EXEN2=1时,且T2EX引脚(P0)出现负跳变而造成T2的捕获或重装的时候,EXF2置位并申请中断。

4、EXF2也是只能通过软件来清除的RCLK、串行接收时钟标志,只能通过软件的置位或清除。

5、用来选择T1(RCLK=0)还是T2(RCLK=1)来作为串行接收的波特率产生器TCLK、串行发送时钟标志,只能通过软件的置位或清除。

6、用来选择T1(TCLK=0)还是T2(TCLK=1)来作为串行发送的波特率产生器EXENT2的外部允许标志,只能通过软件的置位或清除。

7、EXEN2=0、禁止外部时钟触发T2。

8、EXEN2=当T2未用作串行波特率发生器时,允许外部时钟触发T当T2EX引脚输入一个负跳变的时候,将引起T2的捕获或重装,并置位EXF申请中断。

9、TRT2的启动控制标志。

10、TR2=0、停止T2。

11、TR2=启动T2C/TT2的定时方式或计数方式选择位。

12、只能通过软件的置位或清除。

13、C/T2=0、选择T2为定时器方式。

14、C/T2=选择T2为计数器方式,下降沿触发。

15、CP/RT捕获/重装载标志,只能通过软件的置位或清除。

16、CP/RT2=0时,选择重装载方式,这时若T2溢出(EXEN2=0时)或者T2EX引脚(P0)出现负跳变(EXEN2=1时),将会引起T2重装载。

17、CP/RT2=1时,选择捕获方式,这时若T2EX引脚(P0)出现负跳变(EXEN2=1时),将会引起T2捕获操作。

18、但是如果RCLK=1或TCLK=1时,CP/RT2控制位不起作用的,被强制工作于定时器溢出自动重装载模式。

19、T2MOD(方式寄存器),字节地址0C9H、D7D6D5D4D3D2D1D0------------T2OEDCENT2OE、T2输出允许位,当T2OE=1的时候,允许时钟输出到P0。

20、DCEN、向下计数允许位。

21、DCEN=1是允许T2向下计数,否则向上计数。

22、T2的数据寄存器THTL2和T0、T1的用法一样,而捕获寄存器RCAP2H、RCAP2L只是在捕获方式下,产生捕获操作时自动保存THTL2的值。

23、以上是T2的相关寄存器的描述,其实用法上跟T0、T1是差不多的,只是功能增强了,设置的东西多了而已。

九、在52单片机里定时器1与定时器2不能同时使用 是为什么?怎么解决呢?

1、你可以看52单片机的说明.应该有模式说明.。