<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)—8255A詳細(xì)介紹(全?。?4

          51單片機(jī)—8255A詳細(xì)介紹(全?。?4

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏


















          9、就是應(yīng)用了唄



          最后來(lái)個(gè)程序就哦了,里面帶有注釋~~
          //------------------------------------------------------------------------------
          //實(shí)現(xiàn)由8255的PA、PB、PC作為輸出口的可控流水燈的設(shè)計(jì),采用灌電流的方法
          //c語(yǔ)言部分
          #include"reg52.h"
          #include"delay.h"
          #include"macroandconst.h"
          #include"foot.h"
          //------------------------------------------------------------------------------
          uchar pdatain_reg; //定義片外存儲(chǔ)空間
          uchar temp,temp1; //用于寫(xiě)數(shù)據(jù)的臨時(shí)數(shù)值
          bit flag=1; //定義標(biāo)志位
          //------------------------------------------------------------------------------
          //定時(shí)器0初始化函數(shù)
          void timer0_init()
          {
          TMOD=0x02; //定時(shí)器0,8位自動(dòng)裝初值
          TH0=(256-50)/256; //50us定時(shí)
          TL0=TH0;
          ET0=1;
          TR0=1;
          IT1=0; //外部中斷1控制為電平觸發(fā)方式
          EX1=1; //外部中斷1中斷允許位
          EA=1;
          }
          //------------------------------------------------------------------------------
          //main
          void main()
          {
          uchar i;
          timer0_init();
          reset=0;
          reset=1; //復(fù)位
          reset=0;
          a0=1;
          a1=1;//選擇8255控制寄存器
          in_reg=0x82;//寫(xiě)入控制寄存器,PA、PC作為輸出口,PB口作為輸入口,并寫(xiě)入控制寄存器
          //這里可能不是很明白吧,呵呵,其實(shí)很簡(jiǎn)單,這個(gè)是51系列單片機(jī)的特有功能,反正我用AVR單片機(jī)沒(méi)用到過(guò)
          //,呵呵,相信都知道51系列單片機(jī)的PA口是個(gè)A/D口,那就對(duì)了,這里還省去了控制WR和RD了,而且還省去了
          //用上拉電阻,要是別的I/O口就得按照WR和RD的協(xié)議辦~~~ (從根本來(lái)說(shuō)就是單片機(jī)自己控制WR和RD,其實(shí)
          //這個(gè)東西用的最多的就是擴(kuò)展了~~~呵呵,不說(shuō)了,因?yàn)槲耶?dāng)時(shí)擴(kuò)展也給失敗了~~哭
          while(1)
          {
          a0=0;
          a1=0;//選中PA口的寄存器
          if(flag==0)//標(biāo)志位為0,流水燈從上向下循環(huán)
          {
          temp=0xfe;
          i=0;
          while(i<8)//循環(huán)移動(dòng)8位
          {
          in_reg=temp;
          temp=~temp;
          temp=temp<<1;
          temp=~temp;
          delay(100);
          i++;
          //if(flag!=0) //可以加或者不加,加上后就是從當(dāng)前亮的地方轉(zhuǎn)向開(kāi)頭或者結(jié)尾
          //break;
          }
          }
          else //標(biāo)志位為1,流水燈從上向下循環(huán)
          {
          temp=0x7f;
          i=0;
          while(i<8) //循環(huán)移動(dòng)8位
          {
          in_reg=temp;
          temp=~temp;
          temp=temp>>1;
          temp=~temp;
          delay(100);
          i++;
          //if(flag!=1) //同理就哦了
          //break;
          }
          }
          }
          }
          //------------------------------------------------------------------------------
          //定時(shí)器0中斷函數(shù),由于用的Proteus仿真,我看著它進(jìn)入中斷有時(shí)間長(zhǎng)的,有時(shí)間短的,所以所以這個(gè)
          void timer0()interrupt 1
          {
          EA=0; //關(guān)閉總中斷
          a0=1;
          a1=0;//選中PB口寄存器
          temp1=in_reg;//讀取PB口的數(shù)據(jù)
          if(((~temp1)&0x01)==1)//按鍵檢測(cè)(由于這里的8255當(dāng)設(shè)置為輸入的時(shí)候都是輸入高電平~~,所以還是取個(gè)反
          {
          //delay(5);//這里就是按鍵檢測(cè)的一個(gè)延時(shí)防抖動(dòng)的,但是我加上跟不加,差別真的好大啊~~暈了~~
          if(((~temp1)&0x01)==1)
          {
          flag=~flag; //取反標(biāo)志位,讓它的循環(huán)方向改變,下面就不加按鍵松手檢測(cè)了~~因?yàn)榧硬簧蟸~呵呵
          }
          }
          a0=0;
          a1=0;
          EA=1;
          }
          //------------------------------------------------------------------------------
          //外部中斷1,這個(gè)是我另加上去的,真的要累死了,我用的外部中斷1,它和上面的按鍵檢測(cè)是一樣的,看來(lái)我是對(duì)的,Proteus仿真的時(shí)候,定時(shí)器還是有問(wèn)題的,有時(shí)候根本不執(zhí)行中斷?。?!
          void int1() interrupt 2
          {
          flag=~flag;
          }


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 51單片機(jī)8255

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();