Atmega128串口485通信

合集下载

ATmega128的外部并行接口器件扩展应用

ATmega128的外部并行接口器件扩展应用

ATmega128的外部并行接口器件扩展应用ATmega128片内的RAM有4K字节,这在8位单片机中算佼佼者。

因此,设计一般的应用系统,应尽量不采用外部扩展并行器件的设计。

这样不仅方便PCB板的设计,减少PCB板的面积,同时也提高了系统的抗干扰性。

对于必须采用外部并行器件扩展的设计,ATmega128的PORTA(低8位地址线和8位数据线复用)、PORAC(高8位地址线)口提供了并行扩展接口。

尽管并行接口的基本使用原理同一般的单片机相同,但由于ATmega128的结构上的特点,以及其使用了增强型的并行接口,因此在使用并行扩展接口时还需要仔细的设计。

其主要特性有:*外部并行扩展的地址从0x1100开始;*使用外部并行扩展时,应将MCUCR寄存器中的SRE位置“1”,允许外部并行扩展;*可将PORTC口高位不用的地址线释放,作为普通的I/O口使用;*可设置对不同区域采用不同的读写操作时序(加等待),用于配合扩展使用不同时序操作的外部并行器件。

5.5.1 外部扩展RAM存储器的设计下图给出一个外部扩展32K的RAM(6264)的译码参考电路。

图中使用了一片74HC138和与门,与门的输出作为6264的片选信号,其地址空间为0x0000 –0x8FFF。

74HC138其它7个引脚输出用于在地址大于0x9000以上空间扩展其它更多的并行接口器件,每根线选通的地址空间为4K。

由于ATmega128的RAM空间前4352个字节分配给芯片内部的通用寄存器、I/O寄存器和4K 字节的内部SRAM,所以外部并行扩展器件的起始地址是从0x1100开始的(见第二章内容)。

当MCU在对0X0000-0X10FF范围的SRAM地址空间操作时,实际是对芯片内部的SRAM或寄存器操作,尽管会影响地址总线、数据总线和ALE,但此时和不受影响,因此对相应的处在这段地址范围的外部扩展的存储器没有影响。

在图5.6的设计中,实际上已经把6264中地址范围在0x0000-0x0FFF的一段存储单元“移”到ATmega128的RAM地址空间高端0x8000-0x8FFF处。

ATMEGA128实验开发板用户手册

ATMEGA128实验开发板用户手册

ATMEGA128实验开发板用户手册V1.32011年5月E-mail: sdfdlut@1. ATMEGA128单片机概述ATMEGA128单片机是ATMEL公司推出的一款基于AVR内核,采用RISC结构,低功耗CMOS的8位单片机。

由于在一个周期内执行一条指令,ATMEGA128可以达到接近1MIPS/MHz的性能。

其内核将32个工作寄存器和丰富的指令集联结在一起,所有的工作寄存器都与ALU(逻辑单元)直接连接,实现了在一个时钟周期内执行一条指令可以同时访问两个独立的寄存器。

这种结构提高了代码效率,是AVR的运行速度比普通的CISC单片机高出10倍。

ATMEGA128单片机具有以下特点:128KB的可在系统编程/应用编程(ISP/IAP)Flash 程序存储器,4KB E2PROM,4KB SRAM,32个通用工作寄存器,53个通用I/O口,实时时钟计数器(RTC),4个带有比较模式灵活的定时器/计数器,2个可编程的USART接口,一个8为面向字节的TWI(I2C)总线接口,8通道单端或差分输入的10位ADC(其中一个差分通道为增益可调),可编程带内部振荡器的看门狗定时器,一个SPI接口,一个兼容IEEE 1149.1标准的JTAG接口(用于在线仿真调试和程序下载),6种可通过软件选择的节电模式。

2. ATMEGA128实验开发套件本实验开发套件包括:●测试通过的MEGA128实验板1块;●配套资料光盘1张;●AVR ISP并口下载线1条;●5110液晶模块1个;●遥控器1个;●USB ASP下载线(选配);●AVR JTAGICE仿真器(选配)。

其中资料光盘的内容主要包括:●ATMEGA128实验开发板用户手册.pdf(本文档);●AVR教程:⏹WINAVR 使用入门.pdf⏹AVR Studio 使用入门.pdf⏹AVR基本硬件线路设计与分析.pdf⏹芯艺的AVR_GCC教程.pdf⏹AVR的IO结构分析与范例.mht⏹AVR高速嵌入式单片机原理与应用●芯片手册(包括24C02、74HC595以及中文的I2C协议文档等内容)●开发工具软件;⏹AVR Studio V4.12;⏹WINAVR(GCC) 编译器;⏹IAR for AVR V4.10A;⏹并口下载工具PONYPROG V2.06;⏹ICCAVR 双龙提供;图3 新建工程对话框点击Next,进入第三步。

Atmega128开发板使用说明书

Atmega128开发板使用说明书

Atmega128开发板使用说明书概要介绍Atmega128开发板上硬件资源丰富,接口齐全,基本上涵盖了Atmega128单片机所能涉及到的所有功能,可以满足单片机开发工程师和电子爱好者的开发实验的需求,或者高校电子、计算机专业学生的学习实验的需要。

按照正规产品的要求设计,不纯粹是实验样品,器件选型、原理图、PCB设计的时候都充分考虑了可靠稳定性。

Atmega128的IO口资源丰富,板上所以接口都是独立使用的,不需要任何跳线进行设置, IO口外围扩展使用了2片锁存器74HC574,既可以使实验变得更加简单方便,又能让实验者掌握更多的单片机设计知识。

提供配套软件源代码,学习板的每个实验都有与其相对应的软件代码,是版主从多年的工作经验中提取出来的,并经过优化,具有较高的参考价值。

编程简单,学习板编程不需要专用烧录器,利用计算机的并口即可进行编程,速度快、操作简单。

1.产品清单Atmega128开发板的配件清单如下,当您第一次拿到产品的时候,请参照下图认真核对包装内配件是否齐全,以及各配件是否完好无损。

请按照下图安装122*32 LCD,lCD的一脚对准122*32 LCD插座的一脚,切记不要插反2.硬件布局说明步进电机接口直流电机接口数字温度传感器SD卡插座光敏电阻ADC输入电位器NTC热敏电阻JTAG接口继电器接口9V电源输入接口DAC输出接口RS485接口RS232接口红外发射管ISP编程接口LCD对比度调节电位器122 * 32点阵LCD接口16 * 2字符LCD接口红外接收管433M射频模块接口3 *4 矩阵键盘3.接口说明接口管脚顺序的确认方法●对于有卡口的接口,应对着卡口的方向看,最左边为第一个管脚,如下图所示:●对于用螺丝压线的接口,应对着入线的方向看,最左边为第一个管脚,如下图所示:特别提示:ISP下载接口与JTAG接口封装相同,下载程序时使用ISP接口,不要插到JTAG 接口上4.硬件开发环境的建立本站出售的AVR单片机学习板就是一套完整的硬件环境,它由学习板、电源、并口ISP 下载线等组成。

Atmel ATmegaS128 微控制器商品说明书

Atmel ATmegaS128 微控制器商品说明书

The new Atmel ® AVR ® ATmegaS128 microcontroller (MCU) brings the industry-leading AVR core to the aerospace industry. The ATmegaS128 MCU is designed for enhanced radiation performance and increased reliability in space applications. It takes advantage of mature Atmel AVR tools designed and used in the mass market worldwide for many years. The ATmegaS128 microcontroller targets many of the most common space applications, which typically require a small footprint, low power and analog control of motors and sensors.Key FeaturesHigh-performance, Low-power 8-bit Atmel AVR MCU• Advanced RISC architecture / Up to 8MIPS• On-chip 2-cycle multiplier• 3V-3.6V / 0 - 8MHz operating voltages & speed grades High-endurance Non-volatile Memory • 128 Kbytes of Flash program memory• 4 Kbytes EEPROM – 4 Kbytes internal SRAM1Advance Risc Architecture 8 Mips3.0 3-55 • Up to 64 Kbytes optionalexternal memory space • SPI interface for in-system programmingPeripheral Features • Two 8-bit and two 16-bit timers/counters • 6 PWM channels • 8-channel, 10-bit ADC• TWI/USARTs/SPI serial interface • Programmable watchdog timer • On-chip analog comparator Special Microcontroller Features• Power-on reset and programmable brown-out detection• Internal calibrated RC oscillator • External and internal interrupt sources• Six Sleep modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended StandbyKey Highlights for Space Environment• Full wafer lot traceability • 64-lead ceramic package (CQFP) • Space screening • Space qualification• Total ionizing Dose: up to 30 Krad (Si)• Single event latch-up LET > 62.5MeV.cm²/mg• Single event upset LET > 3 MeV.cm²/mg•SEU 10-3 to 10-1 error/ device/dayATmegaS128 Starter kitTo ease your design process and reduce time-to-market, Atmel delivers a complete starter kit STK600 and development system for the ATmegaS128 AVR microcontroller. With its advanced features for proto-typing and testing new designs, the kit gives designers a head start for developing code on AVR devices. Customers can start with the industrial version using the ATmega128 MCU or the Space Version ATme-gaS128 device as both share the same pinout.Atmel Corporation 1600 Technology Drive, San Jose, CA 95110 USA T : (+1)(408) 441. 0311 F : (+1)(408) 436. 4200 | © 2015 Atmel Corporation. / Rev.: Atmel-45160A-ATmegaS128-Aerospace-Rad-Tolerant-Flyer_E_US_102015Atmel,® Atmel logo and combinations thereof, Enabling Unlimited Possibilities,® and others are registered trademarks or trademarks of Atmel Corporation in U. S. and other countries. Other terms and product names may be trademarks of others.Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RE-LATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.Atmel StudioAtmel Studio is the integrated development platform (IDP) for developing and debugging Atmel AVR and Atmel | SMART ARM ® processor-based MCU applications. The Atmel Studio IDP gives you a seamless and easy-to-use environment to write, build and debug your applications written in C/C++ or assembly code. Atmel Studio supports all 8- and 32-bit AVR MCUs. It also connects seamlessly to Atmel debuggers and development kits.Atmel Software FrameworkThe Atmel Software Framework (ASF) is an MCU software library providing a 1,600 project examples of embedded software for Atmel Flash-based MCUs, including AVR and Atmel | SMART devices. This library contains basic C code examples for all ATmegaS128 peripherals.Application NotesIn addition to the Atmel Software framework, Atmel provides a broad range of application notes to implement different peripherals of the ATmegaS128 device. Most of those ap-plication notes are provided with source code in C language.。

ATmega128简介

ATmega128简介

◦ ◦ ◦
2.2、产品特点 5)特殊微控制器特性

复位、中断源、省电模式等 53个可编程I/O口线 64引脚TQFP与64引脚MLF封装 2.7~5.5V(ATmega128L) 4.5~5.5V(ATmega128) 0~8MHZ(ATmega128L) 0~16MHZ(ATmega128)
6)I/O和封装

中档(标准) AT90S系列单片机,40脚 ◦ AT90S1200/2313/8515/8535 ◦ AT89C51 高档ATmega系列单片机 64脚 ◦ ATmega8/16/32/64/128 ◦ 存储容量为8/16/32/64/128KB ◦ ATmega8515/8535

2、ATmega128单片机简介
MCUCR寄存器如下所示:
ATmega128单片机结构框图
端口F驱动
端口F 数据寄存器 端口F方向 数据寄存器
端口A驱动
端口A 数据寄存器 端口A方向 数据寄存器
端口C驱动
端口C 数据寄存器 端口C方向 数据寄存器
内部晶振 晶振 JTAG接口 编程计数器 堆栈指针 晶振 时序控制
在线调试
编程Flash
◦ 电路:自动上电复位、看门狗、掉电检测, ◦ 多个复位源等
8)具有多种省电休眠模式、宽电压运行 (2.7~5V),抗干扰能力强,可降低一般8位机 中的软件抗干扰设计的工作量和硬件的使用量。 9)集成多种器件和多种功能,充分体现了单片机 技术向片上系统SOC的发展方向过渡。
1.2 、AVR系列单片机的选型 AVR单片机有3个档次: 低档Tiny系列单片机, 20脚 ◦ Tiny 11/12/13/15/26/28 ◦ AT89C1051,AT89C1052

atmega128实用双串口通讯

atmega128实用双串口通讯

}
tx_data[21] =data;
led_2_0();
//----------------数据校验、处理部分
if( (tx_data[0]==0xfe) && (tx_data[21]==0x16) )

//--------------------------略 }
} //--------uart 1----RX-----中断方式- 同上---------------------ISR(USART1_RX_vect) {
unsigned char status,data; status=UCSR1A; data=UDR1; unsigned char f; //----status &= ~(FRAMING_ERROR1 | PARITY_ERROR1 | DATA_OVERRUN1); //----f=data;
//---------------------------------------------
#define
led_1_1() (PORTE |= bit(3))//--1
#define #define #define #define #define #define #define #define #define
Atmega128 实用串口通讯程序
1、 双串口异步通讯, USART0——发送使能,接收使能 、2400bps/8 位/偶校验/1 停止位
USART1——发送使能、9600bps/8 位/无校验/1 停止位
2、 外围 5 个 LED 指示 共阳极, PE3~PE7
#include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/interrupt.h> #include <avr/wdt.h>

AVR ATmega128全功能工业控制器设计文档说明书

AVR ATmega128全功能工业控制器设计文档说明书

AVR单片机的全功能工业控制器设计吴焕琅深圳市中天越华自动控制科技有限公司摘要:介绍一款工业级的实用全功能控制器。

该控制器能隔离采集多种输入信号,输出多种控制信号;具有实时时钟、历史数据存储功能,彩色液晶显示界面,带有触摸屏操作和远程通信接口。

核心部分CPU采用AVR ATmega128单片机。

目前已用于批量生产。

关键词:隔离采集控制单片机彩色显示485接口ATmega128DS1642引言在自动控制产品的设计过程中,实现方案的选择常常是很矛盾的。

使用可编程逻辑控制器(PLC)和人机界面(HMI)来实现,开发速度较快,但成本太高,所开发的产品没有市场竞争力;使用单片机开发,成本低但开发周期长、开发量大且通用性不好。

用户需要的是一种成本低、开发周期较短、通用性较好的控制器,因此全功能工业控制器有很大的应用市场。

全功能工业控制器的整个电路分为信号隔离输入部分、控制器输出部分、实时时钟与历史数据存储部分、彩色液晶显示和触摸屏控制部分、通信接口等。

1信号隔离输入电路信号隔离输入电路分为开关量隔离输入、模拟量隔离输入、高速电脉冲隔离输入,电路如图1所示,开关量的隔离输入较为简单,输入信号采用光耦进行隔离后送入单片的普通I/O,单片机用查询方式进行采集。

图1信号隔离输入电路高速电脉冲的采集需要注意的是,所设计的电路必须适应高速信号采集的要求,因此隔离光耦应采用高速光耦(如6N137等)。

采用查询方式采集高速脉冲容易造成采集数据的丢失,高速脉冲应采用中断方式进行采集。

模拟量隔离采集是本控制器的一个重点和难点,笔者之前采用了线性光耦等多种方式进行模拟量的隔离采集实验,均未获满意的效果。

这里采用一种先将模拟量数字化(使用AD7705),然后通过有光耦隔离的数据口送到CPU进行模拟量隔离采集的方式,效果理想。

2控制器输出电路控制器的输出方式有继电器输出、晶体管输出、模拟电压输出,如图2所示。

继电器输出和晶体管输出电路较为简单,这里不作详细的介绍。

基于ATmega128的工业酶生产数据采集器的通信设计

基于ATmega128的工业酶生产数据采集器的通信设计

基于ATmega128的工业酶生产数据采集器的通信设计牛睿;刘飞【摘要】随着生物工程规模化生产的发展,自动控制的理论和方法已经在生化工业中得到了很好的应用.以工业酶发酵数据采集器为课题,采集器以ATMEL公司的ATmega128为核心,简要介绍了工业酶发酵数据采集器的设计组成,重点介绍了利用ATmega128的USART接口完成数据采集器与上位机通信的实现方法.通信协议采用了已被广泛应用的Mod bus协议,最终实现了对工业酶发酵罐系统可靠的远程监控.【期刊名称】《现代电子技术》【年(卷),期】2008(031)013【总页数】4页(P128-131)【关键词】ATmega128;USART;Modbus;工业酶发酵【作者】牛睿;刘飞【作者单位】江南大学通信与控制工程学院,江苏无锡,214122;江南大学通信与控制工程学院,江苏无锡,214122【正文语种】中文【中图分类】TN9191 引言近年来,我国的生物工程技术发展迅速,酶发酵过程是生物工程研究成果转化为工业产品的重要环节。

发酵的过程都是一个微生物生长代谢的复杂过程,发酵系统都体现出多参数、非线性、强耦合的特征。

因此对发酵过程可靠的数据采集是对生物发酵系统进行分析的前提和基础。

ATMEL公司的AVR单片机,是一种高性能低功耗的8位单片机。

由于优越的性价比,目前已广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。

本文简要介绍了以AVR的ATmega128为MCU设计开发的工业酶发酵数据采集器,并详细说明了基于ATmega128的工业酶发酵数据采集器与上位机进行通信的一种实现方法。

2 数据采集器的总体要求及功能设计(1) 输入:采集器主要对生物酶发酵环境的PH值、溶氧量、发酵温度、进入发酵罐的空气流量、是否有泡沫等数据进行采集。

需要采集的数据在进入单片机采集器之前,已经通过专用的前置测量变送模块变换成了0~5 V的标准电压量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{软件环境:ICC AVR 6.31A硬件平台:atmega128a实现UART0的半双工485通信,中断方式接受,查询方式发送。

485的收发控制引脚为PE2。

供大家学习交流使用}1,以下是delay.h文件#ifndef _delay_h_#define _delay_h_//void delay_nus(unsigned int n);//void delay_nms(unsigned int n);//void delay_1us(void);//void delay_1ms(void);void delay_1us(void) //1us延时函数{NOP();}void delay_nus(unsigned int n) //N us延时函数{unsigned int i=0;for (i=0;i<n;i++) delay_1us();}void delay_1ms(void) //1ms延时函数{unsigned int i;for (i=0;i<1140;i++) ;}void delay_nms(unsigned int n) //N ms延时函数{unsigned int i=0;for (i=0;i<n;i++) delay_1ms();}#endif/***********2,以下是uart.h头文件/***********uart.h使用端口:uart0及控制端口PE2; uart1及控制端口PD4晶振:11.0592M查询方式发送,中断接收。

*************************************************/#ifndef _uart_h#define _uart_h#include <iom128v.h>#include <macros.h>#include "delay.h"#define fosc 11059200#define baud 9600#define uchar unsigned char//#define amount 8 //data amount//uchar inbox[amount]; //transmited and received data buff.//uchar buff = 0;//unsigned char inbox[10];/****uart0 initialize************/void Uart0_initial(void){UCSR0B = 0x00;// disable while setting uartUCSR0A = 0x00;UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);// 8bit +1bit stopUBRR0L = (fosc/16/(baud+1))%256;//此公式为datasheet上,是正确的// UBRR0H = (fosc/16/(baud+1))/256;//网上例程很多用baud+1,经试验不行// UCSR0B = (1<<RXCIE0)|(1<<RXEN0) | (1<<TXEN0); //RXCIE0 RXEN TXEN PORTE |=BIT(PE2);// Set PE2,DDRE |= BIT(PE2); // RXD0 enable.}/**uart1 initialize**************/void Uart1_initial(void){UCSR1B = 0x00;//disable while setting uartUCSR1A = 0x00;UCSR1C = (1<<UCSZ11) | (1<<UCSZ10);//8bit + 1 stopUBRR1L = (fosc/16/baud-1)%256;UBRR1H = (fosc/16/baud-1)/256;UCSR1B = (1<<RXCIE1) | (1<<RXEN1) | (1<<TXEN1);// RXCIE RXEN TXEN PORTD |= BIT(PD4); //Set PD4DDRD |= BIT(PD4); //RXD1 enable.}/***uart0 transfer one char****/void putchar0(uchar c){PORTE &=~ BIT(PE2);delay_nms(5);while (!(UCSR0A&(1<<UDRE0)));UDR0 = c;delay_nms(5);//PORTE |= BIT(PE2);}/***uart0 transfer char strings***/void puts0(uchar *s){uchar k=0;CLI();//PORTE &=~ BIT(PE2);delay_nms(5);while (k<8){putchar0(*s);s++;k++;}PORTE |= BIT(PE2);delay_nms(3);SEI();}/****uart1 transfer one char **/void putchar1(unsigned char c){CLI();PORTD &=~ BIT(PD4);while (!(UCSR1A&(1<<UDRE1)));UDR1 = c;SEI();//PORTD |= BIT(PD4); //set as RX after TX. }/***uart1 transfer char strings**/void puts1(uchar *s){while (*s){putchar1(*s);}}/***uart0 RXD interrupt processing****//**************************************#pragma interrupt_handler uart0_RX_interrupt:19void uart0_RX_interrupt(void){//UCSR0B = 0x00; //disable uart0 while handling interrupt.buff = UDR0;PORTE &=~ BIT(PE2);delay_nms(3); //收转发设置控制引脚后,要延时,换高频晶振需加大此延时。

putchar0(buff);puts0("Test OK!");delay_nms(3);PORTE |= BIT(PE2);//UCSR0B = (1<<RXCIE0)|(1<<RXEN0) | (1<<TXEN0); //RXCIE0 RXEN TXEN }**************************************/#endif/********3,以下是CRC8校验头文件******************//*crc8校验程序*/#ifndef _CRC8_H_#define _CRC8_H_/*******************************************************unsigned char CRC8(unsigned char *ptr, unsigned char len){unsigned char i;unsigned char crc = 0;while(len--!=0){for(i=1; i!=0; i*=2){if((crc&1)!=0) {crc/=2; crc^=0x8C;}else crc/=2;if((*ptr&i)!=0) crc^=0x8C;}ptr++;WDR();}return(crc);}*******************************************************/ unsigned char CRC8(unsigned char *ptr, unsigned char len){if(len == 7)return (0xAA);}#endif/*********4,以下是主程序**************/#include <iom128v.h>#include <macros.h>#include "delay.h"#include "CRC8.h"#include "uart.h"#define uchar unsigned char#define amount 8uchar inbox[amount]; //收件箱uchar sendbox[amount]; //发件箱uchar buf_used = 0; //接收的数据个数uchar buf_flag = 0; //接收缓冲区满标志位uchar buf_saved = 0; //记忆收发缓存中未使用的个数uchar fun_code = 0; //存放功能代码uchar action_code = 0; //存放功能数据uchar key = 0;uchar key_code = 0;uchar relay_status = 0; //继电器状态uchar key_buf = 0x1F; //存储开关量的值uchar used_times = 0; //记录使用状况void Device_initial(void){//初始化各IO端口和设备PORTC |= 0x3F;DDRA |= 0xFF; //PORTA全部用于1602DDRB |= 0xF6; //PORTB比较混乱,具体参考电路图DDRC |= 0x3F; //PORTC.0 - PORTC.5为电源组件反馈端信号输入端DDRD |= 0x00;//PORTE |= 0xFC; //PE = 1111 1100 =0xFC PORTD待定DDRE |= 0x06; //DDRE = 0000 0110=0x06SEI(); //PORTE.0为RXD0,PORTE.1为TXD0,PORTE.2为485(0号)控制端;PORTE3~7为继电器控制端口// watchdog_INI();}#pragma interrupt_handler uart0_RX_interrupt:19void uart0_RX_interrupt(void) //中断方式接受函数{inbox[buf_used] = UDR0;if(inbox[0] == 0x0A)buf_used+=1;if(buf_used == 8){buf_flag = 1;buf_used = 0;}}void TX(uchar a,uchar b) //查询方式发送函数{sendbox[0] = 0x0A;sendbox[1] = 0xFF;sendbox[2] = 0x0A;sendbox[3] = 0x07;sendbox[4] = a;sendbox[5] = b;sendbox[6] = 0x0D;sendbox[7] = CRC8(sendbox,amount-1);puts0(sendbox);//WDR();}void Key_scan(void){key_code = PINE;key = key_code>>3;if(key!= key_buf){delay_nms(15); //消抖if(key != key_buf)//开关量与上次不同,则上发开关量状态到ARM {key_buf = key;while(1){while(buf_flag == 0){TX('N',key);delay_nms(300);}CLI(); //禁止接收//buf_used = 0;buf_flag =0;inbox[0] = 0;if(inbox[7] == CRC8(inbox,amount-1)){if(inbox[4] == 'A'&&inbox[5] == 'R') //应答正确。

相关文档
最新文档