?? fas._c
字號(hào):
/**********************************/
/* 汽車轉(zhuǎn)速測(cè)量程序
/* 8.24,2004
/* Writed by Wuxw
/* Automation Depart. of WHUT
/* 芯片:ATMEGA8L
/* 晶振:2MHz
/*
/*
/***********************************/
/* 脈沖輸入接在INT0端口
/*
/* 輸出n,單位r/50ms,可用來(lái)計(jì)算車輪轉(zhuǎn)速
/*
/* num----脈沖計(jì)數(shù),可用來(lái)計(jì)算里程
/*
/* 485輸出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
/*
/* numLL-numLH-numHL-numHH分別為num的四個(gè)字節(jié)(L為低字節(jié),H為高字節(jié))
/*
/* 串口485通訊波特率baud = 9600
/*
/* 在受到正確地址(0x32)和命令(0xc5)后,發(fā)送數(shù)據(jù)
/*
/***********************************/
#include "iom8v.h"
#include "macros.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define E2ADDRLL 0x000 //脈沖計(jì)數(shù)存放地址
#define E2ADDRLH 0x001
#define E2ADDRHL 0x002
#define E2ADDRHH 0x003
//#define osccal 0x9d//內(nèi)部RC 校正常數(shù)
#define osccal_addr 0x1ff
//#define osccal 0xa4 //內(nèi)部RC校正常數(shù)
#define fosc 8000000 //晶振8MHZ
#define baud 9600 //串口通訊波特率
#define TIME50ms 0xae //定時(shí)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};
//最小延時(shí)單位,約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);//允許發(fā)送
UBRRL=(fosc/16/(baud+1))%256; //波特率的設(shè)置
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=0x86;//8 位數(shù)據(jù)+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);}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -