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

📄 cloc-p.c

📁 AVR ICC基于AVR单片机的LED显示程序!
💻 C
字号:
/*
通讯说明:
  主机的通信:主机循环扫描
flag1  第一组数据 
主线是高电位的
flag2  第二组数据
一直允许他
*/
/* 设计目的:双机信息传替*/
#include <iom48v.h>
#include <macros.h>
#include <eeprom.h>

#define uchar unsigned char
#define unit unsigned int
#define ulong unsigned long



#define xtal 8 
#define fosc 8000000 //晶振8MHZ
#define baud 9600	 //波特率
#define SIO1 PORTC|=0X10   
#define SIO0 PORTC&=~0X10
#define a50 PORTD&=~0x08
#define a51 PORTD|=0X08
uchar date,flag;
uchar n,ORDER;
uchar tm2[4]={11};

void port_init(void)
{
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x0F;
 PORTD = 0x08;
 DDRD  = 0xC8;
}



//Watchdog initialize
// prescale: 32K
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCSR = 0x0e; //WATCHDOG ENABLED - dont forget to issue WDRs
}

//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x06;
 UBRR0L = 0x33; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x90;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 uart0_init();
 watchdog_init();
 MCUCR = 0x00;
 EICRA = 0x00; //extended ext ints
 EIMSK = 0x00;
 
 TIMSK0 = 0x00; //timer 0 interrupt sources
 TIMSK1 = 0x00; //timer 1 interrupt sources
 TIMSK2 = 0x00; //timer 2 interrupt sources
 
 PCMSK0 = 0x00; //pin change mask 0 
 PCMSK1 = 0x00; //pin change mask 1 
 PCMSK2 = 0x00; //pin change mask 2
 PCICR = 0x00; //pin change enable 
 PRR = 0x00; //power controller
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

/*		微秒级延时程序		*/
void del(int time)
	 {     
  	  do
	  	{
		 time--;
		}	
  	  while (time>1);
	 }
	 
/*	   毫秒级延时程序   	*/	 
void delay_1ms(void)
{ unsigned int i1;
 for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
    ;
}

void delay(unsigned int n)
{
 unsigned int i2=0;
   while(i2<n)
   {delay_1ms();
    i2++; WDR();
   }
}

/*  		字符输入函数 		 */	
unsigned char getchar(void)
  	{
	 while(!(UCSR0A& (1<<RXC0)));
     return UDR0;
	}	


#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
 uchar udr;
 //uart has received a character in UDR
 udr=UDR0; 
 if(n==2)
	 {
       tm2[ORDER]=udr;
       ORDER++;
       if(ORDER==4) 
	     {
		  n=0;
		  ORDER=0;
     	  flag=1;	
		 }
	  } 
 if(udr==0x0A)
      {
      n=1;
      }   
  if(n==1)
     {
	 if(udr==0x46)
      {
      n=2;
	  ORDER=0;
      }
	 }
}

void send_asd(uchar date)
{
   char i;
   uchar n=0x01;
   a50;
   del(100);
   a51;
   del(10);
    for(i=0;i<8;i++)
	 {
     if((date&n)==n) a51; else a50;
	 del(100);
	 n<<=1;
	 WDR();
     }
   a51;  
}
void send_asd1()
{
  char ii;
    CLI();
	//send_asd(11);
	for(ii=0;ii<4;ii++)
      {
	  send_asd(tm2[ii]);
	  }
    SEI();
}

void main(void)
{
uchar i;
delay(100);
OSCCAL=0x90;

init_devices();
DDRD|=0x04; PORTD&=~0x04;   //in
DDRD|=0x08; PORTD|=0x08;  


while(1)
{

if(flag)
{  
   CLI();
    send_asd1();
	flag=0;
	SEI();
}
WDR();
}

}

⌨️ 快捷键说明

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