久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

基于SPI總線單片機開關量的輸入程序設計

作者:佚名   來源:本站原創   點擊數:  更新時間:2008年07月13日   【字體:

//該程序用于開關量的輸入,并顯示在與D口相連的LED上,S1~S8分別控制Q1~Q8
//開關量采用SPI方式通過74HC165輸入,在調試程序時必須把8位的
//拔碼開關拔向相應的位置,即把8個LED接到PORTD口上

#include "p18f458.h"
volatile  unsigned  char  data;

/*系統初始化子程序*/
void initial()
{
 PIR1=0;       /*清除SSPIF標志*/
 SSPCON1=0x30;     /* SSPEN=1;CKP=0,FOSC/4 */
 SSPSTAT=0xC0;
 TRISC=0x10;      /*SDI引腳為輸入,SCK引腳為輸出*/
 TRISA=0x00;      /*A口為輸出方式,用RA4作控制信號*/
 TRISD=0x00;      /*D口為輸出方式*/
 INTCON=0x00;     /*關閉所有中斷*/
}

/*SPI接收子程序*/
char  SPIIN()

 PORTAbits.RA4=0;     /*74HC165并行置數使能,將8位開關量置入器件*/
         /*(LOAD為低電平時8位并行數據置入74HC165)*/
 PORTAbits.RA4=1;     /*74HC165移位置數使能(LOAD為高電平時芯*/
         /*片才能串行工作)*/
 SSPBUF=0;      /*啟動SPI,此操作只用于清除SSPSTAT的*/
         /*BF位,因此W中的實際數據無關緊要*/
 do{
     ;
 }while(PIR1bits.SSPIF==0);   /*查詢數據接收完畢否?*/
 PIR1bits.SSPIF=0;     /*清除SSPIF標志*/
 data=SSPBUF;
 return(data);      /*返回接收到的數據*/
}

/*把SPI接收的數據通過D口顯示在8個發光二極管上的子程序*/
void SPIOUT(char data)
{
 PORTD=~data;     /*因為LED與D口連接方式的要求,需把D口的*/
        /*輸入量取反后才送出*/
}

/*pic單片機主程序*/
main( )
{
 initial();      /*系統初始化*/
 while(1)
 {
  SPIIN();     /*SPI接收外部數據*/
  SPIOUT(data);    /*送出數據顯示*/
 }
}


------------------匯編語言版本的SPI總線單片機開關量的輸入程序設計------------------
;該程序用于開關量的輸入,并顯示在與D口相連的LED上,S1~S8分別控制Q1~Q8
;該代碼由http://www.zg4o1577.cn 單片機網調試并運行成功
;開關量采用SPI方式通過74HC165輸入,在調試程序時必須把8位的
;拔碼開關拔向相應的位置,即把8個LED接到PORTD口上

  LIST  P=18F458
  INCLUDE  "P18F458.INC"
 
  ORG   0X00
  GOTO  MAIN
  ORG   0X30
;*****************單片機初始化子程序*****************
INITIAL
  BCF   TRISA,4    ;置RA4為輸出方式,以輸出開關量輸入的鎖存信號
  BSF   TRISC,4   ;設置SDI引腳為輸入
  BCF   TRISC,3   ;設置SCK引腳為輸出 
  CLRF      TRISD       ;設置D口為輸出方式
  BCF   INTCON,GIE  ;關閉所有中斷
  MOVLW  0XC0
  MOVWF  SSPSTAT   ;設置SSPSTAT寄存器
  MOVLW  0X30
  MOVWF  SSPCON1   ;設置SPI的控制方式,允許SSP方式,
  RETURN      ;返回
;*********該子程序將通過SPI方式接收外部的一組串行信號********
SPIIN
  BCF   PORTA,4     ;74HC165并行置數使能,將8位開關量置入器件
         ;(LOAD為低電平時8位并行數據置入74HC165)
  NOP
  NOP 
  BSF   PORTA,4   ;74HC165移位使能(LOAD為高時芯片才能串行工作)
  NOP
  NOP
  MOVWF  SSPBUF   ;啟動SPI,此操作只用于清除SSPSTAT的BF位,因
         ;此W中的實際數據無關緊要
LOOP15 BTFSS  SSPSTAT,BF  ;查詢數據接收完畢否?
  GOTO  LOOP15
  BCF   PIR1,SSPIF  ;清SPI中斷標志
  MOVF    SSPBUF,0  ;SSPBUF中內容送W單元    
  RETURN      ;子程序返回
;****************************************
MAIN NOP
  CALL  INITIAL   ;初始化
LOOP CALL  SPIIN   ;通過SPI方式把開關量存入W寄存器
  XORLW  0XFF   ;因為LED與D口連接方式的要求,需把D口的
         ;輸入量取反后才送出
  MOVWF  PORTD   ;送D口顯示在LED上
  NOP
  GOTO  LOOP   ;反復輸入開關量
  END
 

關閉窗口
主站蜘蛛池模板: 日韩中文一区二区 | 国产日韩欧美一区 | 夜夜撸av| 日韩久久综合 | 精品一区二区三区在线观看 | av中文字幕在线播放 | 欧美日韩一区在线播放 | 国产精品毛片一区二区在线看 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 日韩欧美在线观看 | 成人精品在线视频 | 欧美一区二区三区在线观看 | 免费成人在线网站 | 蜜桃视频一区二区三区 | 一区二区三区高清 | 日韩 欧美 综合 | 日韩欧美三级电影在线观看 | 99久久婷婷国产综合精品电影 | 91精品中文字幕一区二区三区 | 怡红院怡春院一级毛片 | 国产精品视频 | 午夜一区二区三区在线观看 | 中文字幕一区二区三区四区五区 | 91在线视频播放 | 天天干.com | 国产精品久久久久一区二区三区 | 国产视频黄色 | 久久黄视频 | 香蕉超碰| 视频一区二区中文字幕 | 在线看91| 国产精品伦理一区 | 日韩综合在线播放 | 97久久精品午夜一区二区 | 天天干天天谢 | 国产精品一区二区三区在线 | 成人免费在线观看 | av在线电影网 | 久久久久国产一区二区三区 | 91文字幕巨乱亚洲香蕉 | 夜夜夜夜夜夜曰天天天 |