|
发表于 2006-5-15 16:59:31
|
显示全部楼层
/******************************************************************
File name: lin-master.c
Vesion: v2006-6-15
Author: min sheng
Function: 作为一个LIN总线的主节点,利用MCU的USART,查询方式发送一个字节0X11,
中断方式接受自己发送出去的数据。
开发背景: MCU-attiny2313v-10SI
LIN 收发器-MC33399D
编辑器-UltraEdit-32
编译器-WinAVR 20050214
GCC V2.0.5.48
下载器-AVR STUDIO 4.12
下载电缆-ATMEL原装串口下载线
******************************************************************/
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#define byte unsigned char
#define word unsigned int
void Flash_LED (void);
void Delay (word a);
void Initial_2313 (void);
void USART_transmit (byte data_tr);
//NOTE: main的返回值须为INT型。
int main (void){
Initial_2313 ();
Flash_LED();
Delay (0x5fff);
USART_transmit (0x11);
while (1){;} //加一个死循环
}
/************************************************
description: 指示灯闪烁
INPUT: NONE
OUTPUT: NONE
*************************************************/
void Flash_LED (void){
PORTD &= ~(1<<PORTD5);
Delay (0xfff);
PORTD |= 1<<PORTD5;
Delay (0xfff);
PORTD &= ~(1<<PORTD5);
Delay (0xfff);
PORTD |= 1<<PORTD5;
Delay (0xfff);
PORTD &= ~(1<<PORTD5);
Delay (0xfff);
}
/************************************************
description: 延时程序
INPUT: 延时时间
OUTPUT: NONE
*************************************************/
void Delay (word a){
word i;
for (;a>0;a--){
for (i=0xfff;i>0;i--)
{;}
}
}
/************************************************
description: TINY2313的初始化程序
INPUT: NONE
OUTPUT: NONE
*************************************************/
void Initial_2313 (void){
SREG &= ~(1<<7); //close grobal interrupt.
DDRD |= 1<<DDD5 ; //LED control
//initial USART
UBRRH = 0x02; //set baud rate 2400b/s
UBRRL = 0x07;
/*UCSRC UMSEL=0 UPM1:0=00 USBS=0 UCSZ1:0=11 UCPOL=0 */
UCSRC = 0X06; //set frame format 8bit data; 1bit stopbit
/*RXC= TXC= UDRE= FE= DOR= UPE= U2X=0 MPCM=0 */
UCSRA = 0X00;
/*RXCIE=1 TXCIE=0 UDRIE=0 RXEN=1 TXEN=1 UCSZ2=0 RXB8=0 TXB8=0*/
UCSRB = 0X98; //enable transmitter and receiver
SREG |= 1<<7; //Enable grobal interrupt.
//sei(); //使能全局中断
}
/************************************************
description: USART发送一个字节数据
INPUT: 待发送的一个字节数据
OUTPUT: NONE
*************************************************/
void USART_transmit (byte data_tr){
while (!(UCSRA&0X20)); //wait for data buffer empty
UDR = data_tr;
}
/************************************************
description: USART中断接收一个数据
INPUT: NONE
OUTPUT: NONE
*************************************************/
SIGNAL(SIG_USART0_RX){
byte data_re;
data_re = UDR;
if (data_re == 0x11) Flash_LED();
} |
|