?? 1_5.asm
字號:
;------------------------------------------
;文件名"1_5.ASM"
;作者:求是科技
;功能:實現了簡單的I/O擴展
;------------------------------------------
STATUS EQU 03H ;定義狀態寄存器地址
PORTA EQU 05H ;定義端口A的數據寄存器地址
TRISA EQU 85H ;定義端口A的方向寄存器
PORTB EQU 06H ;定義端口B的數據寄存器地址
TRISB EQU 86H ;定義端口B的方向寄存器
RP1 EQU 06H ;定義狀態寄存器中的頁選位RP1
RP0 EQU 05H ;定義狀態寄存器中的頁選位RP0
STATUS_IN EQU 30H ;存放輸入的狀態值
DATA1 EQU 20H ;定義外循環變量
DATA2 EQU 21H ;定義內循環變量
TEMP EQU 22H ;定義臨時變量存儲端口D的輸入
COUNT1 EQU 130 ;定義存儲外循環次數的變量
COUNT2 EQU 0FFH ;定義存儲內循環次數的變量
;------------------------------------------
ORG 00H ;
GOTO MAIN ;
;-------------------主程序開始--------------------
MAIN
NOP ;設置一條ICD必須的空操作
;-------------------初始化------------------------
BSF STATUS,RP0 ;轉到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;將00H送到W
MOVWF TRISA ;設置PORTA的方向為輸出
MOVLW 0FFH ;將FFH送到W
MOVWF TRISB ;設置PORTB的方向為輸入
BCF STATUS,RP0 ;轉到BANK0
BCF STATUS,RP1 ;
;-------------------初始化結束---------------------
MOVLW 0FDH ;將FDH送到W
MOVWF PORTA ;使能74LS244,準備讀入狀態值
MOVF PORTB,0 ;讀入輸入的狀態值
MOVWF STATUS_IN ;將讀入的值存到30H中
MOVLW 0FFH ;將FB送到W
MOVWF PORTA ;準備輸出狀態值
BSF STATUS,RP0 ;轉到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;將00H送到W
MOVWF TRISB ;設置PORTB的方向為輸出
BCF STATUS,RP0 ;轉到BANK0
BCF STATUS,RP1 ;
LOOP
MOVF STATUS_IN,0 ;將狀態值讀到W
MOVWF PORTB ;按獲得的狀態值,點亮LED
CALL DELAY ;延時
CLRF PORTB ;熄滅所有的LED
CALL DELAY ;延時
GOTO LOOP ;循環
;---------------延時子程序-------------------
DELAY
MOVLW COUNT1 ;設置外部循環的次數
MOVWF DATA1 ;
LOOP1
MOVLW COUNT2 ;設置內部循環的次數
MOVWF DATA2 ;
LOOP2
DECFSZ DATA2,1 ;內部循環變量自減1,為0則跳轉
GOTO LOOP2 ;
DECFSZ DATA1,1 ;外部循環變量自減1,為0則跳轉
GOTO LOOP1 ;
RETURN ;返回主程序
;---------------延時子程序結束-------------------
END
;---------------程序結束-------------------
;------------------------------------------
;文件名"1_5.ASM"
;作者:求是科技
;功能:在實現了簡單的I/O擴展
;------------------------------------------
STATUS EQU 03H ;定義狀態寄存器地址
PORTA EQU 05H ;定義端口A的數據寄存器地址
TRISA EQU 85H ;定義端口A的方向寄存器
PORTB EQU 06H ;定義端口B的數據寄存器地址
TRISB EQU 86H ;定義端口B的方向寄存器
RP1 EQU 06H ;定義狀態寄存器中的頁選位RP1
RP0 EQU 05H ;定義狀態寄存器中的頁選位RP0
STATUS_IN EQU 30H ;存放輸入的狀態值
DATA1 EQU 20H ;定義外循環變量
DATA2 EQU 21H ;定義內循環變量
TEMP EQU 22H ;定義臨時變量存儲端口D的輸入
COUNT1 EQU 130 ;定義存儲外循環次數的變量
COUNT2 EQU 0FFH ;定義存儲內循環次數的變量
;------------------------------------------
ORG 00H ;
GOTO MAIN ;
;-------------------主程序開始--------------------
MAIN
NOP ;設置一條ICD必須的空操作
;-------------------初始化------------------------
BSF STATUS,RP0 ;轉到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;將00H送到W
MOVWF TRISA ;設置PORTA的方向為輸出
MOVLW 0FFH ;將FFH送到W
MOVWF TRISB ;設置PORTB的方向為輸入
BCF STATUS,RP0 ;轉到BANK0
BCF STATUS,RP1 ;
;-------------------初始化結束---------------------
MOVLW 0FDH ;將FDH送到W
MOVWF PORTA ;使能74LS244,準備讀入狀態值
MOVF PORTB,0 ;讀入輸入的狀態值
MOVWF STATUS_IN ;將讀入的值存到30H中
MOVLW 0FFH ;將FB送到W
MOVWF PORTA ;準備輸出狀態值
BSF STATUS,RP0 ;轉到BANK1
BCF STATUS,RP1 ;
MOVLW 00H ;將00H送到W
MOVWF TRISB ;設置PORTB的方向為輸出
BCF STATUS,RP0 ;轉到BANK0
BCF STATUS,RP1 ;
LOOP
MOVF STATUS_IN,0 ;將狀態值讀到W
MOVWF PORTB ;按獲得的狀態值,點亮LED
CALL DELAY ;延時
CLRF PORTB ;熄滅所有的LED
CALL DELAY ;延時
GOTO LOOP ;循環
;---------------延時子程序-------------------
DELAY
MOVLW COUNT1 ;設置外部循環的次數
MOVWF DATA1 ;
LOOP1
MOVLW COUNT2 ;設置內部循環的次數
MOVWF DATA2 ;
LOOP2
DECFSZ DATA2,1 ;內部循環變量自減1,為0則跳轉
GOTO LOOP2 ;
DECFSZ DATA1,1 ;外部循環變量自減1,為0則跳轉
GOTO LOOP1 ;
RETURN ;返回主程序
;---------------延時子程序結束-------------------
END
;---------------程序結束-------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -