利用P1.2输出一个周期为500KHz的方波,要求用定时器T1实现。
1个回答
关注
展开全部
你好,感谢咨询,利用P1.2输出一个周期为500KHz的方波,要求用定时器T1实现的方法有以下几种:利用定时器T1的工作方式2(八位重装模式),设置重装值为0x7E,使得定时器T1每隔1us产生一次中断,在中断服务程序中对P1.2取反,从而输出一个周期为2us(500KHz)的方波。利用定时器T1的工作方式0(十三位计数模式),设置初值为0xF800,使得定时器T1每隔4us产生一次中断,在中断服务程序中对P1.2取反,从而输出一个周期为8us(125KHz)的方波,并在主函数中对P1.2再取反两次,使得方波频率提高到500KHz。利用定时器T1的工作方式3(分裂成两个八位计数器),设置初值为0x00和0x7E,使得TH1和TL1分别以12MHz和6MHz的速度计数,并在主函数中检测TF1标志位,当TF1置位时对P1.2取反,并清除TF1标志位,从而输出一个周期为4us(250KHz)的方波,并在主函数中对P1.2再取反一次,使得方波频率提高到500KHz。
咨询记录 · 回答于2023-03-21
利用P1.2输出一个周期为500KHz的方波,要求用定时器T1实现。
你好,感谢咨询,利用P1.2输出一个周期为500KHz的方波,要求用定时器T1实现的方法有以下几种:利用定时器T1的工作方式2(八位重装模式),设置重装值为0x7E,使得定时器T1每隔1us产生一次中断,在中断服务程序中对P1.2取反,从而输出一个周期为2us(500KHz)的方波。利用定时器T1的工作方式0(十三位计数模式),设置初值为0xF800,使得定时器T1每隔4us产生一次中断,在中断服务程序中对P1.2取反,从而输出一个周期为8us(125KHz)的方波,并在主函数中对P1.2再取反两次,使得方波频率提高到500KHz。利用定时器T1的工作方式3(分裂成两个八位计数器),设置初值为0x00和0x7E,使得TH1和TL1分别以12MHz和6MHz的速度计数,并在主函数中检测TF1标志位,当TF1置位时对P1.2取反,并清除TF1标志位,从而输出一个周期为4us(250KHz)的方波,并在主函数中对P1.2再取反一次,使得方波频率提高到500KHz。
这个电路图合适不
这么小看不清。
我们在单片机考试,这是题目,请问你能帮我解答一下吗简易频率计的设计
自己下载一个visio或Edraw,将图片中的电路图复制到软件中,并检查是否有错误或缺失的元件、连线、标注。
我这边电脑上没有这个软件,你自己下载检测一下。
我需要的是简易频率计设计的代码,电路图有呢,你能帮忙发一下简易频率计设计的代码吗,谢谢谢谢谢谢
#include#include#define uchar unsigned char#define uint unsigned intuchar code table[]="0123456789";uchar num[4];sbit dula=P2^6;sbit wela=P2^7;sbit key=P3^0;uint count=0;void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}void display(){ uchar i; for(i=0;i>i; dula=1;dula=0; delay(5); }}void init(){ TMOD|=0x05;//定时器T0工作在方式1 TL0=(65536-50000)%256;//设置定时初值为50ms TH0=(65536-50000)/256;//设置定时初值为50ms TR0=1;//启动定时器T0 TF1=EA=ET1=ET2=EX1=key=count=num[3]=num[2]=num[1]=num[0]=P3_5=P3_6=P3_7=P2_5=P2_4=P2_3=P2_2=P2_1=P2_0=dula=wela=TCON&=~(TR1|TF1)=P3&=~(P3_4|P3_3|P3_2|P3_1)=IE&=~(ES|EA)=SCON&=~(TI|RI)=PSW&=~CY; }void main()
谢谢谢谢
{ init(); while(1) { if(key==0)//按键按下开始测量 { delay(10);//消抖 if(key==0) { TR1=!TR1;//启动或关闭定时器T1 if(TR1==!TR1)//如果是关闭定时器T1则显示测量结果并清零计数值和显示缓冲区的值 {
num[3]=count%10;count/=10;//取个位数并存入显示缓冲区的第四位(最低位) num[2]=count%10;count/=10;//取十位数并存入显示缓冲区的第三位(次低位) num[1]=count%10;count/=10;//取百位数并存入显示缓冲区的第二位(次高位) num[0]=count%10;count/=10;//取千位数并存入显示缓冲区的第一位(最高位) count=num[4]=num[5]=num[6]=num[7]=TL1=TCON&=~TF1=TCON|=TR!TR!TF!TF!TF!TF!TF!TF!TF!TF!TLH=TLL=TLLH=TLLH=TLLH=TLLH=TLLH=TLLH=TLLH=TLLH=TLLH&TFL&TFL&TFL&TFL&TFL&TFL&TFL&TFL&TFL&TFL&TFL&~TFR&~TFR&~TFR&~TFR&~TFR&~TFR&~TFR&~TFR&~TFR&~TFR&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX=!PX&PX!=PT!=PT!=PT!=PT!=PT!=PT!=PT!=PT!=PT!=PT!=PT&&!(EX&&!(EX&&!(EX&&!(EX&&!(EX&&!(EX