《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

CPLD与51单片机总线接口
程序匠人 发表于 2005-12-10 13:14:00  阅读全文 | 回复(1) | 引用通告 | 编辑

前段时间做的CPLD与51单片机总线接口(转载)
cpchen79 发表于 2005-12-3 13:56:00 
前段时间做的CPLD与51单片机总线接口

`timescale 1ns/1ns
module IO_KZ(Data,P27,WR,RD,ALE,CLR,OUTKEY,OUT30,CS,CS1,LEDCS,OC);
 inout  [7:0]Data;
 input  WR;
 input  P27;
 input  RD;
 input  ALE;
 input  CLR;
 input  OC;
 input  [4:0]OUTKEY;
 output [59:0]OUT30;
 output [1:0]CS;
 output CS1;
 output [14:0]LEDCS;
 reg    [14:0]LEDCS;
 reg    [59:0]OUT30;
 reg   [1:0]CS;
 wire   CS1;
 //wire  [7:0]Data;
 reg    [8:0]IOADD;
 reg    [15:0]DataBF;
 reg    wr_en;
 reg    [7:0]OUTKEYBF;
 //wire    [7:0]OUTKEYBF1;
assign  CS1=((IOADD==338)&&(OC==0))?1'b0:1'b1;//8052
assign  Data=((IOADD==277)&&(OC==0)&&(RD==0))?OUTKEYBF:8'bzzzzzzz;//8015
always  @(OUTKEY)        
         begin
         if(OUTKEY[0]==0)
         OUTKEYBF<=1;       
         else if(OUTKEY[1]==0)
         OUTKEYBF<=2;
         else if(OUTKEY[2]==0)
         OUTKEYBF<=3;
         else if(OUTKEY[3]==0)
         OUTKEYBF<=4;
         else if(OUTKEY[4]==0)
         OUTKEYBF<=5;
         else
          OUTKEYBF<=0;
         end
always  @(negedge ALE)
           begin
           IOADD<={P27,Data};//ALE下降延读地址
           end
always  @(IOADD  or WR) //WR下降延写数据
          begin
          if((IOADD>256)&&(IOADD<337)&&(IOADD!=277))wr_en<=WR;
          else
           begin
          wr_en<=1;
           end
          end
always  @(negedge wr_en or posedge OC or posedge WR) //WR下降延写数据
      begin
       if(OC)
          begin
                          CS=2'b00;                                             
     LEDCS=15'b00000_0000_0000_00;
          end
       else if(WR)
                        begin
                          CS=2'b00;                                                 
          end     
       else
                        begin
                         case(IOADD)
                         261:  begin CS=2'b01; end//8005                       
                         262:  begin CS=2'b10;LEDCS=15'b00000_0000_0000_01;end//8006
                         263:  begin CS=2'b10;LEDCS=15'b00000_0000_0000_10;end//8007
                  264:  begin CS=2'b10;LEDCS=15'b00000_0000_0001_00;end//8008
                  265:  begin CS=2'b10;LEDCS=15'b00000_0000_0010_00;end//8009
                  266:  begin CS=2'b10;LEDCS=15'b00000_0000_0100_00;end//800A
                  267:  begin CS=2'b10;LEDCS=15'b00000_0000_1000_00;end//800B
                  268:  begin CS=2'b10;LEDCS=15'b00000_0001_0000_00;end//800C
                  269:  begin CS=2'b10;LEDCS=15'b00000_0010_0000_00;end//800D
                  270:  begin CS=2'b10;LEDCS=15'b00000_0100_0000_00;end//800E
                  271:  begin CS=2'b10;LEDCS=15'b00000_1000_0000_00;end//800F
                  272:  begin CS=2'b10;LEDCS=15'b00001_0000_0000_00;end//8010
                  273:  begin CS=2'b10;LEDCS=15'b00010_0000_0000_00;end//8011
                  274:  begin CS=2'b10;LEDCS=15'b00100_0000_0000_00;end//8012
                  275:  begin CS=2'b10;LEDCS=15'b01000_0000_0000_00;end//8013
                         276:  begin CS=2'b10;LEDCS=15'b10000_0000_0000_00;end//8014
                        endcase
                       end
     
      end 
     
    
always  @(negedge wr_en or posedge CLR or posedge OC ) //WR下降延写数据
      begin
            if(OC)
          begin                                              
     DataBF=0;
     OUT30[59:0]=60'hfffffffffffffff; 
          end
            else if(CLR)           
          begin
                         
     DataBF=0;
     OUT30[59:0]=60'hfffffffffffffff;
          end               
     else
          begin                                 
            if(Data[0])
      DataBF[1:0]=2'b10;
     else
      DataBF[1:0]=2'b01;                                           
                   if(Data[1])
                                  DataBF[3:2]=2'b10;
     else
      DataBF[3:2]=2'b01;                    
                   if(Data[2])
                                  DataBF[5:4]=2'b10;
     else
      DataBF[5:4]=2'b01;                            
                   if(Data[3])
                                  DataBF[7:6]=2'b10;
     else
      DataBF[7:6]=2'b01;
            if(Data[4])
                                  DataBF[9:8]=2'b10;
     else
      DataBF[9:8]=2'b01; 
            if(Data[5])
                                  DataBF[11:10]=2'b10;
     else
      DataBF[11:10]=2'b01; 
            if(Data[6])
                                  DataBF[13:12]=2'b10;
     else
      DataBF[13:12]=2'b01; 
            if(Data[7])
                                  DataBF[15:14]=2'b10;
     else
      DataBF[15:14]=2'b01; 
                
                         case(IOADD)
                  257:  begin OUT30[15:0] =DataBF;end//8001
                         258:  begin OUT30[31:16]=DataBF;end//8002                 
                         259:  begin OUT30[47:32]=DataBF;end//8003
                  260:  begin OUT30[59:48]=DataBF;end//8004
                          endcase
                          case(IOADD)
                         278:  begin OUT30[1:0]=2'b10;end//8016
                         279:  begin OUT30[1:0]=2'b01;end//8017
                         280:  begin OUT30[3:2]=2'b10;end//8018
                         281:  begin OUT30[3:2]=2'b01;end//8019
                         282:  begin OUT30[5:4]=2'b10;end//801A
                         283:  begin OUT30[5:4]=2'b01;end//801B
                         284:  begin OUT30[7:6]=2'b10;end//801C
                         285:  begin OUT30[7:6]=2'b01;end//801D
                         286:  begin OUT30[9:8]=2'b10;end//801E
                         287:  begin OUT30[9:8]=2'b01;end//802F
                          endcase
                          case(IOADD)
                         288:  begin OUT30[11:10]=2'b10;end//8020
                         289:  begin OUT30[11:10]=2'b01;end//8021
                         290:  begin OUT30[13:12]=2'b10;end//8022
                         291:  begin OUT30[13:12]=2'b01;end//8023
                         292:  begin OUT30[15:14]=2'b10;end//8024
                         293:  begin OUT30[15:14]=2'b01;end//8025
                         294:  begin OUT30[17:16]=2'b10;end//8026
                         295:  begin OUT30[17:16]=2'b01;end//8027
                         296:  begin OUT30[19:18]=2'b10;end//8028
                         297:  begin OUT30[19:18]=2'b01;end//8029
                           endcase
                           case(IOADD)
                         298:  begin OUT30[21:20]=2'b10;end//802A
                         299:  begin OUT30[21:20]=2'b01;end//802B
                         300:  begin OUT30[23:22]=2'b10;end//802C
                         301:  begin OUT30[23:22]=2'b01;end//802D
                         302:  begin OUT30[25:24]=2'b10;end//802E
                         303:  begin OUT30[25:24]=2'b01;end//802F
                         304:  begin OUT30[27:26]=2'b10;end//8030
                         305:  begin OUT30[27:26]=2'b01;end//8031
                         306:  begin OUT30[29:28]=2'b10;end//8032
                         307:  begin OUT30[29:28]=2'b01;end//8033
                           endcase
                           case(IOADD)
                         308:  begin OUT30[31:30]=2'b10;end//8034
                         309:  begin OUT30[31:30]=2'b01;end//8035
                         310:  begin OUT30[33:32]=2'b10;end//8036
                         311:  begin OUT30[33:32]=2'b01;end//8037
                         312:  begin OUT30[35:34]=2'b10;end//8038
                         313:  begin OUT30[35:34]=2'b01;end//8039
                         314:  begin OUT30[37:36]=2'b10;end//803A
                         315:  begin OUT30[37:36]=2'b01;end//803B
                         316:  begin OUT30[39:38]=2'b10;end//803C
                         317:  begin OUT30[39:38]=2'b01;end//803D
                            endcase
                            case(IOADD)
                         318:  begin OUT30[41:40]=2'b10;end//803E
                         319:  begin OUT30[41:40]=2'b01;end//803F
                         320:  begin OUT30[43:42]=2'b10;end//8040
                         321:  begin OUT30[43:42]=2'b01;end//8041
                         322:  begin OUT30[45:44]=2'b10;end//8042
                         323:  begin OUT30[45:44]=2'b01;end//8043
                         324:  begin OUT30[47:46]=2'b10;end//8044
                         325:  begin OUT30[47:46]=2'b01;end//8045
                         326:  begin OUT30[49:48]=2'b10;end//8046
                         327:  begin OUT30[49:48]=2'b01;end//8047
                           endcase
                           case(IOADD)
                         328:  begin OUT30[51:50]=2'b10;end//8048
                         329:  begin OUT30[51:50]=2'b01;end//8049
                         330:  begin OUT30[53:52]=2'b10;end//804A
                         331:  begin OUT30[53:52]=2'b01;end//804B
                         332:  begin OUT30[55:54]=2'b10;end//804C
                         333:  begin OUT30[55:54]=2'b01;end//804D
                         334:  begin OUT30[57:56]=2'b10;end//804E
                         335:  begin OUT30[57:56]=2'b01;end//804F
                         336:  begin OUT30[59:58]=2'b10;end//8050
                         337:  begin OUT30[59:58]=2'b01;end//8051
                         endcase
                         end
               
     end    
endmodule
 
 
 

看《匠人手记》,与匠人同行!北航出版,正在热卖!

Re:CPLD与51单片机总线接口
jackforwar发表评论于2006-12-5 20:17:00  个人主页 | 引用 | 返回 | 删除 | 回复

jackforwar我把CPLD单片机的外部数据RAM,总线方式读取CPLD送出的16位数据,我实现不了,能不能帮我看一下电路和程序?跪谢!

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!