AVR双CPU异步通信程序实现

需积分: 16 4 下载量 169 浏览量 更新于2024-11-29 1 收藏 30KB DOC 举报
"这是一个基于AVR单片机的双CPU通信程序,使用了AT90S2313作为核心处理器,实现了类似于UART的异步通信方式。硬件配置中,两个CPU的PD.2引脚通过上拉电阻相连,工作在4.0MHz的时钟频率下。程序由Lindong设计,日期为2008年8月8日。" 在该程序中,主要涉及以下几个关键知识点: 1. **AVR单片机**:AVR是Atmel公司(现已被Microchip Technology收购)开发的一系列高性能、低功耗的微控制器,AT90S2313是其中的一款,具有8KB的闪存、128字节SRAM和1KB的EEPROM,以及内置的UART(通用异步收发传输器)等通信接口。 2. **双(多)机通信**:本程序设计用于两个或多个单片机之间的通信,通过PD.2引脚的电平变化实现数据交换。这种通信模式常见于分布式系统、传感器网络或者嵌入式系统中,可以实现数据共享和协调操作。 3. **UART通信**:UART是一种串行通信接口,采用异步传输方式,不需要同步时钟信号,而是通过起始位、数据位、奇偶校验位和停止位来确定数据帧的边界。在这个程序中,虽然不是直接使用UART硬件模块,但模仿了其工作原理进行设计。 4. **中断系统**:程序利用了INT0中断,当INT0引脚检测到下降沿时,会触发中断服务函数。中断服务函数INT0_isr未在给出的部分中定义,但在中断向量表中预留了位置。中断使能和INT0下降沿有效设置确保了中断的正确响应。 5. **端口配置**:通过`.equ`指令定义了与PD.2相关的寄存器,如`PORTD`、`PIND`和`DDRD`,并使用`cbi`和`sbi`指令设置端口的方向和状态,使得PD.2作为输出引脚。 6. **堆栈指针设置**:在程序入口`main`之前,首先设置了堆栈指针`SP`,确保程序运行时有正确的堆栈空间。 7. **程序流程**:在`main`函数中,定义了一个无限循环,调用`sendbyte`函数发送测试数据,然后再次进入循环。`sendbyte`函数可能负责编码和发送单个字节的数据,但由于代码不完整,这部分功能的具体实现无法得知。 8. **延时函数`Delay`**:提供了us级别的精确延时,用于实现定时操作或同步。延时函数通过递减计数器`R16`并配合`nop`指令(空操作)来实现微秒级别的延迟,适用于简单的时间控制。 这个程序展示了如何在没有硬件UART支持的情况下,通过软件模拟实现串行通信,对于理解单片机的串行通信机制和中断处理有很好的学习价值。不过,实际应用中,可能需要根据具体需求和硬件条件对程序进行相应的修改和完善。