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

📄 fas._c

📁 用AVR单片机实现串口通讯功能
💻 _C
字号:
/**********************************/
/*        汽车转速测量程序
/*           8.24,2004
/*        Writed by Wuxw
/*    Automation Depart. of WHUT
/*          芯片:ATMEGA8L
/*          晶振:2MHz
/*        
/*
/***********************************/
/*    脉冲输入接在INT0端口
/*    
/*    输出n,单位r/50ms,可用来计算车轮转速
/*
/*    num----脉冲计数,可用来计算里程    
/*
/*    485输出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
/*    
/*    numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
/*
/*    串口485通讯波特率baud = 9600
/*    
/*    在受到正确地址(0x32)和命令(0xc5)后,发送数据
/*
/***********************************/



#include "iom8v.h"  
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#define E2ADDRLL 0x000         //脉冲计数存放地址
#define E2ADDRLH 0x001    
#define E2ADDRHL 0x002      
#define E2ADDRHH 0x003     
//#define osccal 0x9d//内部RC 校正常数
#define osccal_addr 0x1ff
//#define osccal 0xa4       //内部RC校正常数
#define fosc 8000000      //晶振8MHZ
#define baud 9600         //串口通讯波特率
#define TIME50ms 0xae     //定时50ms的初装值

//#define osccal_addr 0x1ff

uint m,n,K,i;
//uchar ndata[7]={0xFB,0x86,0x00,0x11,0x22,0x33,044};
uchar ndata[7]={0xFB,0x86,0x55,0x55,0x55,0x55,0x55};



//最小延时单位,约16微秒
void delay(uint x)   
{   uchar j;
    while(x-->0)
	{
       for(j=0;j<5;j++)
	   {;}
    }
}

unsigned char EEPROM_read(unsigned int uiAddress)
{while(EECR&(1<<EEWE));
 EEAR=uiAddress;
 EECR|=(1<<EERE);
 return EEDR;
}

#pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
void uart0_tx_isr(void)
{
          
if(K<6)
     {K=K+1;
	 UDR=ndata[K];
	 }  
       
     else
    {
	K=0;
	UCSRB&=~(1<<TXCIE);  //1?UART ?¤?é?¨a?D??
	} 
     
     
}

void USART_Init(void)    //串行初始化
{
   UCSRB|=(1<<TXEN);//允许发送
  UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
  UBRRH=(fosc/16/(baud+1))/256;
  UCSRC=0x86;//8 位数据+1 位STOP 位
}

void main(void)
{
    delay(200);
    OSCCAL=EEPROM_read(osccal_addr); 
	 //OSCCAL=osccal;
	 
	 PORTD|=(1<<PORTD7);
	 USART_Init();
	
	DDRD=0x80;
	
	SEI();
	 
	 
	 while(1)
	{
	UCSRB|=(1<<TXCIE);
	UDR=ndata[0];
    for(i=0;i<250;i++)
	{delay(1000);}
	 
    }
}	

⌨️ 快捷键说明

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