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

📄 main.c

📁 AVR控制西门子MC39I的程序
💻 C
字号:
#include <iom128v.h>
#include <macros.h>
#define fosc 8000000 //晶振8MHZ
#define baud  9600	 //与指纹头通讯的波特率
#define FrameCount  10
#define uint unsigned int
#define uchar unsigned char

#define Set485Rec PORTG |= (1<<2)
#define Set485Send PORTG &= ~(1<<2) 

uchar RecComm[10];
uchar SendComm[10];
uchar RecCount=0;

void Delay(uint time)
{
    uint m,n;
	for(n=0;n<time;n++)
	{
       for(m=0;m<256;m++);
	}
}

void Com0Init(void)                                    //串口通讯初始化程序
{
     UCSR0B = 0x00; //设置波特率时关闭发送和接收
     UCSR0A = 0x00;
	 UBRR0L=(fosc/16/(baud+1))%256;
     UBRR0H=(fosc/16/(baud+1))/256;
     UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);          //8位数据+1位STOP位
     UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);            //允许发送和接收
     //UCSR0B=(1<<RXEN0)|(1<<TXEN0);
}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr()
{
      while(!(UCSR0A & (1<<RXC0)));        
	  asm("WDR");
	  RecComm[RecCount] = UDR0;
      RecCount++;
	  if(RecCount >= FrameCount) RecCount = 0;
}

void SendFrame0(uchar *Frame,uchar CountFrame)
{
   uchar *pTem,m;
   pTem = Frame;
   Set485Send;
   Delay(100);
   for(m=0;m<CountFrame;m++)
   {
      asm("WDR");
	  while (!(UCSR0A & (1<<UDRE0)));
      asm("WDR");
	  UDR0 = *pTem;
      pTem++;
   }
   Set485Rec;
   Delay(100);
}

void main(void)
{
   	 uchar m;
	 for(m=0;m<10;m++)
	 {
	    SendComm[m]=0x30+m;
	 }
	 DDRG |= (1<<2);
	 SEI();
	 Com0Init();
	 SendFrame0(SendComm,10);
	 for(;;)
	 {
	    ;;
	 }
}

⌨️ 快捷键说明

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