微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人求助。。。——

新人求助。。。——

时间:10-02 整理:3721RD 点击:
刚学AVR  想做一个循迹小车的程序    用相位修正PWM来控制小车      PD4 PD5输出PWM波可是为什么用示波器没法测出来波形。?  小白不懂求指导
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
/***************短延时*********12MHZ xus*/
void delay_short(uint x)
{
         uchar i,j,k;
         for(k=0;k<x;k++)
         {
                   for(i=1;i>0;i--)
             {
                for(j=3;j>0;j--);
             }
         }
}
/*************长延时**********12MHZ xms*/
void delay_long(uint x)
{
         uint i,j,k;
         for(k=0;k<x;k++)
        {
                  for(i=129;i>0;i--)
                 {
                      for(j=45;j>0;j--);
                  }
        }
}
/************IO初始化********/
void IOinit(void)
{
        DDRA = DDRA&0xF0; //PA口输入
    PORTA = 0xF0;
        DDRB=0xFF;   //PB口输出
        PORTB=0XFF;
        DDRD=0xFF;            //PD 输出
        PORTD|=0x18;
}
/************T1初始化*******/
void T1init(void)
{
        uint i,j;
        i=300;
        j=300;
        CLI(); //禁止所有中断
    MCUCR  = 0x00;
    GICR   = 0x00;
        TIMSK |= 0x18;        //输出比较使能
        TCCR1A = 0x50;//相位与频率修正PWM,TOP值为ICR1,向上计数匹配清零,向下计数匹配时置1
    TCCR1B = 0x11;//1分频,A,B同时输出PWM  
        ICR1=1000;
        OCR1A=i;
        OCR1B=j;
        SEI();//开全局中断
}
***********占空比调整**********/
void Revise(uint left,uint right)
{
         OCR1A=right*10;
         OCR1B=left*10;
}

/*********巡线处理*********/
void Search(void)
{
         if(PINA=0x01)  //左侧检测到黑线
         {
            delay_long(50);
                  Revise(15,85);                       
         }
         if(PINA=0x08)  //右侧检测到黑线
         {
            delay_long(50);
                  Revise(85,15);
         }
         if(PINA=0x0F) //全部检测到
         {
            Revise(40,40);
         }
         if(PINA=0x06)  //中间两个灯
         {
            Revise(40,40);
         }
         if(PINA=0x00)  //均没有检测到
         {
            Revise(40,40);
         }
         if(PINA=0x04)  //中间左灯
         {
            delay_long(30);
                  Revise(40,60);
         }
         if(PINA=0x02)  //中间右灯
         {
            delay_long(30);
            Revise(60,40);
         }
}
void main(void)
{
         delay_long(50);
         IOinit();
         T1init();
         while(1)
         {
            Search();
         }
         
}

没用过这款单片机

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top