📄 pwm.c
字号:
#include "includes.h"
//#include "uart.h"
#include "adc.h"
//#include "display.h"
/*
#define Com 1
#define Dat 2
#define BaudRate 0x07
*/
void main(void);
void TargetInit(void);
//void DisplayInit(void);
void AdInit(void);
void PwmOut(uchar pwm);
void OSTimeTick(void);
//extern uchar UartRxBuf[RX_BUFFER_SIZE];
//extern uchar UartRxCount;
//extern uchar UartRxFlag;
//extern uchar UartTxBuf[TX_BUFFER_SIZE]; /* 256 bytes UART transmit buffer */
//extern uchar UartTxRdPtr; /* UART transmit buffer read pointer */
//extern uchar UartTxWrPtr; /* UART transmit buffer write pointer */
//extern uchar UartTxCount; /* Number of characters to send */
extern uchar AdReBuf[AD_BUF_SIZE];
extern uchar AdCount;
extern uchar AdComFlag;
extern uchar FisrtAdComFlag;
//uchar worktime;
//uchar ledtime;
uchar adtime;
uchar AdResult;
uchar AdResult0;
uchar AdResult1;
void OSTimeTick(void)
{
//worktime++;
//ledtime++;
adtime++;
}
void TargetInit(void)
{
DDRD = 0xff;
PORTD = 0x00;
TIMSK = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x7f;
OCR1BH = 0x00;
OCR1BL = 0x7f;
ICR1H = 0x00;
ICR1L = 0xFF;
TCCR1A = ((1<<COM1A1)|(1<<COM1B1));
TCCR1B = (1<<WGM13)|(1<<CS10); //start Timer
//UCSRA = (1<<U2X);
//UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE);
//UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
//UBRRL = BaudRate; /* 19200 BAUD at 4.0MHz */
//UartRxFlag = 0; /* Clear number of characters to send */
//UartRxCount = 0; /* Initialize transmit buffer read pointer */
//UartTxCount = 0; /* Clear number of characters to send */
//UartTxRdPtr = 0; /* Initialize transmit buffer read pointer */
//UartTxWrPtr = 0;
TCCR0 = 0x05; /* Set TIMER0 prescaler to CLK/1024 */
TCNT0 = 256-(7372800/1000/1024);
TIMSK = 0x01; /* Enable TIMER0 overflow interrupt */
WDTCR = (1<<WDE)|(1<<WDP1);
//DisplayInit();
AdInit(); //调用AD初始化
}
void AdInit(void)
{
ADMUX = (1<<REFS0)|(1<<ADLAR);
ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
AdCount = 0;
AdComFlag = 0;
FisrtAdComFlag = 0;
}
/*
void DisplayInit(void)
{
DDRB = (1<<Gate1)|(1<<Gate2)|(1<<Gate3)|(1<<Gate4);
PORTB = 0x0f;
DDRC = (1<<DispClk)|(1<<DispData);
PORTC &= ~(1<<DispClk);
PORTC &= ~(1<<DispData);
}
*/
void PwmOut(uchar pwm)
{
uchar temp;
if((pwm >= 0xF5)){
temp = 0xF5;
}else if(pwm <= 0x0A){
temp = 0x0A;
}else{
temp = pwm;
}
OCR1AH = 0x00;
OCR1AL = temp;
OCR1BH = 0x00;
OCR1BL = temp;
}
void main(void)
{
uchar temp;
_CLI(); //清中断
TargetInit();//调用初始化
//Display(12345,Gate1);
//worktime = 0;
//ledtime = 0;
adtime = 0;
AdResult = 0;
AdResult0 = 0;
AdResult1 = 0;
_SEI();//开中断
_WDR();
FirstAd();//开始第一次AD转换
_WDR();
while(1)
{
_WDR();
/*
if(worktime > 5) {
worktime = 0;
if(UartRxFlag == 1){
switch(UartRxBuf[Com])
{
case 0x44:
PutChar(OCR1AL);
UartRxFlag = 0;
break;
#if (UART_CHANGE_PWM_EN > 0)
case 0x55:
PwmOut(UartRxBuf[Dat]);
UartRxFlag = 0;
break;
#endif
case 0x66:
PutChar(AdResult);
UartRxFlag = 0;
break;
}
}
}
*/
if(adtime > 2) {
_WDR();
AdResult0 = ReadAd(0);
AdResult1 = ReadAd(1);
if(AdResult0 > AdResult1){
temp = (AdResult0 >> 1);
AdResult = 0x7F - temp;
}else {
temp = (AdResult1 >> 1);
AdResult = 0x7F + temp;
}
adtime = 0;
#if (AD_CHANGE_PWM_EN > 0)
if(AdResult != OCR1AL)
PwmOut(AdResult);
#endif
_WDR();
/*
if(AdResult != OCR1AL){
temp = AdResult * 196;
Display(temp , Gate1);
}
*/
//PutChar(AdResult);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -