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

📄 init.c

📁 一个16位单片机modbus通信例程
💻 C
字号:
//ICC-AVR application builder : 2004-10-27 10:06:29
// Target : M16
// Crystal: 8.0000Mhz

#include "main.h"

//初始化变量
void varInit(void)
{

}//void valInit(void)

void port_init(void)
{
 	 				// 
 PORTA = 0xF0;		//		
 DDRA  = 0x00;		//
 PORTB = 0xFF;		//
 DDRB  = 0xFD;		//
 PORTC = 0xFF; 		//
 DDRC  = 0x00;		//
 PORTD = 0xFF;		//
 DDRD  = 0xFA;		//
}//void port_init(void)


//Watchdog initialisation
// prescale: 2048K cycles
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}//void watchdog_init(void)

void timer0_init(void)
{
 //初始化1ms 定时中断
 TCCR0 = 0x00;
 TIFR  = 0x00;  
 TCNT0 = 0x83;
 TCCR0 = 0x03;
}//void timer0_init(void)

//ADC initialisation
// Conversion time: 52uS
void adc_init(void)
{
 uint8 adcMux = 0;
 
 ADCSR = 0x00; //disable adc
 ADMUX = 0xc0 |(adcMux&0x0f); //select adc input 0   2.56V参考源
 ACSR  = 0x80;
 ADCSR = 0x85; //使能ADC 32分频
}//void adc_init(void)

//UART0 initialisation
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
// char size: 8 bit
// parity: Even
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = 0xA6;
 UBRRL = 51; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0xD8;
 
 receEnable();
}

#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 	uint8 status;
	
 //uart has received a character in UDR
	status = UCSRA;
    receBuf[receCount] = UDR;
	
    if(status & 0x1c)  //通信出错
    	 checkoutError = 2;	//偶校验出错

  	//testRegister = status;		 
    receCount++;          //接收地址偏移寄存器加1
    receCount &= 0x1f;    //最多一次只能接收32个字节 
    receTimeOut = 10;    //通讯超时值	
}

#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
 //character has been transmitted
    if(sendPosi < sendCount) 
    {
        sendPosi++;
        UDR = sendBuf[sendPosi];
    }
    else
    {
        receEnable();    //发送完后将485置于接收状态
        receCount = 0;   //清接收地址偏移寄存器
        checkoutError = 0;
    } 
}

//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 watchdog_init(); 
 timer0_init();
 adc_init();
 uart0_init(); 

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x01; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialised
}//void init_devices(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -