?? demo451.asm
字號:
;CH451 PIC系列單片機演示程序
;USE PIC16XX
;Web http//www.winchiphead.com
;Author YHW 2003.8
;*************************************************************
;需要主程序定義的參數
CH451_DCLK EQU 1 ;串行數據時鐘線,上升沿激活
CH451_DIN EQU 2 ;串行數據輸出,按451數據加載
CH451_LOAD EQU 3 ;串行命令加載,上升沿激活
CH451_DOUT EQU 0 ;INT0,鍵盤中斷和鍵值數據輸入,按451的數據傳輸
CH451_COM1 EQU 20H ;451數據底8位數據
CH451_COM2 EQU 21H ;451數據高8位
CH451_CON EQU 22H ;數據加載計數器
CH451_KEY EQU 24H ;中斷451鍵值存放
CH451_READ1 EQU 23H ;讀出的451鍵值
;STATUS EQU 03H
;OPTION EQU 81H
;TRISA EQU 85H
;TRISB EQU 86H
PA EQU 05H
PB EQU 06H
;INTCON EQU 0BH
;RP0 EQU 05H
;
;***********************************************************
;主程序
ORG 00H
GOTO STARTE
ORG 04H
GOTO CH451_INTER
ORG 05H
STARTE: NOP
BSF STATUS,RP0
MOVLW 01H
MOVWF TRISB
BCF STATUS,RP0
MOVLW 0FFH
MOVWF CH451_KEY
; ............
CALL CH451_INIT
MOVLW 3H
MOVWF CH451_COM1
MOVLW 4H
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 80H
MOVWF CH451_COM1
MOVLW 05H
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 1H
MOVWF CH451_COM1
MOVLW 08H
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 2H
MOVWF CH451_COM1
MOVLW 09H
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 3H
MOVWF CH451_COM1
MOVLW 0AH
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 4H
MOVWF CH451_COM1
MOVLW 0BH
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 5H
MOVWF CH451_COM1
MOVLW 0CH
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 6H
MOVWF CH451_COM1
MOVLW 0DH
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 7H
MOVWF CH451_COM1
MOVLW 0EH
MOVWF CH451_COM2
CALL CH451_WRITE
MOVLW 8H
MOVWF CH451_COM1
MOVLW 0FH
MOVWF CH451_COM2
CALL CH451_WRITE
BCF INTCON,1
BSF INTCON,7
MOVLW 00H
MOVWF 29H
X6: BSF PB,5
MOVF CH451_KEY,0
BSF PB,6
BCF STATUS,0
SUBLW 0FEH
BTFSS STATUS,0
GOTO X6
X5: MOVF CH451_KEY,0
ANDLW 3FH
MOVWF 28H
MOVLW 0FFH
MOVWF CH451_KEY
INCF 29H
; MOVF 30H,0
MOVF 29H,0
MOVWF CH451_COM1
MOVLW 08H
MOVWF CH451_COM2
CALL CH451_WRITE
;GOTO X6
MOVF 28H,0
ANDLW 0FH
;SUBLW 080H
MOVWF CH451_COM1
MOVLW 09H
MOVWF CH451_COM2
CALL CH451_WRITE
MOVF 28H,0
ANDLW 0F0H
MOVWF 2AH
SWAPF 2AH,0
MOVWF CH451_COM1
MOVLW 0AH
MOVWF CH451_COM2
CALL CH451_WRITE
;GOTO X6
MOVF 28H,0
;SUBLW 40H
; MOVWF 25H
CLRF 27H
;MOVF 25H,0
X7: BCF STATUS,0
INCF 27H
BCF PB,5
MOVF 28H,0
MOVWF 26H
MOVLW 0AH
SUBWF 28H,1
BTFSc STATUS,0
GOTO X7
MOVF 26H,0
MOVWF CH451_COM1
MOVLW 0DH
MOVWF CH451_COM2
CALL CH451_WRITE
DECF 27H,0
;BCF STATUS,0
MOVWF CH451_COM1
MOVLW 0EH
MOVWF CH451_COM2
CALL CH451_WRITE
BCF PB,4
GOTO X6
;
;************************************************************
;CH451初始化程序
CH451_INIT: MOVLW 01H
BSF STATUS,5 ;選擇體1
MOVWF TRISB
BCF STATUS,5
BCF PB,CH451_DIN ;先高后低通知451選擇四線傳輸
BSF PB,CH451_DCLK ;置為高電平
BSF PB,CH451_DIN
BSF PB,CH451_LOAD
BSF PB,CH451_DOUT
;下面是開啟中斷指令
BSF STATUS,5 ;選擇體1
BCF 81H,6 ;設置下降沿有效
BCF STATUS,5
BSF INTCON,4 ;INT0使能
BCF INTCON,1 ;清中斷標志
RETURN
;*************************************************************
;CH451寫入子程序
;USE W COM1 COM2 CON
CH451_WRITE: BCF INTCON,4 ;關INT0中斷
BCF PB,CH451_LOAD ;命令開始,此句也可以放在后面
MOVLW 8H
MOVWF CH451_CON ;將低8位送入
CH451_WRITE_0: RRF CH451_COM1 ;低位在前,高位在后
BCF PB,CH451_DCLK
BTFSC STATUS,0 ;判斷送入位高低電平
GOTO CH451_WRITE_1 ;為高跳轉
GOTO CH451_WRITE_2 ;為低跳轉
CH451_WRITE_1:
BSF PB,CH451_DIN ;送入高電平
GOTO CH451_WRITE_3
CH451_WRITE_2:
BCF PB,CH451_DIN ;送入低電平
CH451_WRITE_3: BSF PB,CH451_DCLK ;產生上升沿通知451輸入位數據
DECFSZ CH451_CON ;未送完繼續
GOTO CH451_WRITE_0
MOVLW 04H ;送入低四位
MOVWF CH451_CON
CH451_WRITE_4: RRF CH451_COM2 ;低位在前,高位在后
BCF PB,CH451_DCLK
BTFSC STATUS,0 ;判斷送入位高低電平
GOTO CH451_WRITE_5 ;為高轉移
GOTO CH451_WRITE_6 ;為低轉移
CH451_WRITE_5:
BSF PB,CH451_DIN ;送入高電平
GOTO CH451_WRITE_7
CH451_WRITE_6: BCF PB,CH451_DIN ;送入低電平
CH451_WRITE_7: BSF PB,CH451_DCLK
DECFSZ CH451_CON
GOTO CH451_WRITE_4
BSF PB,CH451_LOAD ;加載數據
BSF INTCON,4 ;開中斷
RETURN
;**************************************************************
;CH451讀入子程序
;
CH451_READ:
BCF INTCON,4
BCF PB,CH451_LOAD ;命令開始
MOVLW 03H ;寫入控制字
MOVWF CH451_CON
CH451_READ_1: BCF PB,CH451_DCLK
BSF PB,CH451_DIN ;輸入1
BSF PB,CH451_DCLK
DECFSZ CH451_CON
GOTO CH451_READ_1
BCF PB,CH451_DCLK
BCF PB,CH451_DIN ;輸入0
BSF PB,CH451_DCLK
BSF PB,CH451_LOAD ;加載命令字
MOVLW 07H ;讀出7位
MOVWF CH451_CON
CH451_READ_4: BTFSS PB,CH451_DOUT ;判斷CH451_DOUT高低電平
GOTO CH451_READ_2 ;低電平跳轉
GOTO CH451_READ_3 ;高電平跳轉
CH451_READ_2: BCF STATUS,0 ;置C為0
GOTO CH451_READ_5
CH451_READ_3: BSF STATUS,0
CH451_READ_5: BCF PB,CH451_DCLK ;下降沿通知451送出下一組數據
RLF CH451_READ ;讀進寄存器
BSF PB,CH451_DCLK ;置為
DECFSZ CH451_CON ;判斷七組數據是否接受完
GOTO CH451_READ_4
BCF INTCON,1 ;清中斷標志
BSF INTCON,4 ;開中斷
RETURN ;不帶參數反回
;***********************************************************
;鍵盤中斷程序
CH451_INTER:
BTFSS INTCON,1 ;判斷是否鍵盤中斷
GOTO CH451_INTER_NO ;非鍵盤中斷眺出
BCF PB,CH451_LOAD ;命令開始
; 送入讀控制字
MOVLW 03H ;送入3位1
MOVWF CH451_CON
CH451_INTER_1: BCF PB,CH451_DCLK
BSF PB,CH451_DIN ;送入1
BSF PB,CH451_DCLK ;上升沿通知接收
DECFSZ CH451_CON
GOTO CH451_INTER_1
BCF PB,CH451_DCLK ;送入一位0
BCF PB,CH451_DIN
BSF PB,CH451_DCLK ;
BSF PB,CH451_LOAD ;加載數據
MOVLW 07H ;讀進七位
MOVWF CH451_CON
CH451_INTER_4: BTFSS PB,CH451_DOUT ;判斷讀出是低是高
GOTO CH451_INTER_2 ;低轉移
GOTO CH451_INTER_3 ;高轉移
CH451_INTER_2: BCF STATUS,0 ;標志位置0
GOTO CH451_INTER_5
CH451_INTER_3: BSF STATUS,0 ;標志位置1
CH451_INTER_5: BCF PB,CH451_DCLK ;產生下降沿通知451輸出下一位
RLF CH451_KEY ;接收鍵值
BSF PB,CH451_DCLK
DECFSZ CH451_CON ;數據接收完眺一步
GOTO CH451_INTER_4
BCF INTCON,1 ;清中斷標志
CH451_INTER_NO: NOP
RETFIE
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -