📄 fas._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 + -