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

📄 uart.c

📁 LTC2449 AD转换 LTC2449 AD转换 LTC2449 AD转换
💻 C
字号:
#include <iom169v.h>
#include <macros.h>
#include <stdio.h>
#include "main.h"
#include "uart.h"

unsigned char relay_temp[7];
unsigned char *load;
//UART0 initialize
// desired baud rate: 19200
// actual: baud rate:19200 (0.0%)
void uart0_init(void)
{
 UCSR0B = 0x00; //disable while setting baud rate
 UCSR0A = 0x00;
 UCSR0C = 0x07;
 UBRR0L = 0x23; //set baud rate lo
 UBRR0H = 0x00; //set baud rate hi
 UCSR0B = 0x98;
}

void put_c(unsigned char c) //发送采用查询方式
{
	while( (UCSRA & 0b00100000)==0);
	//delay_loop(5);
	UDR=c;
}

void put_s(unsigned char *ptr)
{
	while (*ptr)
	{
		put_c(*ptr++);
	}
}


#pragma interrupt_handler uart0_rx_isr:14
void uart0_rx_isr(void)
{
	if (load_time > 3)
		{
			load_no = 0;
			load = &relay_temp[0];
		}
	load_time=0;
	if(load_no<5)
		{
			*(load+load_no) = UDR;
			load_no++;
		}
}
void load_init()
{
	load_time=0;
	load_no=0;
	load = &relay_temp[0];
}
void data_load_manage()
{
	unsigned char sum_c, t;	//和验算,循环次数
	unsigned char *p;
	if((load_no==5))	//下载完成条件
		{
			load_init();	//初始下载
			sum_c = 0;
			for (t=0; t<4; t++)	//和验算
				{
					sum_c += (*load);
					load++;
				}
			if (sum_c == (*load))
				{							//刷新继电器值
					load = &relay_temp[0];
					p = Down_load.Relay_out;
					for (t=0; t<5; t++)
						{
							*p = *load;
							p++;
							load++;
						}
					updating=1;
					load = &relay_temp[0];
				}
		}
 
	//长时间没收到上位机信号处理
	if (load_time>500)
		{
			load_init();
			relay_init();	//关闭全部继电器
		}
}

void data_send()
{
	unsigned char *send;	//发送数据用指针
	unsigned char l;			//发送12字节循环
	unsigned char sum_temp=0;//和效验
	send=&send_data.exterior_switch;
	for (l=0; l<17; l++)
		{
			sum_temp+=*send;
			put_c(*send);
			send++;
		}	
	put_c(sum_temp);
}

⌨️ 快捷键说明

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