PIC单片机 输出波形问题
使用Loop1()循环,输出的是周期为50us的20Khz的波形。现在想输出5个连续波,再空25ms,循环输出波形。1,2,3,4,5_____置低25MS_____1,...
使用Loop1()循环,输出的是周期为50us的 20Khz 的波形。
现在想输出 5个连续波,再空25ms ,循环输出波形。
1,2,3,4,5_____置低25MS_____1,2,3,4,5_____置低25MS_____1,2,3,4,5_____置低25MS_____
#include <pic.h>
// PIC16F690
__CONFIG(WDTEN & PWRTEN & MCLREN & BOREN & IESODIS & FCMDIS & INTIO);
#define PORTB_7 RB7
void delay25us(void)
{
TMR0=0xee;//设置定时器的初值25us
while(T0IF==0)
{
}
T0IF=0;
}
void delay25000us(void)
{
int i;
for(i=0;i<1000;i++)
{
delay25us();
}
}
void Loop1(void)
{
PORTB_7=1;
delay25us();//延时25毫秒
PORTB_7=0;
delay25us();//延时25毫秒
}
void Loop2(void)
{
Loop1();
Loop1();
Loop1();
Loop1();
Loop1();
delay2500us();
}
void main()
{
OSCCON=0b01110000; //8MHZ
TRISB=0x00;//将B口设置为输出
OPTION=0x0;//设置分频比例为1:2
T0IF=0; //清中断标志位
while(1)
{
//Loop1();
Loop2();
}
}
而现在代码Loop2()输出结果: 变成输出周期为20MS的 50hz 的波形,想达到以上效果该如何操作呢? 展开
现在想输出 5个连续波,再空25ms ,循环输出波形。
1,2,3,4,5_____置低25MS_____1,2,3,4,5_____置低25MS_____1,2,3,4,5_____置低25MS_____
#include <pic.h>
// PIC16F690
__CONFIG(WDTEN & PWRTEN & MCLREN & BOREN & IESODIS & FCMDIS & INTIO);
#define PORTB_7 RB7
void delay25us(void)
{
TMR0=0xee;//设置定时器的初值25us
while(T0IF==0)
{
}
T0IF=0;
}
void delay25000us(void)
{
int i;
for(i=0;i<1000;i++)
{
delay25us();
}
}
void Loop1(void)
{
PORTB_7=1;
delay25us();//延时25毫秒
PORTB_7=0;
delay25us();//延时25毫秒
}
void Loop2(void)
{
Loop1();
Loop1();
Loop1();
Loop1();
Loop1();
delay2500us();
}
void main()
{
OSCCON=0b01110000; //8MHZ
TRISB=0x00;//将B口设置为输出
OPTION=0x0;//设置分频比例为1:2
T0IF=0; //清中断标志位
while(1)
{
//Loop1();
Loop2();
}
}
而现在代码Loop2()输出结果: 变成输出周期为20MS的 50hz 的波形,想达到以上效果该如何操作呢? 展开
1个回答
展开全部
看了一下代码,Loop2()输出的波形应该是 20KHz的没问题。如果你用示波器测得的波形不正确,可能有几个原因:
1. 你的定时器的设置不正确,导致delay25us()的时间不准。
2. 你的I/O 口的配置不对,导致实际波形并没有输出。因为50Hz的波形很有可能是噪音信号的波形,这在嵌入式开发时很常见。
建议你先检查一下I/O口的配置。先写一段简单的测试代码,比如 PORTB_7=1(PORTB_7=0)
将I/O口拉高(拉低),用示波器测一下看看你的I/O口是否受控。
如果I/O口是可以控制的,再检查你的定时器的设置是否正确。祝你早日调试成功!
ps: 你的注释跟代码有出入,25us是25微秒,不是25毫秒
1. 你的定时器的设置不正确,导致delay25us()的时间不准。
2. 你的I/O 口的配置不对,导致实际波形并没有输出。因为50Hz的波形很有可能是噪音信号的波形,这在嵌入式开发时很常见。
建议你先检查一下I/O口的配置。先写一段简单的测试代码,比如 PORTB_7=1(PORTB_7=0)
将I/O口拉高(拉低),用示波器测一下看看你的I/O口是否受控。
如果I/O口是可以控制的,再检查你的定时器的设置是否正确。祝你早日调试成功!
ps: 你的注释跟代码有出入,25us是25微秒,不是25毫秒
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询