HC18P01x 應用筆記

2011-05-16

HC18P01x 應用筆記
- 1 -
HC18P01x
應用筆記
DOC. VERSION 1.4
芯圣電子
2010 年6 月
HC18P01x 應用筆記
- 2 -
目錄
一.系統寄存器定義
二.程序架構
三.查表
四.散轉
五.I/O 端口操作
HC18P01x 應用筆記
- 3 -
一.系統寄存器定義
W EQU H'0000'
F EQU H'0001'
;----- Register Files---------------------
;BANK0
INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'
PCLATH EQU H'000A'
INTCON EQU H'000B'
WPUB EQU H'0013'
;BANK1
OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
PCON EQU H'008E'
;----- STATUS Bits -----------------------
IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
TO EQU H'0004'
PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'
;----- INTCON Bits -----------------------
GIE EQU H'0007'
TMR0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
TMR0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'
;----- OPTION Bits -----------------------
RBPU EQU H'0007'
INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'
;----- PCON Bits -------------------------
POR EQU H'0001'
BOR EQU H'0000'
HC18P01x 應用筆記
- 4 -
二.程序架構
; ******************************************************
; 內存定義
; ******************************************************
W_temp EQU H'004E'
STATUS_temp EQU H'004F'
; ******************************************************
; 復位
; ******************************************************
ORG 0000h
RESET
GOTO Main ; 跳轉至主函數
; ******************************************************
; 中斷
; ******************************************************
ORG 0004h
INT
MOVWF W_temp ; 保護現場
SWAPF W_temp, F ; 保存W 寄存器
SWAPF STATUS, W
MOVWF STATUS_temp ; 保存STATUS 寄存器
INT_TMR0
BTFSS INTCON, TMR0IF
GOTO INT_INT0
; ******************************************************
; 用戶Timer0 中斷處理程序
; ******************************************************
INT_INT0
BTFSS INTCON, INTF
GOTO INT_RB
; ******************************************************
; 用戶INT0 外部中斷處理程序
; ******************************************************
INT_RB
BTFSS INTCON, RBIF
GOTO INT_EXIT
; ******************************************************
; 用戶PORTB[7:4]電平變化中斷處理程序
MOVF PORTB, W ; 讀一次端口B(取消硬件產生的PORTB[7:4]電平變化中斷)
; ******************************************************
INT_EXIT ; 中斷退出
MOVLW b'11111000'
ANDWF INTCON, F ; 清除中斷標志位
SWAPF STATUS_temp, W ; 恢復現場
MOVWF STATUS ; 恢復STATUS 寄存器
SWAPF W_temp, W ; 恢復W 寄存器
RETFIE ; 中斷返回
; ******************************************************
HC18P01x 應用筆記
- 5 -
; ******************************************************
; 子函數
; ******************************************************
Sys_Ini ; 系統寄存器初始化
BSF STATUS, RP0 ; 切換到Bank 1
MOVLW b'10000111'
MOVWF OPTION_REG; 設置OPTION_REG,注意:若bit5 T0CS 為1,則T0CKI 引腳為輸入
CLRF TRISA ; 設置端口A 方向
CLRF TRISB ; 設置端口B 方向
BCF STATUS, RP0 ; 切換回Bank 0
CLRF PORTA ; 設置端口A 數據
CLRF PORTB ; 設置端口B 數據
MOVLW b'11111111'
MOVWF WPUB ; 設置端口B 上拉電阻
MOVF PORTB, W ; 讀一次端口B(取消硬件產生的PORTB[7:4]電平變化中斷)
MOVLW b'10111000'
MOVWF INTCON ; 設置中斷
RETURN
; ******************************************************
RAM_Ini ; 內存初始化,利用間接尋址清除所有內存
MOVLW 0x19
MOVWF FSR ; 設置間接尋址入口地址
RAM_Ini_CLR
INCF FSR, F ; 指向下一個地址
CLRF INDF ; 間接尋址
MOVF FSR, W
SUBLW 0x4F
BTFSS STATUS, Z ; 判斷是否到終止地址
GOTO RAM_Ini_CLR
RETURN
; ******************************************************
; ******************************************************
; 主函數
; ******************************************************
Runaway ; 跑飛
Main ; 初始化
CALL Sys_Ini
CALL RAM_Ini
; ******************************************************
; 用戶主循環處理程序
Main_Loop
CLRWDT ; 清除看門狗
HC18P01x 應用筆記
- 6 -
GOTO Main_Loop
; ******************************************************
;*******************************************************
; Run Away 程序跑飛處理,未用到的行全部加,抗干擾考慮
;*******************************************************
GOTO Runaway
GOTO Runaway
;*******************************************************
End ; 程序結束標志
HC18P01x 應用筆記
- 7 -
三.查表
用法:根據 W 寄存器內的值,調用表格(CALL)后,W 返回值即數碼管的顯示值。
;**************************************************************
; 7 段數碼管顯示查表
;**************************************************************
Table_SEG7
ANDLW 0x0F ; 防止溢出
ADDWF PCL, F ; PC 值加W 值得到跳轉地址
RETLW b’10111011’ ; 0
RETLW b’10010000’ ; 1
RETLW b’11100011’ ; 2
RETLW b’11110010’ ; 3
RETLW b’11011000’ ; 4
RETLW b’01111010’ ; 5
RETLW b’01111011’ ; 6
RETLW b’10111000’ ; 7
RETLW b’11111011’ ; 8
RETLW b’11111010’ ; 9
RETLW b’10111011’ ; A
RETLW b’00000000’ ; B
RETLW b’00000000’ ; C
RETLW b’00000000’ ; D
RETLW b’00000000’ ; E
RETLW b’00000000’ ; F
RETLW b’10111011’ ; 0
;**************************************************************
HC18P01x 應用筆記
- 8 -
四.散轉
用法:根據 W 寄存器內的跳轉值,運行以下程序后即跳轉至相應的處理程序。
;**************************************************************
ANDLW 0x07 ; 防止溢出
ADDWF PCL, F ; PC 值加W 值得到跳轉地址
GOTO ROUTE0 ; 跳轉至程序0
GOTO ROUTE1 ; 跳轉至程序1
GOTO ROUTE2 ; 跳轉至程序2
GOTO ROUTE3 ; 跳轉至程序3
GOTO ROUTE4 ; 跳轉至程序4
GOTO ROUTE5 ; 跳轉至程序5
GOTO ROUTE6 ; 跳轉至程序6
GOTO ROUTE7 ; 跳轉至程序7
;**************************************************************
HC18P01x 應用筆記
- 9 -
五.I/O 端口操作
1.系統寄存器OPTION_REG 的bit5 T0CS 為1,則T0CKI 引腳為輸入。T0CS 為0,對應T0CKI
引腳才由端口的方向控制設置決定。
2.當對端口進行讀-修改-寫操作時,由于讀的是端口電平,所以當端口負載過大,并且超過了翻
轉點電壓,則該端口電平會改變,而導致誤操作。建議用戶在硬件設計時,盡量不要超過端口的負載電
流;另外少用或不用讀-修改-寫操作,設一內存,所有的操作都針對該內存,需要時把內存值通過W 寄
存器賦值給端口。
3.位操作時其實質跟byte 操作沒有差別,其他位也會進行讀-修改-寫操作,參考第2 條。

上一篇:HC18 指令詳解
下一篇:HC18P110規格
本網站由阿里云提供云計算及安全服務 Powered by CloudDream
亚洲无码在线人妻