?? ch451pic.asm
字號:
;CH451 子程序
;基于 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鍵值存放
;PA EQU 05H
;PB EQU 06H
;**********************************************************
;
;對外接口子程序
;
; 1 CH451_INIT 初始化子程序
;
; 2 CH451_WRITE 輸出命令子程序
;
; 3 CH451_READ 輸出健值子程序
;
; 4 CH451_INTER 鍵盤中斷子程序
;
;***********************************************************
;主程序
; 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
; .......
;
;************************************************************
;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 + -