📄 main.c
字号:
#include <inavr.h>
#include <ioavr.h>
#include <stdio.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
long Upcount;
#pragma vector=TIMER0_OVF_vect
__interrupt void Timer0 (void)
{
TCNT0 = 0x00; // 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;
printf("o");
/*if(!FirstFlag) {
if(Upcount == 1000) {
FirstFlag = 1;
Upcount = 0;
TCCR0 = 0x03;
}
}
else {
if(Upcount < 2000) {
TCNT0 = 0x20; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 4000) {
TCNT0 = 0x30; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 6000) {
TCNT0 = 0x40; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 8000) {
TCNT0 = 0x50; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 10000) {
TCNT0 = 0x60; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 12000) {
TCNT0 = 0x70; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 14000) {
TCNT0 = 0x80; // about 5ms prescale:1024 for 16MHz
}
else if( Upcount < 16000) {
TCNT0 = 0x90; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 18000) {
TCNT0 = 0xA0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 20000) {
TCNT0 = 0xB0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 22000) {
TCNT0 = 0xB1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 24000) {
TCNT0 = 0xB2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 26000) {
TCNT0 = 0xB3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 28000) {
TCNT0 = 0xB4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 29000) {
TCNT0 = 0xB5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 30000) {
TCNT0 = 0xB6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 31000) {
TCNT0 = 0xB7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 32000) {
TCNT0 = 0xB8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 33000) {
TCNT0 = 0xB9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 34000) {
TCNT0 = 0xBA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 35000) {
TCNT0 = 0xBB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 36000) {
TCNT0 = 0xBC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 37000) {
TCNT0 = 0xBD; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 38000) {
TCNT0 = 0xBE; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 39000) {
TCNT0 = 0xBF; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 40000) {
TCNT0 = 0xC0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 41000) {
TCNT0 = 0xC1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 42000) {
TCNT0 = 0xC2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 43000) {
TCNT0 = 0xC3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 44000) {
TCNT0 = 0xC4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 45000) {
TCNT0 = 0xC5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 46000) {
TCNT0 = 0xC6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 47000) {
TCNT0 = 0xC7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 48000) {
TCNT0 = 0xC8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 49000) {
TCNT0 = 0xC9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 50000) {
TCNT0 = 0xCA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 51000) {
TCNT0 = 0xCB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 52000) {
TCNT0 = 0xCC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 53000) {
TCNT0 = 0xCD; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 54000) {
TCNT0 = 0xCE; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 55000) {
TCNT0 = 0xCF; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 56000) {
TCNT0 = 0xD0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 57000) {
TCNT0 = 0xD1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 58000) {
TCNT0 = 0xD2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 59000) {
TCNT0 = 0xD3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 60000) {
TCNT0 = 0xD4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 61000) {
TCNT0 = 0xD5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 62000) {
TCNT0 = 0xD6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 63000) {
TCNT0 = 0xD7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 64000) {
TCNT0 = 0xD8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 65000) {
TCNT0 = 0xD9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 66000) {
TCNT0 = 0xDA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 67000) {
TCNT0 = 0xDB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 68000) {
TCNT0 = 0xDC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 69000) {
TCNT0 = 0xDD; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 70000) {
TCNT0 = 0xDE; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 71000) {
TCNT0 = 0xDF; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 72000) {
TCNT0 = 0xE0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 73000) {
TCNT0 = 0xE1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 74000) {
TCNT0 = 0xE2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 75000) {
TCNT0 = 0xE3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 76000) {
TCNT0 = 0xE4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 77000) {
TCNT0 = 0xE5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 78000) {
TCNT0 = 0xE6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 79000) {
TCNT0 = 0xE7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 80000) {
TCNT0 = 0xE8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 81000) {
TCNT0 = 0xE9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 82000) {
TCNT0 = 0xEA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 83000) {
TCNT0 = 0xEB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 84000) {
TCNT0 = 0xEC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 85000) {
TCNT0 = 0xED; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 86000) {
TCNT0 = 0xEE; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 87000) {
TCNT0 = 0xEF; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 88000) {
TCNT0 = 0xF0; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 89000) {
TCNT0 = 0xF1; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 90000) {
TCNT0 = 0xF2; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 91000) {
TCNT0 = 0xF3; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 92000) {
TCNT0 = 0xF4; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 93000) {
TCNT0 = 0xF5; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 94000) {
TCNT0 = 0xF6; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 95000) {
TCNT0 = 0xF7; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 96000) {
TCNT0 = 0xF8; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 97000) {
TCNT0 = 0xF9; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 98000) {
TCNT0 = 0xFA; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 99000) {
TCNT0 = 0xFB; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 100000) {
TCNT0 = 0xFC; // about 5ms prescale:1024 for 16MHz
}
else if(Upcount < 101000) {
TCNT0 = 0xFD; // about 5ms prescale:1024 for 16MHz
}
else {
TCNT0 = 0xFE; // about 5ms prescale:1024 for 16MHz
}
}
if(Upcount < 110000) {
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 = 0x00; // 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 = 0x033; // 19200bps for 16MHz
UBRR0L = 0x05; // 115200bps for 11.0592MHz
//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;
DDRE = 0xFE;
}
void main(void)
{
Port_Init();
Uart0_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();
//printf("k");
//printf("j");
//printf("s");
//printf("e");
//printf("o");
//__delay_cycles(500000);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -