AVR单片机读写CPLD

发布者:电子思维最新更新时间:2018-04-18 来源: eefocus关键字:AVR单片机  读写CPLD 手机看文章 扫描二维码
随时随地手机看文章

项目中需要使用CPLD完成一部分算法设计,参数由AVR给出,因此需要完成AVR和CPLD的通信。因此写了一个测试程序。CPLD挂在AVR的数据和地址总线上,AVR使用ATmega128,在CPLD中设置几个寄存器,通过AVR读写寄存器来实现两者之间的通信。

 

Mega128的外部存储空间从0X1100开始,因此只需要配置相应的寄存器后读取或者写入相应的地址就可以,程序比较简单,注释中都有说明,仅供参考。

 


  1. /******************************************************************* 

  2. 名称:mian.c 

  3. 功能:测试AVR与CPLD的通信,将数据写入CPLD中配置的寄存器,然后读出, 

  4.       通过串口输出做比较 

  5. 作者:emouse 

  6. 时间:2011.1.4 

  7. 版本:1.0 

  8. 注意:无 

  9. ********************************************************************/#include"avr/io.h"   

  10. #include"avr/interrupt.h"   

  11. #include"util/delay.h"  

  12.    

  13. #define SetBit(Port,N)  (Port|=(1<

  14. #define ClrBit(Port,N)  (Port&=~(1<

  15. #define ReverBit(Port,N)  (Port^=(1<

  16. #define GetBit(Pin,N)   ((Pin>>N)&0x01)   //读取IO某一位   

  17.     

  18. unsigned char data;  

  19. void XRAM_example(void)  

  20. {  

  21.     unsigned char *q =0x1100;   //寄存器1  

  22.     unsigned char *m =0x1101;   //寄存器2  

  23.     unsigned char *p =0x1102;   //寄存器3  

  24.     PORTD=0XFF;                

  25.     DDRD=0XFF;  

  26.     DDRC = 0xFF;                //默认情况下端口C用做高地址,可以每只寄存器把端口C释放  

  27.     PORTC = 0x00;  

  28.     *q= 0xCC;                   //向寄存器1中写入数据,CPLD中自动将寄存器1的值付给寄存器3  

  29.     data=*p;                    //独处寄存器3中的值,在循环中用串口输出  

  30. }  

  31. void USART0_Init(void)   

  32. {   

  33. UCSR0A=0x20; //波特率不加倍,单机通信模式   

  34. UCSR0B=0x18; //中断不使能,允许发送和接收   

  35. UCSR0C=0x06;//异步模式,无校验,8位数据,1位停止位   

  36. UBRR0H=0x00;   

  37. UBRR0L=51;//9600波特率   晶振8M  

  38. }   

  39. void USART0_SendByte(unsigned char data)   

  40. {   

  41. while(!(UCSR0A&(1<

  42. UDR0=data;    //发送数据   

  43. }    

  44. int main(void)   

  45. {      

  46.     unsigned char i=0;   

  47.     USART0_Init();  //初始化USART0接口     

  48.     MCUCR=0xC0;     //使能外部SRAM   

  49.     XMCRA=0x00;  

  50.     DDRA=0XFF;  

  51.     PORTA=0XFF;   

  52.     DDRE=0xff;   

  53.     DDRD=0xff;   

  54.     PORTD=0x00;      //使能 CS A16 A17 =11   

  55.     USART0_SendByte(0x88);  

  56.     

  57.     while(1)   

  58.     {        

  59.         ReverBit(PORTA,0);  

  60.         XRAM_example();  

  61.         _delay_ms(500);  

  62.         USART0_SendByte(data);   

  63.     }   

  64. }   



关键字:AVR单片机  读写CPLD 引用地址:AVR单片机读写CPLD

上一篇:AVR单片机设计中I/O口的使用注意事项
下一篇:IAR FOR AVR中精确软件延时方法

推荐阅读最新更新时间:2024-03-16 16:00

avr单片机proteus仿真第三课:单只数码管
数码管选7SEG-MPX1-CC,共阴极数码管。也就是低电平选通(最右脚),数码管左边8只管脚,从左到右,由低到高,分别接PC0---PC7。 c程序如下: #include avr/io.h #include util/delay.h #define int8u unsigned char #define int16u unsigned int const int8u seg_code ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int main() { int8u i=0; DDRC=0xff; while(1) { PORTC=seg_code ; i=(
[单片机]
<font color='red'>avr单片机</font>proteus仿真第三课:单只数码管
基于AVR单片机的多通道温湿度传感器检定系统
    随着地面自动气象站的投入业务使用,山东省的大监自动气象站和区域自动气象站已经建成1 500多个,使我省的业务水平大幅提高,随着业务量增加的同时,也给计量检定工作能力提出了新的要求。但近些年来温湿度传感器的检定很大程度上仍停留在人工检定阶段。这种检定方法耗时、检定效率低,因此迫切设计出一套自动检定温湿度传感器的系统,为了改善这种状况,在VC 6.0环境下使用MSComm通信控件和数据库技术,开发了自动站温湿度传感器数据采集及处理系统,实现8路温湿传感器的数据批量采集,用以提高温湿度传感器的检定效率和准确度。 1 系统的整体结构及功能描述     该设计以AVR单片机和高精度A/D转换芯片ADS1232为核心,能对温湿度传感器进
[嵌入式]
AVR单片机学习(六)中断与定时器
中断的概念 M16的外部中断 定时器的概念 M16的定时器 中断方式使用定时器 中断概念 一、在程序运行期间,发生非预期的紧急事件 1、通常是为了避免查询方式的程序设计(它低效因为一直查询,死循环一直不停查询) 2、用的最多的是外部中断与定时器中断(主要产生一些精确地延时,省去了CPU延时CPU延时就不能干其他事情了所以可以提高CPU效率) 3、外部中断:按键程序 4、定时器中断:定时与循环扫描应用场合 二、中断服务程序 1、中断发生时,主程序暂停,跳转到中断服务程序,称为 相应中断 2、执行完毕后返回主程序继续运行 一、M16具有3个外部中断 1、M16具有3个外部中断 2、INT0、INT1:
[单片机]
<font color='red'>AVR单片机</font>学习(六)中断与定时器
AVR单片机控制舵机
什么是舵机: 舵机如下所示: 有三根线,一般依次是地,电源(5V左右),信号(信号的幅值 =3.3V),不清楚各个脚打开舵机一测量就知道了。 2. 其工作原理是: 控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内
[单片机]
<font color='red'>AVR单片机</font>控制舵机
AVR单片机ATMEGA16编译软件ICCAVR的使用技巧与应用示例
一、先来一段朴实的独白吧 写这篇文的时间是2018年3月21日。大学2013毕业,专业是机械,但喜欢电子。篇首声明:哪一行都有鄙视链,就连打个游戏都不例外。如果大神路过这里,请您show your mercy然后walk away就当nothing happened. 当然,大牛都是很低调的,因为他们身心都沉进编程的世界里不能自拨。好了本文就ICCAVR的使用说明作一个入门式的引导,方便新、老网友作一种可供使用的参考。 上大学并不是为了纯读书,而是自我发现、反馈、然后决定的心理成熟过程,好吧这就是我的层次。上学时为了搞懂一个东西,在网上查找所有的有用的信息资料,当然必须免费的,唉不谈。。现在如果需要一些资源直接买买买,省时省力
[单片机]
<font color='red'>AVR单片机</font>ATMEGA16编译软件ICCAVR的使用技巧与应用示例
和大家分享一个AVR单片机学习经验
AVR 与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、 功能部件、性能和可靠性等多方面有很大的提高和改善。 但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还 采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR 的,甚至也不能 真正的了解AVR 的特点和长处。 功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1 赛 车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。 AVR 具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR 的优点,还需 要应用工程师本身的硬软件设计开发能力的不断学习、实践提
[单片机]
AVR单片机模拟的串口程序
在一些应用中 , 经常要用到双串口,但是一般单片机只提供一个串口,其实完全可以用普通I/O口模拟一个串口。以下的程序是我编写的模拟串口程序,程序中使用了单片机的定时器0,和INT0中断。数据的发送和接收由中断程序自动进行。程序已经过AVR仿真器仿真和实际烧片使用,证明可靠。有一点需要说明的是,此模拟的串口为半双工方式。 主程序中,单片机将标准串口设置为115200bps,将模拟串口设置为19200bps。单片机将标准串口收到的数据从模拟串口发送出去,将模拟串口接收到的数据从标准串口发送回来。 ;*****************************************************************
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved