📄 main.c.bak
字号:
#include <inavr.h>
#include <ioavr.h>
#include "Type.h"
#define STX 0x02
#define ETX 0x03
#define NACK 0x15
#define ACK 0x06
#define FRAMING_ERROR 0x10
#define DATA_OVERRUN 0x08
#define PARITY_ERROR 0x04
#define CLEAR 0
#define SET 1
#define FALSE 0
#define TRUE 1
#define BUFFER_SIZE 30
WORD Ref_Counter=CLEAR;
WORD Update_Counter=CLEAR;
WORD Motor_Vel_Counter=CLEAR;
// Uart0 Buffer
BYTE UART_RxBufU0[BUFFER_SIZE] = { 0 };
volatile BYTE FrameBufferU0[BUFFER_SIZE] = { 0 };
volatile BYTE SendBufferU0[BUFFER_SIZE] = { 0 };
WORD time1msModBusU0=CLEAR;
WORD StartPointU0=CLEAR;
WORD FramePointU0=CLEAR;
WORD HeadU0,TailU0;
// Uart1 Buffer
BYTE UART_RxBufU1[BUFFER_SIZE] = { 0 };
volatile BYTE FrameBufferU1[BUFFER_SIZE] = { 0 };
volatile BYTE SendBufferU1[BUFFER_SIZE] = { 0 };
WORD time1msModBusU1=CLEAR;
WORD StartPointU1=CLEAR;
WORD FramePointU1=CLEAR;
WORD HeadU1,TailU1;
BIT UartFlag0 = { 0 };
#define notMineCommandU0 UartFlag0.Bit.b0
#define bGetFrameFlagU0 UartFlag0.Bit.b1
#define notMineCommandU1 UartFlag0.Bit.b2
#define bGetFrameFlagU1 UartFlag0.Bit.b3
#define bT0Flag UartFlag0.Bit.b4
#define bT2Flag UartFlag0.Bit.b5
#define FirstFlag UartFlag0.Bit.b6
WORD Upcount;
#pragma vector=TIMER0_OVF_vect
__interrupt void Timer0 (void)
{
//TCNT0 = 0xDB; // about 150us prescale:32 for 16MHz
//TCNT0 = 0xDB; // about 150us prescale:32 for 16MHz
//bT0Flag = 1;
//TCNT0 = 0xFF; // about 5ms prescale:1024 for 16MHz
PORTD_Bit3 = ~PORTD_Bit3;
if(!FirstFlag && Upcount < 2000) {
FirstFlag = 1;
Upcount=0;
TCCR0 = 0x03; // 64 Prescale
}
if(Upcount < 2000) {
TCNT0 = 0x40; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 4000) {
TCNT0 = 0x50; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 6000) {
TCNT0 = 0x60; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 8000) {
TCNT0 = 0x70; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 10000) {
TCNT0 = 0x80; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 12000) {
TCNT0 = 0x90; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 14000) {
TCNT0 = 0xA0; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 16000) {
TCNT0 = 0xB0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 18000) {
TCNT0 = 0xC0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 20000) {
TCNT0 = 0xD0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 22000) {
TCNT0 = 0xD1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 24000) {
TCNT0 = 0xD2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 26000) {
TCNT0 = 0xD3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 28000) {
TCNT0 = 0xD4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 29000) {
TCNT0 = 0xD5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 30000) {
TCNT0 = 0xD6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 31000) {
TCNT0 = 0xD7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 32000) {
TCNT0 = 0xD8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 33000) {
TCNT0 = 0xD9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 34000) {
TCNT0 = 0xDA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 35000) {
TCNT0 = 0xDB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 36000) {
TCNT0 = 0xDC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 37000) {
TCNT0 = 0xDD; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 38000) {
TCNT0 = 0xDE; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 39000) {
TCNT0 = 0xDF; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 40000) {
TCNT0 = 0xE0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 41000) {
TCNT0 = 0xE1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 42000) {
TCNT0 = 0xE2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 43000) {
TCNT0 = 0xE3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 44000) {
TCNT0 = 0xE4; // about 5ms prescale:1024 for 16MHz
}
else {
TCNT0 = 0xE7; // about 5ms prescale:1024 for 16MHz
}
if(Upcount < 50000) {
Upcount++;
}
/*if(time1msModBusU0++ > 50) { // 250mS
time1msModBusU0 = CLEAR; // 200=1sec, 1000=5sec
HeadU0=CLEAR; TailU0=CLEAR; StartPointU0=CLEAR; bGetFrameFlagU0=FALSE;
FramePointU0=CLEAR; FrameBufferU0[0]=CLEAR;
}
if(time1msModBusU1++ > 50) { // 250mS
time1msModBusU1 = CLEAR; // 200=1sec, 1000=5sec
HeadU1=CLEAR; TailU1=CLEAR; StartPointU1=CLEAR; bGetFrameFlagU1=FALSE;
FramePointU1=CLEAR; FrameBufferU1[0]=CLEAR;
}*/
}
#pragma vector=TIMER2_OVF_vect
__interrupt void Timer2 (void)
{
TCNT2 = 0xDA; // about 150us prescale:32 for 16MHz
bT2Flag = 1;
//PORTD_Bit3 = ~PORTD_Bit3;
}
void Timer0_Init(void)
{
//TCCR0 = 0x07; // 1024 Prescale
//TCCR0 = 0x03; // 32 Prescale
TCCR0 = 0x04; // 64 Prescale
TIMSK = 0x01; // Timer0 Overflow interrupt
TCNT0 = 0xB4; // about 5ms
}
void Timer2_Init(void)
{
TCCR2 = 0x05; // 1024 prescale
TIMSK = 0x40; // Timer2 Overflow interrupt
TCNT2 = 0xDA; // about 5ms
}
void Uart0_Init(void)
{
UBRR0H = 0x00;
//UBRR0L = 0x0C; // 19200bps for 4MHz
UBRR0L = 0x33; // 19200bps for 16MHz
//UBRR0L = 0x08; // 115200bps for 16MHz
UCSR0A = 0x00;
UCSR0B = 0x98; // rx complete interrupt enable, rx enable, tx enable
UCSR0C = 0x06; //no parity, 1stop bit, 8bit
}
void Uart1_Init(void)
{
UBRR1H = 0x00;
//UBRR1L = 0x0C; // 19200bps for 4MHz
UBRR1L = 0x33; // 19200bps for 16MHz
//UBRR1L = 0x08; // 115200bps for 16MHz
UCSR1A = 0x00;
UCSR1B = 0x98; // rx complete interrupt enable, rx enable, tx enable
UCSR1C = 0x06; //no parity, 1stop bit, 8bit
}
void Port_Init(void)
{
DDRB = 0xFF;
DDRD = 0xFF;
DDRG = 0x1F;
}
void main(void)
{
Port_Init();
__delay_cycles(50000);
__delay_cycles(50000);
Timer0_Init();
//Timer2_Init();
__enable_interrupt();
do{
/* if(bT0Flag) {
bT0Flag = 0;
Ref_Counter++; // 150us
}
if(bT2Flag) {
bT2Flag = 0;
if(Update_Counter < 2000) Update_Counter++;
}
if(Ref_Counter == 12 && Update_Counter <= 400) {
Ref_Counter = 0;
PORTD_Bit3 = ~PORTD_Bit3;
}
else if(Ref_Counter == 10 && Update_Counter <= 800) {
Ref_Counter = 0;
PORTD_Bit3 = ~PORTD_Bit3;
}
else if(Ref_Counter == 8 && Update_Counter > 800) {
Ref_Counter = 0;
PORTD_Bit3 = ~PORTD_Bit3;
}*/
//if(Update_Counter < 2000)
//CommSubroutineUart0();
//CommSubroutineUart1();
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -