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

📄 testuart._c

📁 本代码是AVR单片机的完整IIC通信程序
💻 _C
字号:
//ICC-AVR application builder : 2006-7-17 15:54:53
// Target : M16
// Crystal: 1.0000Mhz

#include <iom16v.h>
#include <macros.h>

//定义MCU与LCD的接口
#define LCD_EN_PORT    PORTB
#define LCD_RW_PORT    PORTB
#define LCD_RS_PORT    PORTB
#define LCD_DATA_PORT  PORTA
#define LCD_DATA_DDR   DDRA
#define LCD_DATA_PIN   PINA

//定义ms7512b与MCU的接口
#define MS7512B_RS_PORT PORTC
#define MS7512B_MOD1_PORT PORTC
//#define MS7512B_MOD2_PORT PORTC
//定义发送判断接口
#define SWITCH_PORT PORTB
//定义LED控制口
#define LED_CONTROL_PORT PORTD
//定义LCD键盘控制口
#define LCD_KEY_PORT PORTD

#define LCD_KEY   	   0x40   //portd6         in
#define LED_CONTROL    0x80   //portd7         out
#define MS7512B_MOD1   0x01   //portc0         out
//#define MS7512B_MOD2   0x02   //portc1         out
#define MS7512B_RS     0x02   //portc1         out
#define SWITCH_EN      0x10   //portB4         in
#define LCD_EN         0x01   //portB0         out
#define LCD_RW         0x02   //portB1         out/in
#define LCD_RS         0x04   //portB2         out
#define LCD_DATA       0xf0   //portA4/5/6/7   out
short getcrc(unsigned char *s, short len)
{
	short acc=0,i,j=0;
	while(len--)
	{
		acc=acc^(*s++<<8);
		for(i=0;i++<8;)
			if(acc&0x8000)
				acc=(acc<<1)^0x1021;
			else
				acc=acc<<1;
	}
	return(acc);
}
void makecrc(unsigned char *s,int len)
{
    short crcin;
    crcin = getcrc(s,len);
	s[len]=crcin>>8;
	s[len+1]=crcin%256;

}

int checkcrc(unsigned char *s,int len)
{
	short crcin;
	crcin= getcrc(s,len);
	if(((0xffff&crcin)==((0xffff&(s[len]<<8))+(0xff&(s[len+1])))))
		return (1);
	else return (0);
	
}

void delay_nus(unsigned int n)//n微秒延时函数
{
unsigned int i;
for (i=0;i<n;i++)
  {
      asm("nop");
  }
}

void delay_hus(unsigned int n)//n毫秒
{
unsigned int i;
unsigned int j;
for (i=0;i<n;i++)
  {
  for(j=0;j<1000;j++)
      asm("nop");
  }
}


void USART_Transmit(unsigned char data)
{
 while(!(UCSRA&(1<<UDRE)));
 //PORTD=0x00;
 UDR=data;
}

void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB=0xFF;  //与下一句同时起作用
 //SFIOR&=~BIT(2); //置SFIOR的PDU上拉电阻有效。与上一句一起生效。
 SFIOR&=~BIT(2); //置SFIOR的PDU上拉电阻有效。与上一句一起生效。
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 //PORTD = 0x80;
// DDRD  = 0x80;
 PORTD=0xc0;  //与下一句同时起作用
 //SFIOR&=~BIT(2); //置SFIOR的PDU上拉电阻有效。与上一句一起生效。
 SFIOR&=~BIT(2); //置SFIOR的PDU上拉电阻有效。与上一句一起生效

⌨️ 快捷键说明

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