📄 main.c
字号:
/***********************************************************************
* main.c
*文件功能: 主函数
*相关说明:
*编写时间: 2007年7月13日
*编写作者: 劳永彬
***********************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include "UART.h"
#include "ADCurrent.h"
volatile uint16_t Timer;
/***************************************************
函数名称:PortInit()
函数功能:初始化IO口
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
void PortInit(void)
{
PORTA = 0x00; //关闭上拉电阻
DDRA = 0x00; //AD输入
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0x00;
TIMSK = 0x00; //清中断允许寄存器
}
/***************************************************
函数名称:void TimerInit(void)
函数功能:初始化定时时钟,T2,CTC模式,5ms自动重载
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
void TimerInit(void)
{
TCNT2 = 0x00;
OCR2 = 77;
TIFR |= (1<<OCF2); //清匹配中断标志位
TIMSK |= (1<<OCIE2); //允许匹配中断
TCCR2 = (1<<WGM21)|(1<<CS20)|(1<<CS21)|(1<<CS22); //1024分频,CTC模式
/*
Fi = F_CPU(16000) / (OCR0(77+1) * n(1024) ) = 0.2KHz
Ti = 1/Fi = 1/0.2 = 5ms
*/
}
/***************************************************
函数名称:SIGNAL(SIG_OUTPUT_COMPARE2)
函数功能:定时器匹配中断,5ms定时中断
输入参数:无
返回参数:无
影响的全局变量:刷新各采样间隔和各任务延时以及系统时钟
***************************************************/
SIGNAL(SIG_OUTPUT_COMPARE2)
{
if (Timer > 0) //如果电机运行
{
Timer --; //电机运行时间减1
}
}
/***************************************************
函数名称:main()
函数功能:主函数
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
int main(void)
{
PortInit();
TimerInit();
ADInit();
UARTInit();
PORTC = (0x01<<4); //启动电机2
SampleList = 0x02; //AD2作为正差分输入
/**以下两行是采用中断方式采样,如果采用查询方式进行则不需要这两行**/
ADCSRA |= (1<<ADIE); //开ADC中断
SetADC(); //第一次转换
/******************************************************************/
sei();
while(1)
{
Timer = 200; //1秒定时,每一秒发送一次数据
while (Timer != 0) ;
/**以下三行是采用查询方式采样,如果采用中断方式进行则不需要这三行***/
// Current[2] = ReadVoltage(SampleList+2);
// Current[1] = ReadVoltage(SampleList+1);
// Current[0] = ReadVoltage(SampleList);
/*******************************************************************/
cli();
PutByte((uint8_t)(Current[0]>>8));
PutByte((uint8_t)(Current[0]));
PutByte((uint8_t)(Current[1]>>8));
PutByte((uint8_t)(Current[1]));
PutByte((uint8_t)(Current[2]>>8));
PutByte((uint8_t)(Current[2]));
PutByte('\r');
PutByte('\n');
Current[0] = 0;
Current[1] = 0;
Current[2] = 0;
sei();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -