⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 using ewavr compiler, mega128 port test program
💻 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 + -